IT Professional Engineering/NW

3Way-Handshaking: TCP 연결 수립의 핵심 메커니즘

GilliLab IT 2025. 6. 30. 18:28
728x90
반응형

3Way-Handshaking: TCP 연결 수립의 핵심 메커니즘

개요

네트워크 통신에서 신뢰성 있는 데이터 전송은 현대 인터넷의 근간을 이루는 중요한 요소입니다. TCP(Transmission Control Protocol)는 이러한 신뢰성을 보장하는 대표적인 프로토콜로, 데이터 전송 전에 먼저 '연결'을 수립하는 과정을 거칩니다. 이 연결 수립 과정의 핵심이 바로 3-Way Handshaking입니다.

TCP 연결의 필요성

  • TCP는 연결 지향적(Connection-Oriented) 프로토콜
  • 데이터 전송 전 양측 간 논리적 연결 수립 필요
  • 신뢰성 있는 데이터 전송을 위한 사전 조건
  • 순서 보장, 흐름 제어, 오류 복구 등의 메커니즘 사용 가능

3-Way Handshaking 개념

3-Way Handshaking은 TCP 통신에서 클라이언트와 서버 간 연결을 수립하기 위한 세 단계의 과정입니다. 이 과정을 통해 양쪽 모두 데이터를 주고받을 준비가 되었음을 확인하고, 초기 시퀀스 번호(ISN: Initial Sequence Number)를 교환합니다.

3-Way Handshaking 절차

  1. 1단계 (SYN): 클라이언트가 서버에 연결 요청

    • 클라이언트 → 서버: SYN 패킷 전송
    • 시퀀스 번호(seq) 초기화 (예: seq=100)
    • SYN 플래그 = 1
  2. 2단계 (SYN+ACK): 서버가 클라이언트의 요청을 수락하고 응답

    • 서버 → 클라이언트: SYN+ACK 패킷 전송
    • 서버의 시퀀스 번호 초기화 (예: seq=2000)
    • 확인 응답 번호 = 클라이언트의 시퀀스 번호 + 1 (ack=101)
    • SYN 플래그 = 1, ACK 플래그 = 1
  3. 3단계 (ACK): 클라이언트가 서버의 응답을 확인

    • 클라이언트 → 서버: ACK 패킷 전송
    • 시퀀스 번호 = 받은 확인 응답 번호 (seq=101)
    • 확인 응답 번호 = 서버의 시퀀스 번호 + 1 (ack=2001)
    • ACK 플래그 = 1

이 과정이 완료되면 양방향 통신 채널이 수립되어 데이터 전송이 가능해집니다.

다이어그램으로 보는 3-Way Handshaking

sequenceDiagram
    participant Client
    participant Server
    Note over Client,Server: TCP 연결 수립 과정
    Client->>Server: 1. SYN (seq=100, ack=-)
    Note right of Client: SYN 플래그 설정
    Server->>Client: 2. SYN+ACK (seq=2000, ack=101)
    Note left of Server: SYN, ACK 플래그 설정
    Client->>Server: 3. ACK (seq=101, ack=2001)
    Note right of Client: ACK 플래그 설정
    Note over Client,Server: 연결 수립 완료, 데이터 전송 시작

시퀀스 번호와 확인 응답 번호의 의미

  • 시퀀스 번호(Sequence Number):

    • 각 호스트가 생성하는 초기 시퀀스 번호(ISN)
    • 랜덤하게 생성되어 보안 강화
    • 데이터 바이트 스트림의 위치를 식별하는 역할
  • 확인 응답 번호(Acknowledgment Number):

    • 상대방으로부터 다음에 수신하기를 기대하는 시퀀스 번호
    • 수신 측이 어디까지 데이터를 받았는지 알려주는 역할
    • 일반적으로 상대방의 시퀀스 번호 + 1

실제 네트워크 패킷 분석 예시

Wireshark와 같은 패킷 분석 도구로 3-Way Handshaking을 관찰할 경우:

Frame 1: Client -> Server (SYN)
  Source Port: 54321
  Destination Port: 80 (HTTP)
  Sequence Number: 100
  Flags: SYN

Frame 2: Server -> Client (SYN, ACK)
  Source Port: 80
  Destination Port: 54321
  Sequence Number: 2000
  Acknowledgment Number: 101
  Flags: SYN, ACK

Frame 3: Client -> Server (ACK)
  Source Port: 54321
  Destination Port: 80
  Sequence Number: 101
  Acknowledgment Number: 2001
  Flags: ACK

