230825 TIL - TCP와 UDP
TCP와 UDP는 네트워크 통신에서 사용되는 두 가지 주요 프로토콜이다.
데이터를 패킷 단위로 나누어 전송한다는 공통점이 있으나
'받은 패킷 순서대로 데이터를 재조립하는가'에서 나오는 신뢰성에 관련한 차이점도 존재한다.
TCP(Transmission Control Protocol)
연결 지향적 프로토콜이다. 이는 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 방식을 의미한다.
클라이언트가 연결을 요청하고(클라이언트 -> 서버 SYN 데이터 전송),
서버가 연결을 수락하면 통신 선로가 고정되고(서버 -> 클라이언트 ACK+SYN) 데이터 반환),
모든 데이터는 고정된 통신 선로(클라이언트 -> 서버 ACK 데이터 전송)를 통해서 순차적으로 전달된다.
이를 3 way handshake 방식이라고 하며, 데이터의 신뢰성과 정확성을 보장하기 위해 설계되었다.
만약 ACK 통신이 제 시간에 도착하지 않았다면(패킷 손실) Timeout이 발생하여 손실이 발생한 패킷을 다시 전송한다.
데이터를 패킷 단위로 나누어 보내며, 받은 상대는 패킷을 순서대로 재조립한다.
에러 확인과 복구, 흐름 제어 등을 통해 신뢰성 있는 통신을 지원한다.
데이터 전송 중 손실이나 오류가 발생하면 재전송을 요청하므로 신뢰성이 높다.
하지만 연결을 형성하는 과정 때문에 UDP에 비해 상대적으로 데이터 전송 속도가 느리다.
HTTP(port 80), HTTPS(port 443), FTP(port 21), SMTP(port 25), POP3(port 110) 등 확실한 통신이 필요한 곳에 쓰인다.
UDP(User Datagram Protocol)
비연결적 지향적인 프로토콜로이다.
이는 데이터를 주고 받을때 연결 절차를 거치지 않고 발신자가 일방적으로 데이터를 발송하는 방식을 의미한다.
연결 과정이 없기 때문에 TCP에 비해 상대적으로 전송 속도가 빠르지만 데이터 전달의 신뢰성을 떨어진다.
데이터를 패킷 단위로 나누어 보내지만 받은 상대는 순서대로 재조립하지 않는다.
데이터 전송 중 손실이나 오류가 발생해도 재전송을 요청하지 않는다.
DNS(port 53), NTP(port 123), SNMP(port 161) 등과 같이 장기간 여러번 반복하는 통신에 사용된다.