TCP 연결 해제
TCP 연결 해제(4 way handshake)
1.FIN
: 클라이언트 연결 해제 요청
먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 서버에 보낸다. 그리고 클라이언트는 FIN_WAIT_1의 상태로 들어가 서버의 응답을 기다린다.
2.ACK
: 클라이언트 연결 해제 요청 확인
서버는 클라이언트에게 ACK를 보내 해제 요청 승인 세그먼트를 보낸다. 그리고 CLOSE_WAIT 상태에 들어간다. 클라이언트가 서버의 ACK 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
3.FIN
: 서버 연결 해제 요청
서버는 2에서 ACK 세그먼트를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보낸다. 서버로부터 FIN 세그먼트를 받은 클라이언트는 TIME_WAIT 상태가 된다.
4.ACK
: 서버 연결 해제 요청 확인
클라이언트는 다시 서버로 ACK를 보내고 이를 받은 서버는 CLOSED상태가 된다. 이후 클라이언트는 TIME_WAIT상태를 유지하며 어느 정도 시간을 대기한 후 CLOSED 상태로 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다.
TIME_WAIT 상태를 유지하는 이유
⸰ 지연된 패킷 처리 (데이터 무결성 보장)
- TIME_WAIT 상태 없이 TCP 연결이 종료될 때, 네트워크 상에서 일부 패킷이 지연되어 늦게 도착한 경우
- 지연된 패킷이 새로 열린 연결로 잘못 들어갈 수 있음
> 데이터 무결성 문제를 방지
⸰ 정상적인 연결 종료 보장
- 마지막 단계에서, 클라이언트가 FIN 메시지를 보내고, 서버는 이 FIN에 대해 ACK를 응답하는데,
- 클라이언트가 ACK를 보내고 곧바로 포트를 닫으면, 서버 쪽에서는 이 ACK를 받지 못할 수 있으므로 서버는 여전히 LAST_ACK 상태로 남아, 클라이언트로부터 ACK를 기다리게 됨
> 서버도 정상적으로 연결 종료 가능
'💠기타 > 컴퓨터 과학 (CS)' 카테고리의 다른 글
[컴파일러] Tokenizer, Lexer, Parser에 대해 알아보자 (0) | 2024.09.02 |
---|---|
[컴파일러] 컴파일러의 구조 (0) | 2024.09.02 |
[운영체제] CPU의 구조/원리 (1) | 2024.07.18 |
[CS50] 「3」 스크래치(엔트리), C언어 자료형 (0) | 2024.06.11 |
[CS50] 「2」 의사 코드, 정렬, 탐색, 시간 복잡도 (1) | 2024.06.11 |