네트워크에서 수많은 컴퓨터들이 서로 데이터를 주고받기 위해서는 규칙(프로토콜, Protocol)이 필요합니다. 그중에서 가장 기본이 되는 것이 바로 IP(Internet Protocol)입니다.
IP는 인터넷 상에서 패킷(Packet)이라는 작은 데이터 조각을 목적지까지 전달하는 역할을 합니다. 하지만 IP만으로는 완벽한 통신이 불가능하기 때문에 다른 프로토콜들과의 조합이 필요합니다.
클라이언트가 서버에 메시지를 보낼 때, 데이터는 패킷으로 나누어집니다.
예를 들어 Hello, world!라는 메시지를 보낸다고 하면, 패킷은 출발지와 목적지 정보를 포함하여 네트워크를 거쳐 서버로 전달됩니다.
데이터를 패킷(Packet)이라는 작은 조각으로 나누고, 각 패킷에 주소 정보(출발지, 목적지 IP)를 붙여 목적지까지 전달하는 것입니다. 이 과정을 라우팅(Routing)이라고 부르며, 중간에 있는 여러 라우터(Router)들이 이정표 역할을 합니다. 패킷은 여러 개의 노드(라우터)를 거쳐 최종 목적지 서버에 도착합니다.
100.100.100.1 (내 컴퓨터)200.200.200.2 (웹사이트 서버)서버는 받은 요청을 처리한 후, 응답 데이터를 다시 패킷으로 만들어 클라이언트에게 보냅니다. 이때는 출발지와 목적지 IP가 반대가 됩니다.
200.200.200.2 (웹사이트 서버)100.100.100.1 (내 컴퓨터)이 과정을 통해 양방향 통신이 이루어집니다.
IP는 데이터를 보내는 역할에만 집중하도록 설계되었기 때문에, 그 자체만으로는 완벽한 통신을 보장하지 못하는 몇 가지 명확한 한계를 가집니다.
IP는 데이터를 보내기 전에 상대방이 받을 준비가 되었는지, 또는 네트워크 상태가 양호한지 확인하지 않습니다. 그냥 목적지 주소만 보고 패킷을 전송할 뿐입니다.
편지를 부칠 때 상대방이 집에 있는지, 이사를 갔는지 확인하지 않고 부치는 것과 같습니다. 서버 컴퓨터가 꺼져 있거나 네트워크에 연결되어 있지 않아도, 클라이언트는 일단 패킷을 보냅니다.
IP는 전송한 패킷이 중간에 사라지거나, 순서가 뒤바뀌어 도착하더라도 책임지지 않습니다.
패킷 소실: 네트워크가 혼잡하거나 라우터에 문제가 생기면 패킷이 그냥 사라져버릴 수 있습니다. IP는 패킷이 잘 도착했는지 확인하지 않으므로, 보낸 쪽에서는 이 사실을 알 수 없습니다.
패킷 순서 보장 불가: 1, 2, 3 순서로 보낸 패킷들이 서로 다른 경로를 통해 전달될 수 있습니다. 이 경우, 서버에는 2, 1, 3처럼 뒤죽박죽 순서로 도착할 수 있습니다. IP는 원래 순서가 어땠는지 신경 쓰지 않습니다.
하나의 컴퓨터(하나의 IP 주소)에서는 웹 서버, 게임, 메신저 등 여러 프로그램이 동시에 실행될 수 있습니다. IP 주소만으로는 패킷이 이 중 어떤 프로그램에게 온 것인지 구분할 수 없습니다.
IP 주소는 집 주소와 같은데, 아파트로 비유했을 때 동호수 정보 없이 건물 주소만으로 편지를 보내면, 이 편지를 어느 집에 전달해야 할지 알 수 없는 것과 같습니다.
IP의 이러한 한계들은 상위 계층의 프로토콜, 특히 TCP(Transmission Control Protocol)와 포트(Port) 번호를 통해 보완됩니다.
데이터 패킷은 사실 [ IP 헤더 [ TCP 헤더 [ 데이터 ] ] ] 와 같은 계층적 구조로 감싸여 있습니다.
IP 주소가 '아파트 건물 주소'라면, 포트 번호는 '동호수'입니다. 웹 서버는 80번 포트, 보안 웹 서버(HTTPS)는 443번 포트를 사용하는 것처럼 각 프로그램은 고유한 포트 번호를 가집니다.
TCP 헤더에 이 포트 번호가 포함되어 있어, 서버는 패킷을 정확한 프로그램에 전달할 수 있습니다. (프로그램 구분 문제 해결)
신뢰성보다 속도가 더 중요한 통신(실시간 영상 스트리밍, 온라인 게임 등)에서는 TCP 대신 UDP(User Datagram Protocol)가 사용되기도 합니다. UDP는 TCP의 신뢰성 기능 대부분을 생략하여 전송 속도를 높인 프로토콜입니다.