Study/Network

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

유뱅유뱅뱅 2020. 9. 24. 18:07

TCP란?

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

 

TCP 3-way HandkShake란?

TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish)하는 과정이다.

TCP 3-way HandkShake 역할 및 과정

3-way HandkShake

[STEP 1]
Client는 Server에 접속을 요청하는 SYN 패킷을 보낸다. 이때 Client는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.

[STEP 2]
Server는 Client의 SYN 요청을 받고 Client에게 요청을 수락한다는 ACK와 SYN 가 설정된 패킷을 발송하고 A가 다시 ACK로 응답

[STEP 3]
Client가 Server에게 SYN+ACK를 받게되면 Server에게 응답을 확인했다는 ACK을 보낸다.
그 이후부터는 연결이 이루어지게되고 데이터가 오가게 된다.

위의 3단계를 거쳐 통신하는 것이 신뢰성 있는 연결을 맺어준다는 TCP의 3-Way HandShake방식이다. 

 

TCP 4-way HandkShake란?

TCP 통신 연결을 해제(Connection Termination)하는 과정이다.

TCP 4-way HandkShake 역할 및 과정

4-way HandkShake

[STEP 1]
App으로부터 close 신호를 받은 Client가 Server에게 연결을 종료하겠다는 FIN 플래그를 전송하게된다.

[STEP 2]
Server는 FIN 플래그를 받고 응답을 받았다는 의미로 ACK를 보낸다.
그리고 Server는 자신이 하던 데이터 통신이 끝날 때 까지 기다린다.(이 상태가 Time_Wait 상태)

[STEP 3]
Server가 통신이 끝났으면 연결이 종료되었다고 해당 Client한테 FIN 플래그를 전송한다.

[STEP 4]
Client는 응답을 받았다는 의미로 ACK를 보낸다.
이 때 Client는 패킷 유실이나 Routing 지연으로 인해 FIN패킷보다 늦게 도착하는 상황을 방지하기 위해 FIN 플래그를 받게되어도 일정시간동안 세션을 남겨두고 잉여 패킷을 기다린다.(이 때도, TIME_WAIT 상태)

 

참고 TCP Header 안의 플래그 정보

  • TCP Header에는 CONTROL BIT(플래그 비트, 6bit)가 존재하며, 각각의 bit는 “URG-ACK-PSH-RST-SYN-FIN”의 의미를 가진다.
    - 즉, 해당 위치의 bit가 1이면 해당 패킷이 어떠한 내용을 담고 있는 패킷인지를 나타낸다.
  • SYN(Synchronize Sequence Number)
    - 연결 설정 / 000010
    - Sequence Number를 랜덤으로 설정하여 세션을 연결하는 데 사용하며, 초기에 Sequence Number를 전송한다.
  • ACK(Acknowledgement)
    - 응답 확인 / 010000 1
    - 패킷을 받았다는 것을 의미한다. Acknowledgement Number 필드가 유효한지를 나타낸다.
    - 양단 프로세스가 쉬지 않고 데이터를 전송한다고 가정하면 최초 연결 설정 과정에서 전송되는 첫 번째 세그먼트를 제외한 모든 세그먼트의 ACK 비트는 1로 지정된다고 생각할 수 있다.
  • FIN(Finish)
    - 연결 해제 / 000001
    - 세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없음을 의미한다.

References

gmlwjd9405.github.io/2018/09/19/tcp-connection.html

 

[Network] TCP 3-way handshaking과 4-way handshaking - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

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

'Study > Network' 카테고리의 다른 글

TLS handshaking1.2/1.3, SNI, wireshark Capture 권한 부여 방법  (0) 2024.12.13