본문 바로가기
CS

[Network] TCP 3-way & 4-way handshake

by Huiyeong 2022. 1. 11.
3-way handshake : TCP 연결을 성립하는 과정
4-way handshake : TCP 연결을 해제하는 과정

 

 TCP 란

전송 제어 프로토콜 (Transmission Control Protocol)의 약자, 네트워크 정보 전달을 통제하는 프로토콜
  • 패킷 교환 네트워크를 근간으로 하는 인터넷 프로토콜 (IP : Internet Protocol)을 기반으로 작동
  • 기본적으로 IP와 함께 사용되기 때문에 TCP/IP라고 불림
패킷 교환 네트워크
작은 블록의 패킷으로 데이터를 전송하며 데이터를 전송하는 동안만 네트워크 자원을 사용하도록 하는 방법

- 컴퓨터 네트워크와 통신의 방식 중 하나로 현재 가장 많은 사람들이 사용하는 통신 방식
- 정보 전달의 단위인 패킷은 여러 통신 지점 (Node)을 연결하는 데이터 연결 상의 모든 노드들 사이에 개별적으로 경로가 제어
TCP vs IP

IP (Internet Protocol)

호스트 간의 패킷 교환을 목적으로 정보를 주고 받는데 사용하는 정보 위주의 규약
기본적으로 오로지 데이터 교환을 위한 임무만을 수행 → 네트워크 상에서 발생할 수 있는 데이터 누락, 패킷의 순서 뒤바뀜 등의 데이터 교정과 관련된 기능은 하지 않음

TCP (Transmission Control Protocol)
IP가 제공하지 못하는 기능인 데이터 교정과 관련된 기능 제공 → ‘ 신뢰성 있는 프로토콜’이라고 하며 서버와 클라이언트를 연결하는 특성으로 ‘연결지향 프로토콜’이라고도 불림

 

 TCP 구조

TCP 구조

구조 설명 더보기 클릭

더보기
더보기

Source Port 송신 측에서 통신을 위해 사용하는 port 번호

Destination Port 수신 측에서 통신을 위해 사용하는 port 번호

Sequence Number 데이터 통신 바이트 흐름의 위치로 패킷의 순서가 뒤바뀌면 재조립에 사용

  • SYN 플래그가 (1)로 설정된 경우, 이것은 초기 시퀀스 번호가 된다. 실제 데이터의 최초 바이트 값과 그에 상응하는 ACK 번호는 이 값에 1을 더한 값이 된다.
  • SYN 플래그가 (0)으로 해제된 경우, 이것은 현재 세션의 이 세그먼트 데이터의 최초 바이트 값의 누적 시퀀스 번호이다.

Acknowledge Number 확인 응답 번호로 수신자가 예상하는 다음 시퀀스 번호 (순서 번호)

  • ACK 플래그가 설정된 경우 모든 선행하는 바이트들(존재할 경우)에 대한 수신에 대한 확인응답
  • 한쪽이 보낸 최초의 ACK는 반대쪽의 초기 시퀀스 번호 자체에 대한 확인응답이 되며, 데이터에 대한 응답은 포함되지 않음

