Network

[Network] TCP 3 way handshake & 4 way handshake

SeungbeomKim 2024. 1. 5. 17:57

네트워크 전송 계층에서 사용되는 TCP의 연결 설정 및 연결 해제 과정에 대해 알아보려고 합니다.

 

TCP는 장치들 사이에서 논리적인 성립(establish)을 하기 위해 연결을 설정하여 신뢰성을 보장하는 연결형 서비스를 제공합니다. 이러한 신뢰성 있는 서비스를 제공하기 위해 3 way handshake, 4 way handshake 과정을 거치게 되는데, 이 과정들에 대해 상세하게 설명드리겠습니다.

 

3-way handshake

TCP 3-way handshake-image
TCP 3 way handshake

  • TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정
  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달을 시작하기 전에 한쪽이 "다른 쪽이 준비가 되었다는 것"을 알 수 있도록 합니다. 
  • 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미합니다.

<A 프로세스가 B 프로세스에게 연결을 요청하는 절차>

  1. A -> B (SYN, 연결 요청 메세지 전송, Sequence Number를 임의의 랜덤 숫자로 지정, SYN Flag Bit를 1로 설정한 세그먼트 전송)
  2. B -> A (SYN + ACK, 요청 수락 및 A 포트도 열어달라는 메세지 전송, Acknowledgement Number를 (Sequence Number + 1)로 지정하고 SYN, ACK Flag Bit를 1로 설정한 세그먼트 전송
  3. A -> B (ACK, B의 요청에 대한 A의 수락 메세지를 전송함으로써 연결을 맺고, 이 단계에서 데이터 전송도 가능)

 

TCP의 연결을 설정을 위한 3-way handshake에 대해 알아봤으니, 이제 연결을 해제하기 위한 4-way handshake에 대해서도 알아보겠습니다.

 

4-way handshake

TCP 4-way handshake-image

  • TCP의 연결을 해제하는 과정

<A 프로세스가 B 프로세스에게 연결 해제를 요청하는 과정>

  1. A -> B (FIN, 프로세스 A가 연결을 종료하겠다는 FIN flag 전송, 프로세스 B가 FIN Flag로 응답)
  2. B -> A (ACK, 프로세스 B는 확인 메세지를 보내고, ACK Number Field를 (Sequence Number + 1)로 지정하고 ACK Flag Bit를 1로 설정한 세그먼트를 전송합니다. 이때 전송할 데이터가 남아있으면 이어서 전송)
  3. A -> B (FIN, 프로세스 B가 통신이 끝났으면 연결 종료 요청에 동의한다는 의미로 프로세스 B에게 FIN Flag 전송)
  4. B -> A (ACK, 프로세스 A는 확인했다는 메세지 전송 후 TCP 연결이 해제)

참고용 개념

  1. 포트 상태 정보
    • CLOSED: 포트가 닫힌 상태
    • LISTEN: 포트가 열린 상태로 연결 요청 대기 중
    • SYN_RCV: SYNC 요청을 받고 상대방의 응답을 기다리는 중
    • ESTABLISHED: 포트 연결 상태
  2. 플래그 정보
    • TCP Header에는 Control Bit(플래그 비트, 6bit)가 존재하며, 각각의 bit는 “URG-ACK-PSH-RST-SYN-FIN”의 의미를 지님
      • 즉 해당 위치의 bit가 1이면 해당 패킷이 어떠한 내용을 담고 있는 패킷인지를 나타냄
      • URG(Urgent) / 100000
        • Urgent Poiner 필드에 값이 채워져있음을 알리고, 송신측 상위 계층이 긴급 데이터라고 알려주면, 긴급비트 URG를 1로 설정하고, 순서에 상관없이 먼저 송신됨
      • ACK(Acknowledgement) / 010000
        • 응답 확인, 패킷을 받았다는 것을 의미하고 양단 프로세스가 쉬지 않고 데이터를 전송했다고 가정하면 최초 연결 설정 과정에서 전송되는 첫 번째 세그먼트를 제외한 모든 세그먼트의 ACK 비트는 1로 지정
      • PSH(Push) / 001000
        • 버퍼링된 데이터를 가능한 한 빨리 상위 계층 응용프로그램에 즉시 전달하할 것을 의미, 수신 측은 버퍼가 찰 때까지 기다리지 않고, 수신 즉시 버퍼링된 데이터를 응용프로그램에 전달
      • RST(Reset) / 000100
        • LISTEN, SYN_RCVD → RST 수신한 경우에 Listen 상태로 들어감
        • 그밖의 상태일 때 → RST 수신한 경우에 → 연결 끊고 Closed 상태로 들어
        • 연결 확립(ESTABLISHED)된 회선에 강제 리셋 요청, 강제 리셋 RST = 1
      • SYN(Synchronize Sequence Number) / 000010
        • 연결 설정, Sequence Number를 랜덤으로 설정하여 세션을 연결하는 데 사용
      • FIN(Finish) / 000001 
        • 연결 해제, 세션을 종료시킬 때 사용하고 더 이상 전송할 데이터가 없음을 의미
      • Termination의 종류
        • Graceful connection release (정상적인 연결 해제)
          • 정상적인 연결 해제에서는 양쪽 커넥션이 서로 모두 닫힐 때 까지 연결되어 있습니다.
        • Abrupt connection release (갑작스런 연결 해제)
          • 갑자기 한 TCP 엔티티가 연결을 강제로 닫는 경우, 한 사용자가 두 데이터 전송 방향을 모두 닫는 경우
    Q1. TCP의 연결 설정 과정(TCP 3 way handshakes), 연결 종료 과정(TCP 4 way handshakes) 단계가 차이 나는 이유
    • Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아있을 수 있기 때문에 일단 FIN에 대한 ACK만 보내고, 데이터를 모두 전송한 이후에 자신도 FIN 메세지를 보내기 때문입니다.
    Q2. 만약 Server에서 FIN flag를 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생하면 어떻게 될까?
    • 이러한 상황에 대비하여 Client는 Server로부터 FIN 플래그를 수신하더라도 일정시간(Default: 240sec)동안 세션을 남겨 놓고 잉여 패킷을 기다리는 과정을 거칩니다(TIME_WAIT 과정)
    Q3. 초기 Sequence Number인 ISN을 0부터 시작하지 않고 난수를 생성해서 설정하는 이유
    • Connection을 맺을 때 사용하는 포트(Port)는 한정된 범위 내에서 사용되고 시간이 지남에 따라서 재사용됩니다. 따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재합니다. 서버 측에서는 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 Number가 전송된다면, 이전의 연결로부터 오는 패킷으로 인식할 수 있습니다. 이러한 문제가 발생할 가능성을 줄이기 위해 난수로 ISN을 설정합니다.

<참고자료>

https://velog.io/@averycode/네트워크-TCPUDP와-3-Way-Handshake4-Way-Handshake

 

[네트워크] TCP/UDP와 3 -Way Handshake & 4 -Way Handshake

TCP / UDP / 3-Way Handshake / 4-Way Handshake

velog.io

https://mindnet.tistory.com/entry/네트워크-쉽게-이해하기-22편-TCP-3-WayHandshake-4-WayHandshake

 

[ 네트워크 쉽게 이해하기 22편 ] TCP 3 Way-Handshake & 4 Way-Handshake

우선 TCP의 3-way Handshaking 에 대하여 알아보겠습니다. * TCP 3-way Handshake 란? TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 three-way handshake를 사용한다. TCP 3 Way Handshake는 TCP/IP프로토

mindnet.tistory.com

https://ddooooki.tistory.com/21

 

[TCP/IP] 6. TCP/UDP 추가개념: 3-Way Handshake, TFTP, 소켓

TCP와 UDP에 대해 미처 다루지 못한 부분을 간단하게 짚고 넘어가도록 하자. 1. 3-Way Handshake(TCP의 연결설정)와 4-Way Handshake(TCP의 연결종료) Transport층에서 사용되는 TCP는 아래와 같이 3단계 핸드쉐이

ddooooki.tistory.com

https://asfirstalways.tistory.com/356

 

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

[TCP] 3-way-handshake & 4-way-handshake 연결 성립(Connection Establishment) 1) 클라이언트는 서버에 접속을 요청하는 SYN(a) 패킷을 보낸다. 2) 서버는 클라이언트의 요청인 SYN(a)을 받고 클라이언트에게 요청을

asfirstalways.tistory.com