티스토리 뷰

1999-8-24

 

TCP/IP 프로토콜 개발 과정을 이해하기 위해서는 먼저 네트웍 관련 용어 몇 가지 알아야 합니다.

 

 (1) 노드(Node)
네트웍을 이루고 있는 각각의 컴퓨터나 기기를 노드라고 합니다. 로컬 네트웍(LAN)에 연결된 각 PC가 노드인 것입니다. 노드는 서로 연결되어 있고 그 연결을 매개하는 교량 역할을 하는 것이 있습니다. 그것을 라우터(router)라 합니다. 노드들 간에 데이타를 교환하려면 데이타가 어떤 방식으로 전송되어야 한다는 공통의 약속이 필요할 것입니다.

 

 (2) 프로토콜(Protocol)
바로 그 약속, 규약을 프로토콜이라 합니다. 전송할 데이타는 어떤 포맷이어야 한다든지, 전송하는 방식은 어떠 해야 한다는 것을 규정한 약속입니다. TCP/IP 프로토콜은 인터넷(Internet)이라는 네트웍에 연결된 각 노드 사이의 데이타 전송을 규정한 프로토콜 표준입니다.

 

기초가 되는 어떤 프로토콜의 기능을 원활하게 하기 위해 사용하는 별개의 프로토콜도 있습니다. 예를 들면, 월드와이드웹(WWW)의 프로토콜인 HTTP(HyperText Transfer Protocol)는 TCP/IP라는 프로토콜 위에서 동작합니다. TCP/IP라는 기반 위에 HTTP라는 프로토콜을 운용하는 것은  TCP에 있는 기본적인 명령어를 재활용할 수 있으므로 프로토콜이 더 간소해질 수 있고 또 TCP/IP라는 확립된 프로토콜 위에서 운용되기 때문에 공통된 표준으로써 받아들여지는 데도 도움이 됩니다.

 

 (4) 프로토콜 스택(Protocol Stack)
위 HTTP와 TCP/IP 프로토콜 설명에서 본 것처럼 프로토콜은 여러 층으로 쌓여서 스택(stack) 형태로 운용됩니다.

 

TCP/IP 프로토콜의 역사

미국 정부기관인 American Defense Advanced Projects Research Agency(ARPA -> 이후 DARPA가 됨.) 연구원들은 소규모의 컴퓨터 네트웍을 핵 전쟁이나 기타 재난 상황에서도 운용 가능하게 확장하기 위한 프로젝트를 진행합니다. 이렇게 전세계에 다양하게 분포하는 네트웍을 연결할 방법을 찾겠다는 취지 하에 개발된 것이 알파넷(ARPANET)이고 이것이 오늘 날 보는 것과 같은 인터넷이 됩니다. 인터넷은 미국 NSF(National Science Foundation)에서 만든 NSFNET을 백본(backbone)으로 수많은 지역 캐리어(carrier)를 통합 관리하고 있고 각 ISP나 기타 네트웍은 이들 지역 캐리어에 접속하는 방식으로 인터넷에 편입되어 있습니다. 이 네트웍은 데이타를 패킷(packet)이라는 정보 조각으로 나눠서 주고 받는 방식을 기반으로 하게 되는데 패킷으로 나누고 재조합하는 부분을 TCP라는 프로토콜을 통해 구현합니다.

 

TCP(Transmission Control Protocol)는reliable 해서, 전송하는 데이타가 손상되거나 복제되거나  순서에 맞지 않게 전송되는 것을 회복할 수 있게 디자인되었습니다.  전송하는 각 바이트에 순번을 할당하고, 받는 쪽에서도 이를 확인하는 절차를 둬서 안정적인 데이타 전송이 가능했습니다. 오리지널 TCP는 원격지에서 로그인하는 기능, 이메일, 파일 전송, 그리고 몇 가지 사용자 인터액션을 갖추고 있었습니다. 그런데 TCP가 금새 상당한 인기를 끌게 됩니다. 대기업의 네트웍이나 소규모 랜 등에 쉽게 적용이 될 수 있었기 때문입니다. 게다가 TCP는 기존의 프로토콜들도 별 탈 없이 지원한다는 강점을 갖고 있었기 때문에 더욱 널리 퍼집니다.

 

한편, IP(Internet Protocol)는 많은 네트웍을 인터넷이라는 큰 네트웍으로 통합할 때 길을 잃지 않고 원하는 네트웍의 원하는 노드로 찾아갈 수 있는 경로를 확립하기 위해 개발됩니다. LAN으로 연결된 다양한 네트웍은 하드웨어 스펙이나 속도, 노드의 숫자 등 매우 다양하기 때문에 그 위에 IP라는 일종의 가상의 레이어를 만들어서 이들 네트웍을 하나로 통합해 보려 했던 것입니다. 여러 네트웍으로 라우팅(routing; 경로 찾기)을 위해 만들어진 것입니다. IP는 전송하려는 각 패킷에 출발지와 도착지 정보를 붙여서 데이타가 올바른 경로를 찾도록 합니다. IP는 TCP와 달리 unreliable 해서 전송하는 데이타그램이 제대로 전달되었는지, 전달 중 복제되지는 않았는지 등을 확인할 수는 없고 또 에러를 수정하는 기능은 없습니다.

 

인터넷이라는 거대한 네트웍을 구성하기 위해서 DARPA 연구원들은 IP 프로토콜 위에 TCP 프로토콜을 합쳐서 TCP/IP 프로토콜을 만들어냅니다. 이로써 방대한 네트웍 상에서 특정 네트웍과 노드로의 경로를 확실하게 하면서 또한 전송하는 데이타의 손상이나 복제 등을 해결하는 기능도 함께 갖출 수 있었습니다. 이것이 오늘날의 TCP/IP 프로토콜입니다. TCP/IP는 인터넷의 표준 프로토콜로 www을 위한 HTTP나 FTP, gopher 등 프로토콜은 그 위에서 운용되는 것입니다. TCP/IP 주소는 IP 주소라고도 일컬어집니다.

 

