본문 바로가기

Study

TCP/UDP

TCP, UDP 는 전송 계층 프로토콜의 종류이다. 

TCP 는 Transmission Control Protocol 의 약어, UDP 는 User Datagram Protocol 의 약어로, 해석하면 TCP 는 전송 제어 프로토콜, UDP 는 사용자 데이터그램 프로토콜 이라는 뜻이다.

TCP

먼저 TCP 를 알아보자. TCP는 연결형 서비스를 지향하는 프로토콜로, 패킷 교환 방식을 사용하며 일반적으로 IP 와 함께 사용된다. IP(Internet Protocol) 은 OSI 표준 모델에서 네트워크 계층의 프로토콜로, 우리가 아는 IP 주소를 목적지로 하여 어떤 경로로 패킷을 라우팅할지 정하는 프로토콜이다. 즉 TCP 와 같이 사용하는 IP 는 네트워크 계층의 프로토콜로, 패킷을 목적지로 보내는 것 에 관련된 프로토콜이라면, TCP 는 패킷을 목적지까지 어떻게 안전하게 보낼것인가 (패킷 유실, 패킷 순서 보장 등) 에 관련된 프로토콜이라고 볼 수 있다. 

※ 연결형, 비연결형 이란?  →  송신측과 수신측이 존재하여 이제부터 통신을 주고받을것이라는 연결을 수립하는 서비스가 연결형 서비스이다. 비연결형 서비스는 송신측이 있고 수신측도 있지만 송신측에서는 수신 대상이 없어도 데이터를 전송할 수 있고, 수신측이 데이터를 받을 수 있는 상태인지도 확인할 수가 없다.

※ IP(Internet Protocol) 는 비연결형 프로토콜이지만 TCP는 연결형 프로토콜로서 IP 와 함께 사용되어 IP의 신뢰성을 보장하고 에러에 대응할 수 있게 해준다. UDP 는 비연결형 프로토콜로써 IP 가 제공하는 정도만큼의 안정성을 제공하는 상위 프로토콜로, 최소한의 검증만을 수행하며 에러에 대응하기 위해서는 어플리케이션 레벨에서 처리해야 하는 대신 신속한 전송이 장점이다.

 

어떻게 신뢰성을 보장하는가?

HandShake

TCP 는 데이터를 전송하기에 앞서 3Way Handshake 를 통해 연결을 설정하고 송신측과 수신측이 통신할 준비가 돼 있음을 확인한다. 전송이 종료된 후에는 4Way Handshake 를 통해 연결을 해제하고 '내가 너에게 전송하였다' 는 것을 확인(인증)한다. 

HandShake 및 데이터 전송 과정

 

3Way Handshake
클라이언트는 서버에게 SYN 플래그를 보냄으로써 접속을 요청한다. 서버는 이를 수락하는 의미에서 ACK 플래그를 전송하고, 동시에 클라이언트에게 SYN 플래그를 보냄으로써 연결을 수립할 준비가 됐음을 알린다. 클라이언트에서는 이를 확인하는 플래그를 전송함으로써 연결이 수립된다.(Established)
→ TCP 는 양방향에서 연결을 수립하는 전이중방식(Full Duplex) 임을 알 수 있다.

Transmission
데이터 통신 과정에서 클라이언트가 보낸 각 데이터에 대해 서버는 이를 수신했음을 알리는 ACK 플래그를 보냄으로써 정상적인 전송을 확인한다. 클라이언트가 서버로부터 이를 받지 못한 경우 전송이 실패했다고 판단하여 재전송한다.

4Way Handshake
통신이 종료되면, 클라이언트는 서버와의 접속을 끊기 위해 FIN 플래그를 전송한다. 서버는 이를 확인하는 ACK 플래그를 보내고, 다시 FIN 플래그를 클라이언트에게 보냄으로써 서버의 클라이언트로의 접속이 종료됨을 알린다. 마지막으로 클라이언트는 ACK 플래그를 보냄으로써 연결이 해제된다.

 

TCP 의 전송 제어

TCP 는 원활한 통신을 위해 프로토콜 자체에서 전송 흐름을 제어하는 기능을 가지고 있다. 각 전송 제어 기능은 다음과 같다.

흐름 제어
송신측의 전송 속도와 수신측의 처리 속도가 다를 수 있기 때문에, 이를 송신 측에서 파악하고 얼마나 빠르게 데이터를 전송할지를 제어한다. 이는 Stop-and-wait 기법과 Sliding Window 기법을 사용한다.

Sliding Window 방식 흐름도

오류 제어
통신 중 유실되거나 잘못 전송된 데이터에 대해 대응하는 기능으로, Go Back N 기법과 Selected Repeat 기법을 사용한다.

그림에서 알 수 있듯 Go Back N 기법은 잘못 전송된 N번째 패킷에 대하여 그 이후의 모든 패킷을 재전송 받는 방법이고, Selected Repeat 기법은 잘못 전송된 N번째 패킷만 전송받아 수신측에서 버퍼를 제어하여 순서를 재정렬하는 방법이다.

혼잡 제어
네크워크가 불안정하여 발생한 문제에 대해 데이터 크기를 조절하여 전송량을 제어하는 기법이다.
Tahoe, Reno, New Reno, Cubic 등 다양한 혼잡 제어 기법이 존재한다.

 

UDP

UDP는 비연결형 서비스를 지향하는 프로토콜로, 데이터그램 방식을 사용한다. UDP 는 전송에 앞서 데이터를 보내거나 받는다는 신호를 하지 않으며, 패킷 헤더의 CheckSum 필드를 통해 최소한의 오류만 확인한다. 이런 특징으로 인해 TCP 보단 신뢰성이 떨어지지만 전송 속도가 빨라서 신뢰성보다 실시간성이 중요한 서비스(스트리밍 서비스 등)에서 채택되곤 한다. TCP 와의 차이를 간단하게 그림으로 나타내면 다음과 같다.

TCP 와 UDP 의 전송 차이

 

TCP 가 연결을 수립하며 통신 과정에서도 보내고 받는 것을 확인하는 반면, UDP 는 보내기에 급급하다고 볼 수 있다. 패킷 순서와 플래그, 윈도우 사이즈까지 담긴 TCP 헤더와 다르게 UDP 헤더에는 송수신측의 포트 번호, Checksum 필드의 정보만 담겨져 있다.

TCP 헤더
UDP 헤더(UDP 헤더 + 데이터를 데이터그램이라 한다)