본문 바로가기
computer science/네트워크

[네트워크] 4 way handshake

by 박연호의 개발 블로그 2019. 12. 18.

저번시간에 이어 이번시간에는 4 way handshake를 알아 보겠습니다.

 

3 way handshak는 논리적인 연결을 하는 과정이였다면 4way handshake는 논리적인 연결을 해제하는 과정입니다.

근데 한가진 궁금한 점은 그냥 연결을 바로 끊지않고 연결 해제 과정을 거치는 걸까요 ?

 

TCP는 신뢰성인는 데이터 전송을 보장합니다. 내가 아직 필요한 데이터를 다 받지도 않았는데, 연결을 끊어 버리면 안되죠. "나 필요한 데이터 다 줬으니깐 연결 끊을게~" , "어...나 아직 데이터 못받았는데..." 이런 상황을 방지하기 위함이죠.

 

그래서 "너 데이터 다 받았니? 종료한다?" , "어~ 다 받았어 종료해~"와 같은 방법으로 종료를 해야 합니다.

 

이번 포스팅에도 마찬가지로 패킷 분석툴로 와이어 샤크하고,  http://dalberghetti.com/를 기준으로 설명 하겠습니다.

 

일단 4 way handshake전에 무슨 일이 있었는지 알아 봅시다.

 

 

 

 http://dalberghetti.com/에 접속하고 447 -> 454 -> 456순으로 3 way handshake과정이 완료됩니다.

 

GET /images/netlab-labelled-pod1.jpg 요청함에 따라 저희가 열어둔 60933포트로 데이터가 들어오네요

 

그렇게 저희가 원하는 이미지 파일을 성공적으로 다 받았습니다. 

 

이제 데이터를 다 받았으니깐 연결을 해제해야 겠네요.

 

4way handshake

그림에서는 FIN메시지를 클라이언트에서 먼저 보냈지만 서버가 먼저 보내는 경우도 있습니다.

1. FIN + ACK



FIN flag : 1

ACK flag : 1

 

서버에서 데이터를 모두 다 보냈으며, 연결종료를 요청함

 

2. FIN + ACK

FIN flag : 1

ACK flag : 1

 

클라이언트는 모든 데이터를 다 받았으며, 더이상 받을 데이터가 없으므로 바로 FIN 메시지를 전송함. 만약 데이터를 모두 받지 못해 추가적으로 데이터를 더 받아야 한다면 ACK 메시지를 보내지만 위의 예시에서는 ACK와 FIN을 동시에 보냄.

 

3. ACK

ACK flag : 1

 

FIN 플래그를 정산적으로 수신했음을 알리고, 연결 종료.

 

'computer science > 네트워크' 카테고리의 다른 글

[네트워크] 서브넷 마스크와 서브네팅  (0) 2020.01.31
[네트워크] IPv4와 IPv6  (0) 2020.01.30
[네트워크] HTTP  (0) 2020.01.29
[네트워크] OSI 7 Layer  (0) 2020.01.09
[네트워크] 3 way handshake  (0) 2019.12.17