본문 바로가기
네트워크(Network)

[Network] TCP 연결 및 해제 과정 (3 way-handshake & 4 way-handshake)

by 도전하는 린치핀 2024. 6. 24.

0. TCP

  • TCP는 전송 계층(Transport Layer)에서 사용되는 프로토콜이다.
  • 장치들 사이에 논리적인 접속을 성립(Establish)하기 위하여 연결을 설정
  • 높은 신뢰성을 제공하고 연결 지향성 서비스를 제공한다.
  • 정보 전달에 있어 안정적으로, 순서대로, 에러 없이 데이터를 교환을 목적으로 한 프로토콜
  • 위의 안정적이고 논리적인 특징을 만족하기 위해 TCP의 경우 handshake를 사용한다.

 

1. TCP의 3 way-handshake 

1-1. TCP의 3 way-handshake 역할

  • 3 way-handshake는 TCP 통신을 이용해 데이터 전송 전 정확한 전송을 보장하기 위해 사전에 세션을 수립하는 과정
  • 클라이언트와 서버 모두 데이터를 전송하고 받을 준비가 되었다는 것을 보장한다.
  • 실제로 데이터 전달이 시작되기 전에 한쪽에서 다른 쪽이 준비되었다는 것을 알 수 있다.

1-2. 플래그 정보

  • 3 way-handshake의 플래그 정보는 SYN, ACK, FIN 3가지가 있다.
  1. SYN (Synchronize  Sequence Number
    • 연결 설정을 나타내는 플래그
    • TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷
    • Sequence Number를 랜덤으로 설정하여 세션을 연결하는데 사용하며, 초기 Sequence Number를 전송한다.
  2. ACK (Acknowledgement)
    • 응답 확인을 나타내는 플래그
    • 상대방으로부터 패킷을 받았다는 것을 알려주는 패킷
    • Acknowledgement Number 필드가 유효한지 나타낸다.
    • 클라이언트가 보내는 SYN 패킷 이후 전송되는 모든 패킷은 이 플래그가 설정되어야 한다.
    • 양단 프로세스가 쉬지 않고 데이터를 주고 받는다면, 최초 연결 설정 과정에서 전송되는 첫번째 세그먼트를 제외한 모든 세그먼트의 ACK 비트는 1로 지정한다고 생각하자.
  3. FIN (Finish)
    • 연결 해제를 나타내는 플래그
    • 세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없음을 의미

1-3. 포트 상태 정보

  • 3 way-handshake의 포트 상태는 CLOSED, LISTEN, SYN_SENT, SYN_RECEIVED, ESTABLISHED 5가지가 있다.
  1. CLOSED : 포트가 닫힌 상태
  2. LISTEN : 포트가 열린 상태로 연결 요청 대기 상태
  3. SYN_SENT : SYN 요청을 한 상태
  4. SYN_RECEIVED : SYN 요청을 받고 상대방의 응답을 기다리는 상태
  5. ESTABLISHED : 포트 연결 상태

1-4. TCP의 3 way-handshake 동작 과정

  1. SYN (Client → Server)
    • 서버에 접속을 요청하는 SYN 패킷을 전송한다.
    • 송신자가 최초로 데이터를 전송할 때, 시퀀스 넘버를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다.
    • 클라이언트는 SYN 패킷을 전송한 뒤,  SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
  2. SYN/ACK (Server → Client)
    • LISTEN 상태인 서버가 SYN 패킷을 받고 클라이언트에게 요청을 수락(ACK)하며 접속 요청 프로세스인 클라이언트의 포트를 열어달라는 메시지(SYN)를 전송한다.
    • ACK Number 필드를 "시퀀스 넘버 + 1" 로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트 전송한다.
    • SYN 패킷을 받은 서버는 SYN_RECEIVED 상태가 된다.
  3. ACK (Client → Server)
    • 클라이언트는 서버의 응답을 받았다는 의미로, ACK Number 필드를 "시퀀스 넘버 + 1"로 지정하고, 서버로 ACK 플래그가 설정된 세그먼트를 전송한다.
    • ACK 요청을 보낸 클라이언트는 ESTABLISHED 상태가 된다.
    • ACK 요청을 받은 서버는 ESTABLISHED 상태가 된다.

1-5. 3 way-handshake 사용 이유

  • TCP는 연결 지향적 프로토콜로 안정적인 데이터 전송을 위해 신뢰성을 확보하는데 중점을 둠
  • TCP는 양방향 통신이기 때문에 양쪽 모두 상대방에게 패킷을 보낼 수 있는지 확인
  • 클라이언트와 서버 모두 한 번씩 SYN  ACK를 주고받으며 데이터 수신 여부를 확인 논리적으로 총 네 단계가 필요한데, 서버의 SYN + ACK를 한 단계로 축약하여 세 단계를 가짐

 

2. TCP의 4 way-handshake 

2-1. TCP의 4 way-handshake 역할

  • 위의 3 way-handshake의 역할이 안정적인 세션을 수립하는 과정이었다면, 4 way-handshake는 세션을 안정적으로 종료하기 위한 과정이라고 생각할 수 있다.
  • 즉, 4 way-handshake는 TCP 통신 연결을 단계적으로 해제하는 과정이다.

2-2. 포트 상태 정보

  • 4 way-handshake의 포트 상태는 FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2,LAST_ACK, TIME_WAIT 5가지가 있다.
  1. FIN_WAIT1 : Close()를 호출 후 FIN 패킷을 보내고 응답을 대기하는 상태
  2. CLOSE_WAIT : 종료 요청을 받고 진입하는 상태로 남은 데이터가 있다면 전송을 마친 후 Close() 호츨
  3. FIN_WAIT2 : 종료를 준비한다는 응답을 받고 종료 요청이 올 때 까지 대기하는 상태
  4. LAST_ACK : 모든 데이터를 보내고 FIN 패킷을 전송한 후 상대방의 응답을 대기하는 상태
  5. TIME_WAIT : FIN 패킷을 받은 후 다시 ACK 응답을 한 이후의 상태로, 의도치 않은 에러로 인해 연결이 데드락에 빠지는 것을 방지한다.

2-3. TCP의 4 way-handshake 과정

 

  1. FIN (Client → Server)
    • close() 가 호출되면 연결을 종료하겠다는 FIN 패킷을 전송한다.
    • FIN 패킷에는 ACK가 포함되어 있다.
    • FIN 패킷을 보낸 후 클라이언트는 FIN_WAIT1 상태가 된다.
  2. ACK (Server → Client)
    • FIN 패킷을 받은 서버는 응답 패킷 ACK를 보낸다.
    • 아직 남은 데이터가 있다면 전송을 모두 마친 뒤 close()를 호출한다.
    • 응답 패킷 ACK를 보낸 후 서버는 CLOSE_WAIT 상태가 된다.
    • 응답 패킷 ACK를 받은 후 클라이언트는 FIN_WAIT2 상태가 된다.
  3. FIN (Server → Client)
    • 2번에서 남은 데이터를 모두 보낸 뒤, 서버는 FIN 패킷을 클라이언트에게 보낸 후 클라이언트가 승인 번호를 보내줄 때 까지 기다리는 LAST_ACK 상태가 된다.
  4. ACK (Client → Server)
    • 클라이언트는 FIN 패킷을 받고 확인이 완료되었다는 ACK 응답을 보낸다.
    • ACK 응답을 보낸 후 클라이언트는 TIME_WAIT 상태가 된다.
    • 이때, TIME_WAIT 상태는 의도치 않은 에러로 인해 연결이 데드락에 빠지는 것을 방지한다.
    • 만약 에러로 인해 종료가 지연되다가 시간 초과가 발생하면 CLOSED 상태로 돌아간다.
    • 서버는 ACK 패킷을 받은 후 소켓을 닫는다. (CLOSED)

3. TCP에서 3 way-handshake / 4 way-handshake 의미

 

  • 결론적으로 3 way-handshake는 TCP의 연결 과정을 의미하고, 4 way-handshake는 TCP의 연결 해제 과정을 의미한다.
  • 이렇게 3 way-handshake, 4 way-handshake를 통해 TCP 통신은 안정적이고 순서대로, 논리적으로 데이터를 주고 받을 수 있다.
더보기

REF

https://ghs4593.tistory.com/18

 

TCP 3-way HandShake & 4-way HandShake

TCP란? TCP는 Transport Layer에서 사용되는 프로토콜이다. TCP는 신뢰성이 높고 연결 지향성 서비스를 제공한다. 그러므로 정보 전달에 있어 안정적으로, 순서대로, 에러 없이 교환할 수 있도록 하는

ghs4593.tistory.com

https://yubh1017.tistory.com/81

 

[Network] TCP의 연결 설정 및 해제 과정 (3-way Handshake & 4-way Handshake)

TCP란? TCP는 네트워크 계층 중 전송 계층에서 사용하는 프로토콜 로서, 장치들 사이에 논리적인 접속을 성립(Establish) 하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스이다. TCP 3-way

yubh1017.tistory.com

https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-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://velog.io/@alkwen0996/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCP-3-way-handshake-4-way-handshake

 

[네트워크] | TCP 3 way handshake & 4 way handshake

TCP(Transmission Control Protocol) > TCP는 전송계층에서 동작하는 프로토콜로 송신지와 수신지가 연결된 상태에서 데이터를 주고 받는 연결 지향적 프로토콜이다. 데이터를 전송하기 전 송신지와 수신

velog.io

https://velog.io/@yeseolee/3-Way-4-Way-HandshakeTCP-%EC%97%B0%EA%B2%B0-%EC%84%A4%EC%A0%95%EA%B3%BC-%ED%95%B4%EC%A0%9C

 

3-Way, 4-Way Handshake(TCP 연결 설정과 해제)

3-Way, 4-Way Handshake로 알아보는 TCP 연결 설정과 해제 과정. 왜 연결 시에는 3 Step, 해제 시에는 4 step을 거치는가. TIME_WAIT 상태가 필요한 이유. 시퀀스 번호를 랜덤으로 초기화하는 이유.

velog.io