해당 글은 2023. 10. 16에 작성되었습니다.
TCP와 UDP는 Internet protocol stack의 5 layers에서 transport layer의 예시들이다.
Transport layer : data transfer from process to process ex) TCP, UDP
어떠한 application에서 사용되는지, 어떠한 기능이 가장 우선순위에 있는지에 따라 사용되는 transport protocol이 달라진다.

TCP service :
- Reliable transport : data loss에 대한 tolerance가 없기 때문에 data integrity가 중요한 application에 적합하다.
- Connection-oriented : TCP를 사용하려면 TCP-connection을 사전에 set up 해야한다. 이런 connection을 설정하면서 약간의 delay가 발생하기 때문에, timing이 중요한 application에는 적합하지 않을 수 있다.
UDP service :
- Unreliable data transfer : Data를 주고 받을 때, loss를 tolerate하는 경향이 있다. data integrity가 중요한 application에는 적합하지 않다.
- Lightweight & fast : Reliability를 위한 사전 set up도 필요없기에, 빠르고 가볍다. No delay, Throughput이 중요한 application에 적합하다.

대표적으로 Web에서의 예시를 하나씩 보자면,
- HTTP : TCP (Web 통신에서 data loss가 발생하면 치명적임)
- DNS : UDP (Hostname을 IP 주소로 바꿔줄 때, 빠른 반응속도를 요구하기에 UDP가 적합)
- 추가적으로 HTTP/1, HTTP/2는 TCP를 사용하였지만, 2022년에 표준화된 HTTP/3는 UDP를 계승한 QUIC을 사용하였다. 여러가지 이유가 있는데 HOL blocking problem을 방지하기 위해서이다. multi-objects에 대한 sending/receiving이 많아지는 오늘날, head of line(hol) blocking으로 인한 delay 방지를 위해, multiplexing 기법을 사용하기 위해 QUIC을 사용한다. 앞서 언급했듯이, UDP는 data loss를 용인한다. 전송이 중단되거나 차단되지 않듯이, HTTP/3의 QUIC도 UDP를 계승했듯이 data loss를 완전히 방지하지는 않는 특성이 있다.
끝!