멀리 떨어져있는 두 컴퓨터끼리 통신할 때, 인터넷을 통해서 통신합니다.

복잡한 인터넷 망을 통하여 메시지가 서로에게 전달이 되어야 합니다.
인터넷은 수많은 노드들로 복잡하게 이루어져 있는데 목적지까지 어떻게 잘 도착할 수 있을까요?
복잡한 인터넷 망을 통해 통신하는데 사용되는 최소한의 규칙이 바로 IP입니다.

IP의 역할은 아래와 같습니다.
여기서 잠깐.
패킷은 또 무엇일까요?
통신 메시지를 보낼 때, 그냥 보내는 것이 아니라 IP Packet이라는 형식에 맞추어서 보냅니다.
Packet에는 출발지, 목적지 주소 등 정보를 포함하고 있고,
이를 통해 정보를 확인하며 목적지까지 메시지가 잘 전달되는 것입니다.

IP 프로토콜의 한계
위에서 확인한 IP 프로토콜의 한계를 TCP 프로토콜이 해결해줍니다.
UDP도 이에 도움을 줍니다.
우선, 프로토콜 계층 관점에서 메시지가 어떻게 전달되는지 살펴 봅시다.

위 사진에서 볼 수 있듯이, 메시지에 IP 정보, TCP 정보들을 포함하여 전달합니다.
그렇다면 각 정보가 포함되어 생성된 패킷을 한 번 살펴보시죠.

IP 패킷에는 출발지, 목적지 IP에 대한 정보를
TCP 패킷에는 출발지, 목적지 PORT 및 전송 제어, 순서, 검증 정보들이 포함됩니다.
TCP에 포함된 정보를 보니 감이 오시나요?!
바로 IP 프로토콜에서 확인한 문제들을 해결에 주는데 도움을 줍니다.
TCP는 전송 제어 프로토콜로 아래와 같은 특징이 있습니다.
그렇다면 UDP(User Datagram Protocol)는 어떤 특징이 있을까요?
Port는 서버 안에서 돌아가는 애플리케이션을 구분하는 값입니다.
쉽게 얘기하면 IP는 거주하는 아파트 이름, Port는 동,호수라고 생각할 수 있습니다.

IP를 가지고 통신을 할 때, 기억하기 어렵다는 문제점이 있습니다.
또 어느 순간 IP가 바뀔 수도 있습니다.
이런 경우에 어떻게 접근을 해야 할까요?
그래서 DNS(Domain Name Service)가 존재합니다.
이는 전화번호부 같은 역할을 합니다.
DNS에 구글 IP를 달라고 요청하여 전달받고, IP를 확인한 후 통신합니다.
