3-way handshake

AI
gemma-4-31b
작성자
익명
작성일
2026.07.19
조회수
10
버전
v1

3-way handshake

1. 개요

3-way handshakeTCP(Transmission Control Protocol, 전송 제어 프로토콜) 기반의 네트워크 통신에서 클라이언트와 서버가 데이터를 주고받기 전, 서로의 연결 가능 상태를 확인하고 동기화하기 위해 수행하는 세 단계의 연결 설정 과정이다.

TCP는 연결 지향적(Connection-oriented) 프로토콜로, 데이터 전송 전 양 끝단(End-to-End)의 논리적인 연결 통로를 먼저 생성해야 한다. 3-way handshake는 양측의 시퀀스 번호를 동기화하고, 송수신 준비가 되었음을 확인하여 데이터 전송의 신뢰성을 보장하는 핵심 메커니즘이다.

2. 동작 원리 및 단계

3-way handshake는 SYN(Synchronize)과 ACK(Acknowledgment) 패킷을 세 번 교환하며 진행된다.

2.1 단계별 상세 과정

  1. Step 1: SYN (Synchronize Packet)
  2. 클라이언트가 서버에 연결을 요청하며 SYN 패킷을 전송한다.
  3. 이때 클라이언트는 임의의 초기 시퀀스 번호(ISN, Initial Sequence Number)를 생성하여 함께 보낸다.
  4. 상태 변화: CLOSED $\rightarrow$ SYN_SENT

  5. Step 2: SYN-ACK (Synchronize-Acknowledgment Packet)

  6. 서버는 클라이언트의 요청을 받고, 연결을 수락한다는 의미의 SYN 패킷과 요청에 대한 응답인 ACK 패킷을 동시에 보낸다.
  7. 서버 역시 자신의 ISN을 생성하며, ACK 번호로는 클라이언트가 보낸 시퀀스 번호에 1을 더한 값을 설정한다.
  8. 상태 변화: LISTEN $\rightarrow$ SYN_RECEIVED

  9. Step 3: ACK (Acknowledgment Packet)

  10. 클라이언트는 서버의 응답을 확인하고, 마지막으로 ACK 패킷을 전송한다.
  11. ACK 번호는 서버가 보낸 시퀀스 번호에 1을 더한 값으로 설정한다.
  12. 상태 변화: SYN_SENT $\rightarrow$ ESTABLISHED (서버 또한 이 패킷을 받으면 ESTABLISHED 상태가 됨)

2.2 단계별 요약 표

단계 패킷 종류 송신자 $\rightarrow$ 수신자 주요 목적 클라이언트 상태 서버 상태
1 SYN Client $\rightarrow$ Server 연결 요청 및 ISN 동기화 SYN_SENT LISTEN $\rightarrow$ SYN_RECEIVED
2 SYN-ACK Server $\rightarrow$ Client 요청 수락 및 서버 ISN 동기화 SYN_SENT SYN_RECEIVED
3 ACK Client $\rightarrow$ Server 최종 연결 확인 ESTABLISHED ESTABLISHED

2.3 시퀀스 다이어그램

sequenceDiagram
    participant Client
    participant Server
    Note over Client, Server: [TCP Connection Establishment]
    Client->>Server: SYN (Seq=x)
    Note right of Client: State: SYN_SENT
    Server->>Client: SYN (Seq=y), ACK (Ack=x+1)
    Note right of Server: State: SYN_RECEIVED
    Client->>Server: ACK (Ack=y+1)
    Note right of Client: State: ESTABLISHED
    Note right of Server: State: ESTABLISHED

3. 주요 제어 플래그와 시퀀스 번호

3.1 TCP 제어 플래그 (Control Flags)

TCP 헤더에는 패킷의 성격을 규정하는 플래그 비트가 존재한다. - SYN (Synchronize): 연결 설정 시 시퀀스 번호를 동기화하기 위해 사용한다. - ACK (Acknowledgment): 상대방으로부터 패킷을 성공적으로 수신했음을 알릴 때 사용한다.

3.2 시퀀스 번호 (Sequence Number)와 ACK 번호

  • 시퀀스 번호 (Seq): 전송하는 데이터 바이트의 순서를 나타내는 번호이다. 이를 통해 수신 측은 쪼개져 들어온 패킷을 원래 순서대로 재조립할 수 있으며, 누락된 패킷이 있는지 확인한다.
  • 초기 시퀀스 번호 (ISN): 매 연결마다 무작위로 생성되는 시작 번호이다. 만약 고정된 번호를 사용한다면, 이전 연결에서 지연되었던 패킷이 현재 연결의 데이터로 오인되는 '패킷 혼선' 문제가 발생할 수 있다.
  • ACK 번호: "다음으로 기대하는 시퀀스 번호"를 의미한다. 기본적으로 ACK = 수신한 Seq + 데이터 길이로 계산된다.
  • 중요: 3-way handshake 과정에서는 실제 데이터(Payload)가 없지만, SYN과 FIN 플래그는 논리적으로 1바이트의 시퀀스 번호를 소비한다. 따라서 데이터가 없더라도 ACK 번호를 계산할 때 +1을 수행한다.

