[Interview] TCP와 UDP의 차이를 설명해주세요
TCP (Transmission Control Protocol)
● 전송 제어 규칙, TCP는 연결 지향적 통신 방식입니다. 3-way handshake로 연결을 설정합니다.
- 데이터를 순차적으로 전송하고, 오류가 발생하면 재전송을 함으로써 신뢰성을 보장합니다.
- 네트워크 상황에 따라서 데이터 전송 속도를 조절합니다. = 흐름 제어, 혼잡 제어
○ 3-way Handshake (연결을 할 때)
1) SYN (Synchronize), 클라이언트에서 서버로 연결 요청을 보냅니다.
2) SYN-ACK (Synchronize-Acknowledge), 서버에서 클라이언트로 요청 수락과 동시에
연결을 요청합니다.
3) ACK (Acknowledge), 클라이언트에서 서버로 최종 확인을 보내 연결을 완료합니다.
○ 4-way Handshake (연결을 종료할 때)
1) FIN (Finish), 연결 종료를 요청하는 측 (A)에서 상대측 (B) 에게 FIN 패킷을 보냅니다.
2) ACK, B가 A에게 종료 요청을 확인했다는 응답을 보냅니다.
3) FIN, B가 종료할 준비가 완료되면 A에게 FIN 패킷을 보냅니다.
4) ACK, A가 B에게 FIN 보낸 것을 확인하면 모든 연결은 종료됩니다.
→ 왜 필요한가?
A : 전송, 수신 받는 쪽에서 통신 가능한 상태인지를 확인하고, 데이터 순서를 관리하기 위해
데이터의 순서(시퀸스 번호)를 교환하여 순차적인 통신이 성립하기 위해서입니다.
● 우리가 사용하는 웹 브라우저에서 웹 페이지를 로딩(HTTP)에서 사용됩니다.
UDP (User Datagram Protocol)
● 사용자, 패킷 교환 네트워크와 관련된 기본 전송, 규칙, UDP는
TCP와는 다른 성격을 가지고 있습니다.
- 사전 연결 설정 없이 데이터를 전송하는 비연결 지향적(Connectionless)입니다.
- 간단하게 말하면 빠른 전송이 가능합니다. TCP에 있는 신뢰성과 순차 보장이 없기 때문입니다.
- Header가 간단하고 필요 없는 처리나 정보(Overhead)가 적습니다.
● Youtube, Zoom처럼 실시간 스트리밍, 온라인 게임 등 사용자와 사용자 간 빠른 연결이 필요한 곳에
주로 사용됩니다.
정리
TCP는 신뢰성이 중요한 애플리케이션에서 사용됩니다. 연결을 설정하고 해제하는 과정이 존재하기 때문에 주고받는 데이터의 무결성을 보장합니다. 3-way Handshake은 전송할 때, 4-way Handshake은 연결을 종료할 때, 연결의 안정성을 보장합니다.
UDP는 실시간성이 요구되는 서비스에 적합합니다. 다만, 빠르게 전송되는 것만을 고려하기 때문에 데이터가 상대방에게 온전히 도착한다는 보장은 되지 않습니다.
두 가지 모두 장단점이 있기 때문에 TCP, UDP 딱 한 가지만을 사용하기보다는 한 프로그램에서도 상황에 따라서 TCP, UDP의 특성을 잘 파악하고 적절한 곳에 사용할 수 있어야 합니다.