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 상태가 된다.
학습 단계로 잘못된 정보가 있을 수 있습니다. 잘못된 부분에 대해 알려주시면 정정하도록 하겠습니다.
'이것저것 스터디📚 > CS 스터디' 카테고리의 다른 글
HTTP 1.0과 HTTP 1.1의 차이 (0) | 2023.09.18 |
---|---|
HTTP 프로토콜 (0) | 2023.09.11 |
TCP와 UDP (0) | 2023.09.11 |
'www.google.com'을 브라우저에 입력하면 일어나는 일 (0) | 2023.09.04 |
TCP/IP 4계층 (0) | 2023.09.04 |