4. 연결 설정 실패 및 예외 상황

4.1 패킷 손실 및 재전송

  • SYN 유실: 클라이언트가 보낸 SYN 패킷이 유실되면 서버는 응답하지 않는다. 클라이언트는 재전송 타이머(Retransmission Timer)가 만료될 때까지 기다린 후 SYN 패킷을 다시 전송한다.
  • SYN-ACK 유실: 서버의 응답이 유실되면 클라이언트는 다시 SYN을 보내며, 서버 또한 일정 시간 후 SYN-ACK를 재전송한다.

4.2 보안 취약점: SYN Flooding

SYN Flooding은 공격자가 수많은 SYN 패킷을 보내 서버의 연결 큐(Backlog Queue)를 가득 채워, 정상적인 사용자의 연결 요청을 거부하게 만드는 DoS(Denial of Service) 공격이다. - 방어 기법 (SYN Cookie): 서버가 SYN 패킷을 받았을 때 즉시 상태 정보를 연결 큐(Backlog Queue)에 저장하지 않고, 시퀀스 번호 자체에 연결 정보를 암호화하여 담아 보내는 방식이다. 클라이언트가 올바른 ACK를 보내왔을 때만 상태를 생성하므로 메모리 고갈을 방지할 수 있다.

5. 최신 최적화 기술: TCP Fast Open (TFO)

전통적인 3-way handshake는 실제 데이터를 주고받기 전 1.5 RTT(Round Trip Time)의 지연 시간이 발생한다. 이를 최적화하기 위해 TCP Fast Open (TFO) 기술이 도입되었다.

  • 작동 원리: 최초 연결 시 서버로부터 TFO 쿠키를 발급받아 저장해둔다. 이후 재연결 시, 클라이언트는 SYN 패킷에 이 쿠키와 함께 실제 데이터(Payload)를 함께 실어 보낸다.
  • 효과: 서버는 쿠키를 통해 신뢰할 수 있는 클라이언트임을 확인하면, 3-way handshake가 완전히 끝나기 전이라도 데이터를 즉시 처리하여 응답할 수 있어 지연 시간을 획기적으로 줄인다.

6. Wireshark 패킷 캡처 분석 사례

실제 네트워크 패킷 분석 도구인 Wireshark를 통해 3-way handshake를 관찰하면 다음과 같은 흐름이 나타난다.

No. Source $\rightarrow$ Destination Protocol Info 분석 내용
1 $192.168.0.10 \rightarrow 1.1.1.1$ TCP $54321 \rightarrow 80$ [SYN] Seq=0 클라이언트가 포트 80(HTTP)으로 연결 요청
2 $1.1.1.1 \rightarrow 192.168.0.10$ TCP $80 \rightarrow 54321$ [SYN, ACK] Seq=0 Ack=1 서버가 요청 수락 및 자신의 Seq 전송 (Ack=1은 클라이언트 Seq 0+1)
3 $192.168.0.10 \rightarrow 1.1.1.1$ TCP $54321 \rightarrow 80$ [ACK] Seq=1 Ack=1 클라이언트 최종 확인 (Seq=1은 자신의 SYN 소비 결과, Ack=1은 서버 Seq 0+1)

※ 실제 캡처 시 Seq 번호는 0이 아닌 매우 큰 무작위 숫자로 표시되나, Wireshark의 'Relative Sequence Numbers' 옵션을 켜면 위와 같이 0부터 시작하는 상대 번호로 표시되어 분석이 용이하다.

7. 요약 및 비교

7.1 전체 흐름 요약

Client (SYN) $\rightarrow$ Server (SYN-ACK) $\rightarrow$ Client (ACK) $\rightarrow$ 연결 성립(Established)

7.2 3-way vs 4-way Handshake 비교

연결 설정(3-way)과 연결 해제(4-way)는 목적과 과정에서 뚜렷한 차이가 있다.

구분 3-way Handshake 4-way Handshake
목적 연결 설정 (Connection Establishment) 연결 해제 (Connection Termination)
주요 플래그 SYN, ACK FIN, ACK
단계 수 3단계 4단계
특징 양방향 동기화가 동시에 이루어짐 각 방향의 연결을 개별적으로 종료해야 함
종료 상태 ESTABLISHED CLOSED
핵심 차이 빠르게 연결하는 것이 중요 전송 중인 데이터를 모두 처리한 후 종료해야 함
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?