이번에는 기업 면접 등에서 자주 나오는 주제인 TCP와 UDP에 대해 알아보자
TCP
Transmission Control Protocol, 전송을 제어하는 프로토콜로 일반적으로 IP와 함께 사용된다
- 연결형 서비스로 가상 회선 방식을 제공한다
- 가상 회선 방식 : 처음 패킷으로 최적의 경로를 고정하고, 경로가 고정되면 그 이후 패킷들은 그 경로로 고속으로 전송하는 기술
- 흐름 제어와 혼잡 제어 기능을 가진다
- 따라서, UDP에 비해 속도가 느리다
- 전송한 데이터의 순서를 보장한다
- 따라서, UDP에 비해 높은 신뢰성을 가진다
TCP는 신뢰성 있는 연결형 서비스이므로 신뢰성이 필요한 메일 / 파일 전송, HTTP 등에서 이용된다
UDP
User Datagram Protocol, 데이터를 데이터그램 단위로 처리하는 프로토콜로 비연결형 프로토콜이다
- 패킷들을 독립적인 경로로 처리하기 때문에 TCP에 비해 빠른 속도
- 독립적인 경로로 전송되기 때문에 재정렬 기능이 필요함
- 패킷의 수신 여부를 확인하지 않는다 (패킷 손실 발생가능성 O)
- Checksum 필드를 통해 최소한의 오류만 검출
- 따라서, 신뢰성있는 데이터의 전송을 보장하지 못한다
UDP는 비연결형 서비스 이므로 속도가 중요시되는 실시간 스트리밍 서비스(방송, 음악, 동영상 등)에 이용된다
TCP 연결과 해제 (handshake)
앞서 TCP에서는 신뢰성있는 연결형 서비스라고 언급했다.
이러한 TCP의 연결과 해제는 각각 3-way handshake, 4-way handshake 라고 부른다.
1) 3-way handshake
데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
1. 클라이언트는 서버에 접속을 요청하는 SYN패킷을 보낸다
2. 서버는 SYN패킷을 받고, 클라이언트에 요청을 수락한다는 ACK패킷과 SYN패킷을 다시 전송하고, 클라이언트가 ACK패킷을 보내 응답받기까지 대기
3. 클라이언트는 서버로 ACK 패킷을 전송하면 연결이 성립된다 (ESTABLISHED)
2) 4-way handshake
3-way handshake와 반대로 상대방 컴퓨터와 연결을 종료하는 과정
1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다
2. 서버는 FIN플래그를 받고, 확인의 의미로 클라이언트에 ACK패킷을 전송한 후 자신의 통신이 끝날때까지 대기 (TIME_WAIT)
3. 통신이 끝났으면, 연결 종료의 의미로 FIN플래그를 전송한다
4. 클라이언트는 FIN플래그를 받고, 확인의 의미로 서버에 ACK패킷 전송하고 패킷을 받은 서버는 CLOSED