이명헌 경영 스쿨
[테크] TCP/IP 그리고 네트웍 프로토콜
TCP와 IP를 합쳐보자
이명헌 [ 1999-8-24 ]

들어가는 글

이 글은 기술적으로 TCP/IP를 공부해보고자 하는 사람을 대상으로 한 글이 아니라 보통의 사용자들에게 TCP/IP의 개념을 알려 드리기 위해 쓴 글입니다. TCP/IP 프로토콜은 책이 한 권 나올 수 있을 정도로 많은 내용이 있습니다.

먼저 용어부터 간단하게 알아 봅시다. 이 글에서 계속 사용할 용어입니다.

  • 노드(Node)
    네트웍을 이루고 있는 각각의 컴퓨터나 기기를 노드라고 합니다. 로컬 네트웍에 연결된 각각의 컴퓨터가 그 네트웍의 노드입니다. 노드는 서로 연결되어 있고 그 연결을 매개해주는 일종의 교량 역할을 하는 것이 있습니다. 그것을 라우터(router)라 합니다. 노드들 간에 데이타를 교환하려면 데이타가 어떤 방식으로 전송되어야 한다는 공통의 약속이 필요할 것입니다.
  • 프로토콜(Protocol)
    바로 그 약속을 프로토콜이라 합니다. 전송할 데이타는 어떤 포맷이어야 한다든지, 전송하는 방식은 어떠 해야 한다는 것을 규정한 것입니다. TCP/IP는 인터넷이라는 네트웍 내에 존재하는 노드 사이의 데이타 전송을 규정해둔 프로토콜 표준입니다.
  • 네트워킹 프로토콜(Networking Protocol)
    기초가 되는 어떤 프로토콜의 기능을 원활하게 해주기 위해 쓰이는 또 하나의 프로토콜을 네트워킹 프로토콜이라 합니다. 웹의 프로토콜인 HTTP(HyperText Transfer Protocol)는 TCP라는 프로토콜 위에 얹혀서 작동합니다. TCP라는 기반 위에 HTTP라는 프로토콜을 운용하는 것은 몇 가지 이점이 있기 때문입니다. 먼저 TCP에 있는 기본적인 명령어를 재활용할 수 있으므로 프로토콜이 좀 더 간소해집니다. 또 TCP라는 거대한 프로토콜 위에서 운용되기 때문에 공통된 표준으로서의 위치도 보장받을 수 있습니다. TCP처럼 기초가 되는 프로토콜 위에서 운용되는 또 하나의 프로토콜을 네트워킹 프로토콜이라 합니다.
  • 프로토콜 스택(Protocol Stack)
    스택은 층층이 쌓여 있는 것입니다. 위에서 HTTP는 TCP 위에 얹혀 있다고 했는데 이것은 'HTTP는 프로토콜 스택 속에서 TCP 위에 놓인다'라고 표현할 수 있습니다.

프로토콜의 유형

요즘 많이 쓰이는 프로토콜에는 크게 두 종류가 있습니다.

  • Transport Communication Protocol(TCP)
  • Unigram Data Protocol(UDP)

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

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

UDP는 'connection-less' 프로토콜입니다. TCP처럼 '커넥션 지향적'이지 않습니다. 접속과 데이타 전송에 대한 보장이 없습니다. 그래서 UDP는 사용이 간단하다는 장점은 있지만 에러가 많이 나서 접속이 쉽게 끊어진다는 단점이 있습니다. UDP는 불안정하기 때문에 주로 인터넷 방송이나 온라인 게임 같은 전송에 대한 보장이나 데이타의 정확한 도착이 상대적으로 덜 중요한 곳에 쓰입니다.

IP 프로토콜은 TCP와 함께 TCP/IP 프로토콜을 만드는 데 사용됩니다. TCP에 IP를 첨가한 TCP/IP가 바로 인터넷 프로토콜의 표준입니다. IP 프로토콜은 TCP가 만들어 놓은 데이타 패킷의 길을 안내하는 역할(라우팅, routing)을 합니다. 소규모의 로컬 네트웍에서는 IP가 따로 필요 없을 수 있습니다. 규모가 작아서 따로 라우팅하는 프로토콜까지 끌어들일 필요가 없기 때문입니다. 하지만 인터넷은 거대한 네트웍입니다. 데이타는 수백 대의 컴퓨터를 거쳐서 최종 목적지에 도달하기도 합니다. 그래서 접속을 보장하는 TCP와 함께 IP 프로토콜이 동시에 필요합니다. IP가 길을 안내합니다.


포트(ports)

