
클라이언트와 서버 간 연결 설정을 위한 통신 절차
클라이언트 -> 서버: SYN (연결 요청)
서버 -> 클라이언트: SYN-ACK (연결 승인)
클라이언트 -> 서버: ACK (연결 확인)
상호 연결 확인: 클라이언트와 서버가 서로 연결할 준비가 되었는지 확인
데이터 전송을 위한 초기화: 서로의 시퀀스 번호를 초기화하여 데이터 전송 순서 관리
→ ISN과 SYN 으로 클라이언트와 서버의 초기 시퀀스 번호를 확인 후, 해당 번호 이후의 데이터를 수신
양방향 통신 보장 (Full-Duplex Communication): 양방향으로 데이터 통신할 수 있도록 설정
→ (클라이언트 → 서버), (서버 → 클라이언트) 방향으로 독립적인 데이터 전송 가능
[클라이언트] [서버]
-------------------------------------------------------------
| SYN (SEQ=1000) ───────────────────────────→ |
| ←── SYN, ACK (SEQ=2000, ACK=1001) |
| ACK (SEQ=1001, ACK=2001) ─────────────────────→ |
-------------------------------------------------------------
클라이언트와 서버 간의 TCP 연결을 안전하게 종료하기 위해 사용하는 4단계 절차
클라이언트와 서버가 안전하게 데이터 전송을 종료하고, 자원을 해제할 수 있도록 함
양방향 연결 종료: TCP 연결은 양방향이므로 각각 독립적으로 종료 가능
[클라이언트] [서버]
--------------------------------------------------------
| FIN (SEQ=1000) ───────────────────────────→ |
| ← ACK (SEQ=2000, ACK=1001) |
| ← FIN (SEQ=2000) |
| ACK (SEQ=1001, ACK=2001) ─────────────────────→ |
--------------------------------------------------------
[클라이언트] [서버]
---------------------------------------------------------
| ESTABLISHED ──────────────────────────────→ ESTABLISHED |
| FIN-WAIT-1 (FIN) ─────────────────────────→ CLOSE-WAIT |
| FIN-WAIT-2 ◀────────── ACK ──────────────── CLOSE-WAIT |
| FIN-WAIT-2 ◀────────── FIN ──────────────── LAST-ACK |
| TIME-WAIT ──────────── ACK ───────────────→ CLOSED |
| CLOSED CLOSED |
---------------------------------------------------------
지연된 FIN 패킷 재수신에 대비
→ 클라이언트가 마지막 ACK 전송 후, 네트워크 지연으로 인해 서버가 ACK를 받지 못하고 다시 FIN을 재전송될 가능성을 대비
패킷 충돌 방지 = 포트 쌍을 잠시 봉인 …
→ 동일한 포트로 곧바로 새 연결을 시도할 경우, 네트워크 상에 지연되어 남아있는 이전 패킷이 새 연결로 착각되어 전달되며 데이터 혼동을 야기할 수 있음