728x90
반응형
TCP 연결 해제 (4 way hand shake)
- TCP 연결이 해제 될때는 FIN 패킷, ACK 패킷들을 주고 받으면서 종료
- Close 요청을 먼저한 주체가 누구냐에 따라 Active Close, Passive Close 대상이 달라짐.
- 먼저 close 요청한 쪽이 Active Close 임.
TCP 연결 해제 순서
- Active Close --> Passive Close 에게 종료 요청을 보냄.
- Passive Close 는 Close WAIT 상태로 변경.
- Close WAIT 상태란 TCP 포트를 사용중인 프로세스에게 종료 명령을 내리는 것임.
- 만약 프로세스 내부에서 교착 상태에 빠져있으면 소켓이 종료가 안되는 것임. 즉, hang 이 걸리는거지.
- Passivce Close 에서 Close WAIT --> CLOSE 상태로 변경되면 이것을 Active Close 에 전달.
- 여기서 잠깐 생각해보면 왜 Passive Close 에서 응답이 올 떄까지 Active Close 가 기다리는지 생각해보면 됨.
- Active Close 가 ack 을 줘도 뭐 할게 없기 때문. Passive Close 는 이미 프로세스에 Close 명령을 내린 상태에서 기다리고 있는데 뭘 더 할 수가 없음.
- 만약 Active Close 가 일정 시간 동안 응답을 받지 못하면 일정 시간이 흐른 후, 자동으로 TIME_WAIT 상태로 변경
- TIME WAIT 상태란 일정 시간 동안 응답을 기다리고 응답이 오지 않을 경우 Socket 을 Disconnect 하는 상태
- 왜 바로 안닫고 TIME_WAIT 상태로 가냐하면, 그동안 응답이 올 수 있기 때문
Time WAIT 상태가 대량으로 존재할 때 무슨일이 발생하는가?
- TCP 는 서버 간 포트를 열어서 통신하는 것이다.
- Client <--> Server 간 통신 때, 클라이언트가 Active CLose 상태라고 가정해보자.
- Client 에서 대량의 Request 를 보낸다면 Client 쪽에 TIME_WAIT 상태가 많이 생기겠지.
- 클라이언트 입장에서는 랜덤 포트를 할당 받아 통신하기에 아무리 많아져봐야 물리 서버가 허용해주는 한도 내에서 크게 문제 없음.
- 일정 시간이 흐른 후 DISCONNECTED 될테니.
- 서버가 Active Close 상태일 때는 서버는 포트를 하나 할당받고 여러 요청들을 소켓에 할당할 것이다.
- 이 때, 소켓은 파일 디스크립터만큼 만들어 낼 수 있을테고. 수많은 요청들이 들어온다해도 fd 가 많이 만들어진 것 말고는 딱히 문제 없음.
'network' 카테고리의 다른 글
[network 3편] 네트워크 동기 vs 비동기, 블로킹 vs 논블로킹 정리 (0) | 2022.08.29 |
---|---|
[network 2편] 쿠키, session, jwt 정리 (0) | 2022.08.29 |
[network 1편] 로그인 관련 정리 (세션, JWT) (0) | 2022.07.16 |
쿠키, session, jwt 정리 (0) | 2021.11.07 |
proxy 관련 정리 (0) | 2020.08.21 |
댓글