https://qkrqkrrlrl.tistory.com/139
TCP와 UDP의 차이점에 대해 설명해주세요
TCP (Transmission Control Protocol)전송 제어 프로토콜 특징 1. 연결 지향형 성격을 지니고 있다.-> 즉 서로 간의 연결을 지향한다는 의미. 신뢰성을 보장하기 위한 방법 2. 연결을 위해 추가 작업이 필
qkrqkrrlrl.tistory.com
위 게시글에서 TCP를 짧게 소개하면서 신뢰성을 구축하는 방법으로 3-way handshake를 통한 연결 진행, 4-way handshake를 통해 연결을 해제한다고 말했다.
연결을 진행하면 아무래도 서로 상태를 파악하고 데이터를 전송하니 조금 더 신뢰성 있고 안전하게 데이터를 전송할 수 있다는 건 알겠다. 그런데 연결 해제는 왜 따로 진행을 하는 것일까? 그리고 왜 연결 해제는 4-way로 구성되어 있을까?
이제 작성하는 내용들은 3-way handshake를 알고 있다는 가정 하에 진행하겠습니다.
4-way handshake
- TCP에서 연결을 해제할 때 사용하는 방법
- 4번의 통을 통해 연결 해제를 진행한다.
4-way handshake는 위 사진과 같이 4번의 통신을 통해 진행이 됩니다.
위 사진은 TCP 헤더에 들어가는 플래그입니다.
4-way handshake에서는 FIN, ACK가 사용되는 것을 확인할 수 있습니다.
1 STEP (클라이언트 -> FIN -> 서버)
클라이언트는 연결을 종료하겠다는 의미로 FIN 비트를 1로 변경해서 서버에게 전송합니다.
그리고 클라이언트는 FIN_WAIT_1로 상태가 변경됩니다.(즉 ACK 대기 상태)
2 STEP (서버 -> ACK -> 클라이언트)
서버는 클라이언트에게 받은 요청을 먼저 확인합니다. FIN 비트를 1로 변경해서 보냈으니 '아 연결을 이제 종료하려고 하는구나!'를 알아채고 ACK 비트를 1로 변경해서 전송합니다.
이때 주의할 점이 FIN은 보내지 않습니다.(3-way handshake같은 경우는 응답으로 SYN, ACK를 같이 보내서 헷갈릴 수 있습니다.)
그리고 서버의 상태는 CLOSE_WAIT으로 변경이 됩니다.
또한 ACK를 받은 클라이언트는 FIN 플래그를 받기 위해 FIN_WAIT_2로 상태가 변경됩니다.
3 STEP (서버 -> FIN -> 클라이언트)
CLOSE 준비가 다 된 서버는 클라이언트에게 FIN 비트를 1로 변경해서 전송합니다.('나 종료 준비 되었어!'라는 의미)
4 STEP (클라이언트 -> ACK -> 서버)
서버로부터 FIN 플래그를 받은 클라이언트는 본인도 해지 준비가 되었다는 의미로 ACK 비트를 1로 변경해서 서버로 보내줍니다. 그리고 클라이언트는 TIME_WAIT 상태로 변경됩니다.
AFTER
서버는 ACK를 받으면 서버의 소켓을 닫아서 연결을 해제합니다.
클라이언트는 TIME_WAIT의 시간만큼 기다린 이후 소켓을 닫아서 연결을 해제합니다.
왜 연결 해제는 하나의 단계가 더 추가됐나요?
서버에서 전송해야하는 데이터가 아직 존재할 수 있기 때문이다.
3-way handshake같은 경우는 클라이언트의 SYN이 오면 서버에서는 SYN, ACK를 같이 보내서 응답을 처리하는데
4-way handshake같은 경우 FIN, ACK를 같이 보내버리면 서버도 닫을 준비가 되었다는 의미이기에 사용하지 않습니다.(아직 보내야 하는 데이터가 남아있을 수 있기 때문입니다. 그래서 데이터를 전부 전송하고 FIN을 따로 클라이언트로 보내게 됩니다.)
왜 클라이언트는 TIME_WAIT의 시간을 따로 기다리는 건가요?
혹시나 전송중인 데이터가 있을 까봐 추가시간을 부여하는 것이다.
만약에 데이터가 인터넷을 타고 전송 중인데 서버에서 닫는다고 클라이언트도 닫아버리면? 클라이언트는 전송 중인 데이터를 받지 못하게 된다. 그래서 추가적인 데이터를 받기 위해 시간을 어느 정도 할당하는 것.
참고 자료
https://lxxyeon.tistory.com/177
[iOS, Network] Wireshark로 네트워크 패킷 분석하기(4) - Wireshark로 4-way handshake 분석하기
TCP 4-way handshake 3 way handshake와 반대로 TCP 연결을 해제할 때 주고 받는 확인작업이다. 이 역시 4번의 확인과정을 거친다고 하여 4-way handshake라고 부른다. TCP 4-way handshake를 간단히 표현하면 다음과
lxxyeon.tistory.com
'CS지식' 카테고리의 다른 글
Transaction의 개념 (Feat, ACID) (0) | 2024.05.26 |
---|---|
SOP 정책 (Feat, CORS 및 Preflight) (0) | 2024.05.25 |
TCP와 UDP의 차이점에 대해 설명해주세요 (0) | 2024.05.20 |
HTTP/1.1과 HTTP/2의 차이점 (0) | 2024.05.17 |