여러 프로토콜은 자기 네트웍 상에 있는 컴퓨터를 확인할 수 있는 독자적인 방법을 갖고 있습니다. 과거 애플에서 사용하던 애플톡(AppleTalk) 프로토콜은 머신 네임을 사용합니다. 대부분의 랜이나 WAN(Wide Area Network)은 6 바이트의 identifier number인 MAC address를 사용해서 각각의 컴퓨터를 확인합니다. 이들이 TCP/IP를 통해 전세계적인 네트웍으로 통합되는 것입니다.

 

 

Source: w3.org, protocol stack

 

UDP와 TCP

IP(Internet Protocol) 레이어 상에서 데이타의 전송을 담당하는 프로토콜은 대표적으로 두 가지가 있습니다. TCP(Transport Communication Protocol)와 Unigram Data Protocol(UDP)입니다.

 

TCP 프로토콜은 커넥션 지향적(connection-oriented)입니다. 네트웍 상에서 접속을 만들고 각 데이타들이 순서에 맞게 전달되고 있는지, 또는 에러가 발생했는지, 그 에러가 수정이 되었는지를 점검하는 능력을 갖고 있습니다. 커넥션을 계속 확인하는 아주 우수한 프로토콜입니다.

 

TCP는 "3-way hardware handshaking"이라는 것을 통해서 네트웍 상의 에러가 있는지를 점검하고 데이타 패킷 검사(packet verification)를 하는 기능을 갖고 있고, 자체적으로 데이타 패킷에 순번을 매기는 부분이 있어서 각 패킷이 순서대로 도착했는지를 확인할 수 있습니다. 메시지를 여러 개의 데이타그램(datagram)으로 나눈 다음 받는 쪽에서 재조합하는 방식을 규정해 둔, 접속이 안정적으로 보장된 우수한 프로토콜입니다.

 

이와 달리 UDP는 connectionless한 특성을 갖고 있고 데이타 전송에 대한 보장이 없습니다. 사용이 간단하다는 장점은 있지만 에러가 많이 나서 접속이 쉽게 끊어진다는 단점이 있습니다. UDP는 불안정하기 때문에 큰 자원 사용 없이 빠르게 전송하는 것이 중요한 DNS라든지 인터넷 방송 또는 패킷 하나로 충분한 간단한 데이타처럼 전송에 대한 보장이나 데이타의 정확한 도착이 상대적으로 덜 중요한 곳에 쓰입니다.

포트(Port)

포트는 클라이언트/서버 시스템(Client-Server System)의 중요한 개념 중 하나입니다. IP 주소가 건물의 우편 번호라면 포트는 건물에 있는 특정 사무실 호수라고 생각하면 됩니다. IP 주소가 인터넷 상의 특정 컴퓨터의 주소를 가리킨다면 포트는 그 컴퓨터 내의 여러 프로세스(process)로 연결되는 통로입니다. 예를 들어 이메일이나 ftp 등 특정 서비스를 이용한다면 거기에 맞는 개별적인 통로를 TCP에서 규정해주는 것입니다.웹 서버는 일반적으로 포트 80을 통해 클라이언트와 연결됩니다. HTTP는 포트 80에 할당되는 것입니다. 만약 텔넷(telnet) 접속을 한다면 IP 주소는 동일하되 다른 포트 넘버를 사용하는 것입니다.

 

포트 번호는 IP 주소와는 상관이 없습니다. TCP에서 규정합니다. 예를 들면, TCP에 의해서 만들어진 데이타그램은 IP 주소가 적힌 편지봉투에 담아서 그 IP 주소에 맞는 건물(특정 컴퓨터)을 찾아갑니다. 빌딩에 도착한 편지는 IP 주소 봉투를 벗긴 다음, 내용물(TCP의 packet) 내에 들어있는 포트 넘버에 맞게 특정 사무실로 배달이 됩니다.[1]

 

TCP는 전달하려는 각 데이타 패킷에 TCP 헤더(Header)를 붙여서 포장(encapsulation)합니다.그 포장지에 붙어 있는 TCP 헤더에는 순서를 파악할 때 사용되는 데이타그램 고유 넘버와 그 데이타가 어느 포트에서 출발해서 어느 포트로 들어갈 것인지에 관한 정보 그리고 전송 도중 에러가 생겼는지를 체크하는 첵섬(checksum) 정보 등이 담겨 있는 것입니다.[2]

 

IP 프로토콜은 이 TCP 패킷의 헤더에 주소 정보를 덧붙입니다. 그 데이타 패킷이 어느 IP 주소에서 출발해서 어느 IP 주소로 간다는 정보를 첨가하는 것입니다.

 

데이타 패킷이 TCP/IP 프로토콜을 통해 어떤 노드에서 다른 노드로 전송되는 경우, 편지 봉투의 예처럼 네트웍 상의 해당 주소(IP 주소)로 찾아가서, TCP 헤더에 있는 포트 정보에 따라 그 컴퓨터의 특정 프로세스로 전송됩니다. 전송 과정 중에는 에러가 있었는지 없었는지를 첵섬(checksum)을 통해 점검합니다.

 

[1] Matthias Kalle Dalheimer, Terry Dawson, Lar Kaufman, Matt Welsh. TCP/IP and PPP. Running Linux, O'Reilly & Associates, 1999. p.518.
[2] Peter Wainwright. Packets and encapsulation. Professional Apache, Wrox, 1999. p.12.

반응형
댓글