포트는 클라이언트/서버 시스템(Client-Server System)의 중요한 개념 중 하나입니다. 비유하자면, IP 주소는 빌딩의 우편 번호이고 포트는 그 빌딩 내의 특정 사무실 호수라고 생각하면 됩니다. IP 주소가 인터넷 상의 특정 '컴퓨터'의 주소를 가리킨다면 포트는 그 컴퓨터 내에 존재하는 여러 프로세스(process)로 연결되는 통로를 지칭합니다. 보통의 웹서버의 경우 대부분 포트 80을 통해 웹서버에 접속한 클라이언트와 서버가 서로 대화를 나눕니다. IP 주소를 이용해서 서버 컴퓨터를 찾은 다음 포트 넘버를 이용해서 'http 프로세스'를 찾는 것입니다. 만약, 그 서버에 텔넷(telnet) 접속을 한다면 IP 주소는 동일하되 다른 포트 넘버를 사용합니다. 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.

TCP/IP의 역사

처음에는 TCP와 IP가 각각 개발되었습니다. TCP는 미국방성 연구원들이 여러 가지 네트웍을 하나의 거대한 네트웍으로 통합하자는 취지를 갖고 만든 알파넷(ARPANET)을 구성하기 위해 개발되었습니다. 알파넷이 결국 오늘날의 인터넷이 됩니다.

오리지널 TCP는 원격지에서 로그인하는 기능, 이메일, 파일전송, 그리고 몇 가지 사용자 인터액션을 갖추고 있었습니다. 그런데 TCP가 금새 상당한 인기를 끌게 됩니다. 대기업의 네트웍이나 소규모 랜 등에 쉽게 적용이 될 수 있었기 때문입니다. 게다가 TCP는 기존의 프로토콜들도 별 탈 없이 지원한다는 강점을 갖고 있었기 때문에 더욱 널리 퍼집니다.

cable한편 IP는 네트웍에 라우팅 기능을 첨가하기 위해 만들어졌습니다. 라우팅 기능 역시 소규모 네트웍은 물론이거니와 대규모 네트웍, 심지어 전세계 규모의 인터넷에까지 손쉽게 활용될 수 있었습니다. 미 국방성 연구원들은 TCP와 IP를 함께 묶은 다음, 전화선 문제나 노드에서 발생된 문제를 자동으로 해결하는 기능 등을 첨가해서 오늘날과 같은 TCP/IP 프로토콜을 만들어 냅니다. TCP/IP는 수 많은 컴퓨터를 연결하여 거대한 규모의 네트웍, 즉 인터넷을 위해 만들어진 것입니다.

인터넷의 아이디어는 이렇습니다. 각각의 컴퓨터는 랜(LAN; Local Area Network)에 연결됩니다.그리고 이들 랜은 다시 조금 더 큰 네트웍(우리가 사용하는 ISP(Internet Service Provider)를 생각하면 됩니다.)에 연결됩니다. 그 네트웍은 다시 라우터를 통해 전세계로 연결됩니다. 여러 소규모 네트웍들이 인터넷 프로토콜의 표준인 TCP/IP에 의해 서로 연결되어 거대한 전세계적인 네트웍이 구성되는 것입니다.

모든 프로토콜은 자기 네트웍 상에 있는 각각의 컴퓨터를 확인할 수 있는 독자적인 방법을 갖고 있습니다. 애플톡(AppleTalk)은 머쉰네임을 사용합니다. 대부분의 랜이나 WAN(Wide Area Network)은 6바이트의 identifier number인 MAC address를 사용해서 각각의 컴퓨터를 확인합니다.

모든 네트웍 주소와 각각의 소유자등은 미국 NSF(National Science Foundation)에 있는 컴퓨터에 담겨 있습니다. NSF는 수 많은 지역 캐리어(carrier)를 관리하고 있고 각 ISP나 기타 네트웍은 이들 지역 캐리어에 접속하는 방식으로 인터넷에 편입되어 있습니다. TCP/IP 주소는 'IP 주소' 라고도 일컬어집니다. 자세한 내용은 IP 주소란? 문서를 참고하세요.

TCP/IP는 인터넷의 공통된 약속, 표준 프로토콜입니다. TCP/IP 위에 보다 다양한 기능을 하는 http, ftp, gopher 등의 여러 프로토콜들이 '얹혀' 있습니다. 월드와이드웹 상에서 데이타를 어떤 방식으로 보내고 받을 수 있는지를 규정해둔 것이 http(hypertext transfer protocol)이고, 이것은 TCP/IP 위에서 운용됩니다. TCP/IP는 두 대의 컴퓨터가 인터넷 상에서 서로 통신할 수 있는 기반을 제공하는 역할을 하는 것입니다.

지금 계신 곳은: TECH > [테크] TCP/IP 그리고 네트웍 프로토콜