본문 바로가기

이것저것 스터디📚/CS 스터디

3-way handshake, 4-way handshake

3-way handshake

- TCP는 장치들 사이에 논리적인 접속을 성립하기 위하여 3-way handshake를 사용한다.

- 즉, 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.

- TCP의 연결을 초기화 할 때 사용한다.

* 3-way handshake 과정

1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다. 클라이언트는 SYN/ACK 응답을 기다리는 SYN_SENT 상태, 서버는 Wait for Client 상태이다.

2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN 플래그가 설정된 패킷을 발송한다. 서버는 SYN_RECEIVED 상태가 된다.

3. 클라이언트는 서버에게 ACK를 보내고 연결이 이루어진다. 서버는 ESTABLISHED 상태가된다.


4-way handshake

- 세션을 종료하기 위해 수행되는 절차이다.

 

* 4-way handshake 과정

1. 클라이언트는 연결을 종료하겠다는 FIN 플래그를 전송한다. 클라이언트는 FIN-WAIT 상태가 된다.

2. 서버는 FIN 플래그를 받고, 일단 확인메시지인 ACK를 보내고 자신의 통신이 끝날때까지 기다린다. 서버는 CLOSE_WAIT 상태가 된다.

3. 연결을 종료할 준비가 되면, 연결 해지를 위한 준비가 되었음을 클라이언트에게 FIN 플래그를 전송하며면서 알린다. 서버의 상태는 LAST-ACK 상태가 된다.

4. 클라이언트는 연결 해지 준비가 되었다는 ACK를 확인했다는 메시지를 보낸다.(ACK) 클라이언트 상태가 TIME_WAIT가 된다.

 

4단계에서 왜 클라이언트의 상태가 CLOSE가 아닌 TIME_WAIT가 되는지?

- 3단계에서 서버가 클라이언트에게 FIN 플래그를 보내는데, FIN 플래그를 보내기전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하면, 이 패킷은 Drop되고 데이터는 유실된다.

- 따라서, 이러한 현상에 대비해서 클라이언트는 서버로부터 FIN을 수신하더라도 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데, 이 과정이 TIME_WAIT이다. 즉, 일정시간이 지나면 세션을 만료하고 연결을 종료하고 CLOSE 상태가 된다.

 


학습 단계로 잘못된 정보가 있을 수 있습니다. 잘못된 부분에 대해 알려주시면 정정하도록 하겠습니다.

참고 : https://bangu4.tistory.com/74

'이것저것 스터디📚 > CS 스터디' 카테고리의 다른 글

Proxy와 Reverse Proxy의 차이는?  (0) 2023.09.18
HTTP 프로토콜  (0) 2023.09.11
MTU  (0) 2023.09.11
TCP 헤더  (0) 2023.09.11
TCP와 UDP  (0) 2023.09.11