개요
TCP와 UDP는 전송계층(L4)에 해당하는 프로토콜로서, L3의 IP Packet의 페이로드 부분에 들어있던 패킷이다. 포트를 기준으로 통신하며 클라이언트는 dynamic port range인 49152~65535를 사용한다. TCP는 UDP와 같은 포트로 listen할 수 있다.
TCP(Transmission Control Protocol)
- Connection Oriented(연결 지향) 서비스로 가상 회선 방식을 사용한다. (논리적 연결지향으로 물리적 연결지향은 애초에 L3의 IP 프로토콜이 Connectionless인 시점에서 파괴되었다..)
- 연결은 3-way handshaking, 연결종료는 4-way handshaking을 사용한다.
- Congestion control(혼잡 제어)와 Flow Control(흐름 제어)를 지원한다.
- 혼잡 제어: 네트워크 내의 패킷 수를 조절하여 네트워크의 오버플로우를 방지하는 기능
- 흐름 제어: 송신 측과 수신 측의 TCP 버퍼 크기 차이로 인해 생기는 데이터 처리 속도 차이를 해결하기 위하여, 송 수신 측 사이의 패킷 수를 제어하는 기능
- 신뢰성을 보장하는 프로토콜이다.
- UDP보다 일반적으로 속도가 느리다
- 서버와 1:1로 통신한다
UDP(User Datagram Protocol)
- Connectionless(연결 안지향) 서비스로 데이터그램 방식을 사용한다.
- 상호간 정보를 보낸다, 정보를 받는다, 정보를 받았다 와 같은 의사소통을 하지 않는다
- 패킷 헤더에서 CheckSum 필드로 최소한의 오류는 검출할 수 있다
- 신뢰성을 보장하지 않는 프로토콜이다
- 전송 순서를 보장하지 않는 프로토콜이다
- TCP보다 일반적으로 속도가 빠르다
- 서버와 1:1, 1:N, N:M 으로 통신한다
언제 무엇을 사용하는가?
어지간한 모든 인터넷을 기반으로 통신하는 서비스나 프로그램은 TCP를 사용한다. TCP를 쓸것인가 UDP를 쓸것인가를 결정하는 주요 분기는 “데이터가 속도만 빠르면 손실되어도 상관없는가?”이기에, 이에 해당하는 항목이 그리 많지 않다. 이에 부합하는 대표적인 예로 동영상 스트리밍(중간에 몇픽셀 혹은 프레임이 손실나더라도 보는데 지장이 있지는 않기에), [CS] DNS란? 에 언급되는 DNS 쿼리 패킷 등이 이에 해당한다.
Reference
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network