Flags (9 bits) (혹은 Control bits) 패킷이 어떤 목적으로 전달될 것인지 설정

  • NS (1비트 ) : ECN-nonce 은폐 보호 (RFC 3540에 의해 헤더에 추가)
  • CWR (1비트) : 혼잡 윈도 축소(Congestion Window Reduced) 플래그는 송신 측 호스트에 의해 설정되는 것으로, 호스트가 ECE 플래그가 포함된 TCP 세그먼트를 수신했으며 혼잡 제어 메커니즘에 의해 응답했음을 알리는 역할 (RFC 3168에 의해 헤더에 추가)
  • ECE (1비트) : ECN-Echo는 다음을 나타냄
    • SYN 플래그가 (1)로 설정된 경우, TCP 상대가 명시적 혼잡 통지(Explicit Congestion Notification, ECN) 가 가능함을 의미
    • SYN 플래그가 (0)으로 해제된 경우, IP 헤더 셋에 혼잡 경험(Congestion Experienced) 플래그가 설정된 패킷이 정상적인 전송 중에 수신되었다는 것을 의미 (RFC 3168에 의해 헤더에 추가)
  • URG (1비트) : Urgen pointer 필드 (긴급 포인터 필드) 의 값이 유효함
  • ACK (1비트) : Acknowledgement 필드 (확인번호 필드) 의 값이 유효함. 클라이언트가 보낸 최초의 SYN 패킷 이후에 전송되는 모든 패킷은 이 플래그가 설정되어 있어야 함
  • PSH (1비트) : 푸시 기능. 수신 애플리케이션에 버퍼링된 데이터를 푸시해 줄지 여부를 질의하는 역할
  • RST (1비트) : 커넥션 리셋. TCP 연결이 재설정 되어야 함
  • SYN (1비트) : 동기화 시퀀스 번호
    • 양쪽이 보낸 최초의 패킷에만 이 플래그가 설정되어 있어야 함
    • 다른 일부 플래그들의 의미가 이 플래그의 값에 따라 바뀜
    • 일부 플래그들은 이 플래그가 설정되어 있을 때만 유효하고, 또 다른 일부 플래그들은 이 플래그가 해제되어 있을 때에만 유효
  • FIN (1비트) : 남은 송식 측 데이터 없음

 

 3-way handshake ( 연결 성립 )

  • 양쪽 모두 데이터를 전송할 준비가 되어 있다는 걸 알 수 있음
  • 양쪽 모두 상대편에 대한 초기 Sequence Number를 알 수 있게 함

3-way handshake

1. 클라이언트가 서버에게 SYN 패킷 전송 (sequence : x)
Destination port : 서버 portAcknowledgement Number : 0
Flags : SYN bit를 1로 설정
Sequence Number : 클라이언트의 초기 순서 번호
Source port : 클라이언트 port

2. 서버가 SYN 패킷을 받고, 클라이언트로 패킷 전송 (sequence : y, ack : x+1)
Source port : 서버 port
Destination port : 클라이언트 port
Sequence Number : 서버의 초기 순서 번호
Acknowledgment Number : 클라이언트 초기 순서 번호 + 1 ( x + 1 )
Flags : SYN bit와 ACK bit를 1로 설정
3. 클라이언트가 서버의 응답을 받고 확인 패킷 전송 (ack : y+1)
Source port : 클라이언트 port
Destination port : 서버 port
Acknowledgement Number : 서버의 초기 순서 번호 + 1 ( y + 1 )
Flags : ACK bit를 1로 설정

 

 4-way handshake ( 연결 해제 )

4-way handshake

1. 클라이언트에서 서버 방향의 연결 종료 요구
Sequence Number : 전송하는 패킷 순서 번호 ( x )
Acknowledgement Number : 마지막으로 전송했던 ACK와 같은 번호 ( y + 1 )
Flags : FIN bit와 ACK bit를 1로 설정
2. 서버는 FIN 을 받고 확인 패킷을 클라이언트로 전송
Sequence Number : (1)의 확인 번호 ( y + 1 )
Acknowledgement Number : (1)의 Sequnece Number + 1 ( x + 1 )
Flags : ACK bit를 1로 설정
→ 이 단계가 정상적으로 끝나면 클라이언트에서 서버 방향의 연결 종료
3. 모든 데이터 전송이 끝났다면 서버에서 클라이언트 방향의 연결 종료 요구
Sequence Number : (1)의 확인 번호 ( y + 1 )
Acknowledgement Number : (1)의 Sequence Number + 1 ( x + 1 )
Flags : FIN bit와 ACK bit를 1로 설정
4. FIN + ACK 패킷 수신 확인
Sequence Number : (3)의 확인 번호 ( x + 1 )
Acknowledgement Number : (3)의 Sequence Number + 1 ( x + 2 )
Flags : ACK bit를 1로 설정
→ 이 단계가 정상적으로 끝나면 서버에서 클라이언트 방향으로 연결 종료

'CS' 카테고리의 다른 글

[Network] OSI 7계층  (0) 2022.01.10