TCP vs UDP
TCP (Transmission Control Protocol)
- 연결 지향적: TCP는 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정한다. 이를 “3-way handshake”라고 부르며, 이를 통해 연결이 성립된 후에만 데이터 전송이 이루어진다.
- 신뢰성: TCP는 데이터 전송의 신뢰성을 보장한다. 전송된 데이터가 올바르게 도착했는지 확인하고, 손실된 데이터가 있을 경우 이를 재전송한다. 이러한 기능은 오류 검출, 패킷 재전송, 패킷 순서 제어 등을 포함한다.
- 흐름 제어 및 혼잡 제어: TCP는 네트워크의 상태에 따라 데이터 전송 속도를 조절하는 메커니즘을 제공한다. 이는 네트워크 혼잡을 줄이고, 수신자가 처리할 수 있는 속도에 맞춰 데이터를 보내도록 한다.
- 패킷 순서 보장: TCP는 데이터를 패킷으로 쪼개어 전송한 후, 수신자가 이를 원래의 순서대로 재조립할 수 있도록 한다.
- 사용 사례: 웹 브라우징(HTTP, HTTPS),이메일(SMTP, IMAP, POP3),파일 전송(FTP)
TCP Connection (3-way handshake)
- 먼저 open()을 실행한 클라이언트가 SYN을 보내고 SYN_SENT 상태로 대기한다.
- 서버는 SYN_RCVD 상태로 바꾸고 SYN과 응답 ACK를 보낸다.
- SYN과 응답 ACK을 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK를 보낸다.
- 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.
TCP Disconnection (4-way handshake)
- 먼저 close()를 실행한 클라이언트가 FIN을 보내고 FIN_WAIT1 상태로 대기한다.
- 서버는 CLOSE_WAIT으로 바꾸고 응답 ACK를 전달한다. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 close()를 요청한다.
- ACK를 받은 클라이언트는 상태를 FIN_WAIT2로 변경한다.
- close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 FIN을 클라이언트에 보내 LAST_ACK 상태로 바꾼다.
- FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME_WAIT으로 상태를 바꾼다. TIME_WAIT에서 일정 시간이 지나면 CLOSED된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.
UDP (User Datagram Protocol)
- 비연결 지향적: UDP는 데이터 전송 전에 연결을 설정하지 않으며, 데이터를 보내는 즉시 전송된다. 이를 통해 TCP보다 더 빠른 전송 속도를 제공한다.
- 신뢰성 부족: UDP는 데이터 전송의 신뢰성을 보장하지 않는다. 데이터가 손실되거나 순서가 뒤바뀌더라도 이를 복구하거나 재전송하지 않는다. 따라서 UDP는 오류에 덜 민감한 애플리케이션에 적합하다.
- 낮은 오버헤드: UDP는 TCP보다 헤더 정보가 간단하므로, 오버헤드가 적고 더 빠른 데이터 전송이 가능하다.
- 순서 보장 없음: UDP는 데이터를 보내는 순서와 관계없이 수신자가 데이터를 받는다. 순서를 보장하는 기능이 없으므로, 애플리케이션이 이를 별도로 처리해야 한다.
- 사용 사례: 실시간 스트리밍(비디오, 오디오), 온라인 게임, DNS(Domain Name System) 쿼리, VoIP(Voice over IP)
참고 자료
https://velog.io/@hidaehyunlee/TCP-%EC%99%80-UDP-%EC%9D%98-%EC%B0%A8%EC%9D%B4
This post is licensed under CC BY 4.0 by the author.