TCP와 UDP 정리

2024년 2월 10일

TCP / UDP에 대해서 정리하기 전에 IP에 대해서 먼저 알아보아야한다.

IP (internet protocol)은 인터넷 통신규약이다.

만약 A 컴퓨터에서 B 컴퓨터로 데이터를 전송하고 싶어한다고 가정해보자.

각 컴퓨터에는 IP 주소가 지정되어있고, 전송하고싶은 데이터를 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.

패킷 안에는 출발지 IP, 목적지 IP, 전송 데이터 등 전달하고 싶은 데이터에 관한 정보들이 담겨져있는데, 이 패킷을 전달하면 네트워크 망의 여러 노드들을 통과하여 목적지로 전달 되는 것이다.

서버에서도 동일한 방식으로 요청한쪽에게 응답을 해준다.

하지만 이런 IP 프로토콜은 한계가 존재한다.

1. 비연결성

패킷(데이터)를 받을 대상이 없거나, 해당 서버에서 서비스가 불능 상태여도 패킷을 전송한다.

2. 비신뢰성

위에서 데이터를 전달할때 네트워크망의 노드들을 타고 전송이 된다고 했을때, 해당 노드들을 통해 전송되다가 패킷이 소실된다면 ?

그리고 Hello, World 이렇게 1번 2번의 데이터를 나누어서 전달을 했는데, World, Hello 식으로 순서가 바뀌어서 패킷이 전송 될수도 있다. (보통 전송해야할 데이터의 용량이 크다면 나누어서 전송한다.)

3. 프로그램 구분

보통 우리가 인터넷을 할때, 한가지의 일을 하기보다 인터넷 검색 + 노래 듣기 + 메신저 등 다양한 어플리케이션을 한 IP를 사용하면서 통신을 하게 되는데, 이런 경우에 프로그램을 구분하는데에 한계가 존재한다.


이런 한계점을 극복하기 위해서 TCP(Transmission Control Protocol)이 탄생하게 되었다.

이 TCP는 전송 제어 프로토콜이라고 하며, 인터넷을 이루는 핵심 프로토콜이다.

보통 TCP/IP는 4계층으로 이루어져 있는데, IP 프로토콜보다 한계층 더 높은 계층에 존재하기 때문에 위에서 말한 IP 프로토콜의 한계점을 보완해준다.

TCP 프로토콜은 패킷을 목적지까지 어떻게 안정적으로 보낼것인가에대해 정의한 프로토콜이다.

위에 말한 패킷에 출발지 포트번호목적지 포트번호, 전송 제어, 순서, 검증 정보등 다양한 정보들이 들어가게 된다.

- TCP 특징

1. 연결 지향 - TCP 3 way handshake (가상 연결)

위의 ip 프로토콜의 단점중에서, 상대방이 서비스 불능 상태여도 일단 데이터를 전송하는 것이 단점이라고 했었는데, TCP에서는 상대방이 먼저 패킷을 받을수 있는 상태인지 확인한 후에 데이터를 전송한다.

이는 SYN => SYN + ACK => ACK 이라는 총 3가지의 단계를 거치게 되는데,

SYN은 synchronize(동기화), ACK은 acknowledge (인식)` 의 약자이다.

즉 클라이언트와 서버가 동기화와 인식의 과정을 총 3번 거치면서 서로가 데이터를 주고 받을수 있는 상태를 만든다. 이를 3 way handshake 라고 한다.

그리고 이는 물리적인 연결이 아니라 가상의 연결이다.

2. 데이터 전달 보증

데이터가 전송이 잘 됐다면 서버쪽에서 데이터가 잘 전송되었다는 신호를 보내줌으로써 확실히 할 수 있다.

만약 데이터를 전송하다가 데이터 패킷이 소실된 경우나 문제가 발생한다면, 전송자는 이를 통해 알아 차릴수 있다.

3. 순서 보장

위에서 말한 대용량 데이터가 분할되어서 전송 될때, 순서를 보장해줌으로써 전송하고 싶은 데이터를 그대로 전송할수 있도록 해준다.

만약 1, 2, 3의 순서대로 데이터가 전송되어야하는데 서버쪽에서 1, 3, 2의 순서로 전송 받았다면 이를 알아차릴 수 있다.

위의 이러한 기능들은 TCP에 정보들을 담아두기 때문에 가능한 것이다.


- UDP(User Data Protocol)

UDP는 사용자 데이터그램 프로토콜이라고 한다.

UDP는 TCP와 같은 계층에 존재하는 프로토콜이지만, 기능적으로는 TCP의 기능이 존재하지 않는다.

하지만 UDP는 비연결형 서비스이기때문에, 정보를 주고 받을때 정보를 보내거나 받는다는 신호 절차를 거치지 않는다.

UDP 헤더의 CheckSum 필드를 통해서 최소한의 오류만 검출하며, 최소한의 기능만 하기때문에 TCP보다 속도가 빠르다.

그렇기때문에 신뢰성보다는 연속성이 중요한 서비스, 실시간 서비스에 자주 사용된다.