네트워크
TCP 3-way Handshake
클라이언트와 서버가 SYN / SYN-ACK / ACK 세 번의 패킷 교환으로 연결을 수립하는 과정.
- 초기 상태
- 1. SYN
- 2. SYN-ACK
- 3. ACK
- 연결 수립
클라이언트CLOSED
(대기 중)
서버LISTEN
서버는 LISTEN 상태로 연결 요청을 기다리고, 클라이언트는 아직 어떤 연결도 시도하지 않은 CLOSED 상태입니다.
핵심 개념
3-way handshake
양쪽이 서로의 초기 시퀀스 번호를 확인하고 연결을 수립하는 세 번의 패킷 교환 과정.
시퀀스 번호 (seq)
전송 데이터의 순서를 보장하기 위한 번호. 연결 시작 시 양쪽이 임의 값으로 시작.
ACK 번호
다음에 받을 것으로 예상하는 시퀀스 번호. 누적 확인 응답에 사용.
TCP 상태
CLOSED → SYN_SENT → ESTABLISHED (클라이언트), LISTEN → SYN_RCVD → ESTABLISHED (서버).
면접 단골 질문
- Q1.왜 2-way가 아니라 3-way handshake가 필요한가요?
- Q2.SYN flood 공격은 어떻게 동작하고, 어떻게 방어할 수 있나요?
- Q3.TCP 연결 종료는 왜 4-way handshake인가요?
- Q4.TIME_WAIT 상태는 왜 존재하나요? 너무 많아지면 어떤 문제가 생기나요?
- Q5.초기 시퀀스 번호(ISN)를 랜덤하게 시작하는 이유는?