문제
TCP의 Three-way Handshaking 절차와 각 상태에 대해 설명하시오.
답변
개념
TCP(Transmission Control Protocol)의 Three-way Handshaking은 신뢰성 있는 연결을 수립하기 위해 클라이언트와 서버가 세 번의 메시지를 주고받는 절차입니다. 이 과정에서 TCP 연결의 상태가 단계적으로 변경되며, 각 상태는 연결 요청부터 수립까지의 진행 상황을 나타냅니다.
Three-way Handshaking 절차와 상태 변화
(1) 첫 번째 단계: 클라이언트 → 서버 (SYN)
• 동작:
클라이언트는 서버에 연결 요청을 보냅니다.
SYN(Synchronize) 플래그가 설정된 패킷을 보내며, 초기 Sequence Number(Seq=x)를 전달합니다.
• 상태 변화:
• 클라이언트: CLOSED → SYN-SENT
(연결 요청을 보낸 상태로, 서버의 응답을 기다림.)
• 서버: LISTEN (대기 상태)
• 목적: 서버에 “연결을 시작하겠다”는 의사를 전달합니다.
클라이언트 → 서버 : SYN, Seq=x
(2) 두 번째 단계: 서버 → 클라이언트 (SYN-ACK)
• 동작:
서버는 클라이언트의 요청을 수락하고, 동시에 자신의 연결 요청을 보냅니다.
SYN과 ACK(Acknowledge) 플래그가 설정된 패킷을 전송하며,
• Seq=y: 서버의 초기 시퀀스 번호.
• Ack=x+1: 클라이언트의 시퀀스 번호를 확인.
• 상태 변화:
• 클라이언트: 상태 변동 없음 (여전히 SYN-SENT 상태).
• 서버: LISTEN → SYN-RECEIVED
(클라이언트의 요청을 받아들이고 응답을 보낸 상태.)
• 목적: 서버는 클라이언트의 연결 요청을 수락하며 자신도 연결을 요청합니다.
서버 → 클라이언트 : SYN, ACK, Seq=y, Ack=x+1
(3) 세 번째 단계: 클라이언트 → 서버 (ACK)
• 동작:
클라이언트는 서버의 SYN-ACK 패킷을 확인하고, ACK 플래그가 설정된 패킷을 보냅니다.
• Seq=x+1: 클라이언트의 시퀀스 번호 증가.
• Ack=y+1: 서버의 시퀀스 번호를 확인.
• 상태 변화:
• 클라이언트: SYN-SENT → ESTABLISHED
(서버의 응답을 확인하고 연결이 수립된 상태.)
• 서버: SYN-RECEIVED → ESTABLISHED
(클라이언트의 응답을 받고 연결이 수립된 상태.)
• 목적: 클라이언트와 서버는 서로 연결이 성공적으로 수립되었음을 확인합니다.
클라이언트 → 서버 : ACK, Seq=x+1, Ack=y+1
TCP 상태 변화 요약
시퀀스 다이어그램
클라이언트 서버
CLOSED LISTEN
| SYN, Seq=x -------------> |
| SYN-RECEIVED
SYN-SENT |
| <------------ SYN, ACK, Seq=y, Ack=x+1
|
ESTABLISHED |
| ACK, Seq=x+1, Ack=y+1 -----> |
ESTABLISHED
특징 및 장점
• TCP 상태를 이용해 연결 수립의 각 단계를 관리하여 안정성 보장.
• 데이터 전송 전 양측의 준비 상태를 확인.
주의점 및 단점
• SYN Flooding 공격: 다수의 SYN 패킷을 전송해 서버가 SYN-RECEIVED 상태에서 멈추게 만드는 공격 가능.
• 연결 수립에 시간이 소요됨(초기 지연).
이상으로 Three-way Handshaking 절차와 각 상태 변화를 설명하였습니다.