3-Way Handshaking의 중요성

  1. 신뢰성 확보:

    • 양방향 통신 가능성 확인
    • 패킷 손실, 중복, 순서 오류 방지 메커니즘 수립
  2. 초기 파라미터 교환:

    • 초기 시퀀스 번호(ISN) 교환
    • 윈도우 크기 등 TCP 옵션 협상
  3. 상태 관리:

    • 서버와 클라이언트의 상태 동기화
    • 연결 관리에 필요한 상태 정보 생성

TCP 상태 전이 과정

3-Way Handshaking 과정에서 각 호스트의 상태 변화:

stateDiagram-v2
    [*] --> CLOSED
    CLOSED --> SYN_SENT: 클라이언트가 SYN 전송
    SYN_SENT --> ESTABLISHED: SYN+ACK 수신, ACK 전송
    CLOSED --> LISTEN: 서버가 연결 대기
    LISTEN --> SYN_RECEIVED: SYN 수신, SYN+ACK 전송
    SYN_RECEIVED --> ESTABLISHED: ACK 수신
    ESTABLISHED --> [*]: 데이터 전송 단계

실제 사례: 웹 브라우저의 HTTP 요청

웹 브라우저가 웹 서버에 HTTP 요청을 보내는 경우:

  1. 브라우저(클라이언트)가 www.example.com의 80번 포트로 연결 시도
  2. 3-Way Handshaking으로 TCP 연결 수립
  3. HTTP GET 요청을 전송
  4. 서버가 HTTP 응답 전송
  5. 연결 종료(4-Way Handshaking)

실패 시나리오와 대응 방법

  1. SYN 패킷 손실:

    • 클라이언트는 타임아웃 후 SYN 재전송
    • 일반적으로 3~5회 재시도
  2. SYN+ACK 패킷 손실:

    • 서버는 SYN_RECEIVED 상태로 대기
    • 클라이언트의 타임아웃 후 SYN 재전송 시 서버도 SYN+ACK 재전송
  3. ACK 패킷 손실:

    • 서버는 SYN_RECEIVED 상태로 타임아웃 대기
    • 데이터 전송 시작되면 ACK가 포함되어 연결 확립
  4. SYN Flooding 공격:

    • 대량의 SYN 패킷으로 서버 자원 고갈 시도
    • SYN Cookie, 백로그 큐 관리 등으로 방어

3-Way Handshaking과 4-Way Handshaking의 비교

  • 3-Way Handshaking: 연결 수립 과정 (Connection Establishment)

    • SYN → SYN+ACK → ACK
  • 4-Way Handshaking: 연결 종료 과정 (Connection Termination)

    • FIN → ACK → FIN → ACK
    • 양방향 연결의 각 방향을 독립적으로 종료

성능 최적화 기법

  1. TCP Fast Open (TFO):

    • 재연결 시 SYN 패킷에 데이터 포함 가능
    • 첫 RTT(Round Trip Time)에서 데이터 전송 가능
    • 웹 페이지 로딩 시간 단축
  2. TCP 연결 재사용:

    • HTTP/1.1의 Keep-Alive
    • HTTP/2의 멀티플렉싱
    • 연결 수립 오버헤드 감소

개발자 관점에서의 고려사항

  1. 소켓 프로그래밍:

    • 클라이언트: connect() 함수 호출 시 3-Way Handshaking 수행
    • 서버: accept() 함수에서 클라이언트 연결 수락
  2. 타임아웃 설정:

    • 연결 타임아웃 적절히 설정
    • 재시도 메커니즘 구현
  3. 리소스 관리:

    • 불필요한 연결 최소화
    • 연결 풀링(Connection Pooling) 고려

결론

3-Way Handshaking은 TCP 통신의 신뢰성을 보장하는 핵심 메커니즘입니다. 시퀀스 번호와 확인 응답 번호를 교환함으로써 양방향 통신의 기반을 마련하고, 데이터 전송의 안정성을 확보합니다. 네트워크 프로그래밍이나 시스템 설계 시 이 메커니즘을 이해하는 것은 효율적이고 안정적인 통신 시스템 구축의 필수 요소입니다.

Keywords

TCP, 3-Way Handshaking, SYN, ACK, 시퀀스 번호, 연결 수립, 신뢰성 통신, 패킷 교환, 네트워크 프로토콜, 통신 보안

728x90
반응형