TCP 소켓 연결에 "KeepAlive"가 있습니까?
소개
TCP 연결을 설정하려면 두 소켓 모두에 소켓을 설정해야 합니다. 측면. 일반적인 상황에서는 이러한 소켓이 무기한 열려 있습니다. 그러나 한쪽 끝이 다른 쪽 끝에게 알리지 않고 연결을 닫는 상황이 발생할 수 있습니다. 이 문제를 해결하기 위해 TCP는 Keep-Alive라는 메커니즘을 사용합니다.
TCP Keep-Alive 프로세스
TCP Keep-Alive는 세 가지 구성 가능한 매개변수를 기반으로 작동합니다.
-
tcp_keepalive_time: 연결 상태를 확인하기 위해 ACK 패킷을 보내기까지의 시간(초)(기본값 7200).
-
tcp_keepalive_probes: ACK 프로브 수 연결을 종료하기 전에 전송합니다(기본값 9).
-
tcp_keepalive_intvl: ACK 프로브 전송 사이의 간격(초)(기본값 75).
프로세스는 다음과 같이 작동합니다.
- tcp_keepalive_time의 유휴 기간 후 발신자는 ACK 패킷을 보냅니다.
- 수신자가 ACK로 응답하면 프로세스가 재설정되고 반환됩니다.
- 응답이 수신되지 않으면 발신자는 tcp_keepalive_intvl 초를 기다린 후 2단계를 반복합니다.
- 응답 없이 tcp_keepalive_probes ACK가 전송되면 RST 패킷으로 연결이 종료됩니다.
문제점
-
2시간 기본값: 기본 tcp_keepalive_time이 2시간이므로 오래된 연결이 오랫동안 지속될 수 있습니다.
-
Keep-Alive 옵션: Keep-Alive는 TCP 구현에 필수가 아닙니다. 일부 장치에서는 이를 지원하지 않아 잠재적으로 문제가 발생할 수 있습니다.
TCP 시간 초과 변경
필요한 경우 장치에서 TCP 연결 유지 설정을 수정할 수 있습니다. 체계. 구체적인 방법은 운영 체제에 따라 다릅니다.
-
Linux: /proc에 값을 설정하거나 sysctl을 사용합니다.
-
Mac OS X : sysctl로 값을 설정하거나 /etc/sysctl.conf를 수정합니다.
-
Windows: 레지스트리에서 설정을 조정합니다.
결론
TCP 연결에는 오래된 연결을 감지하고 종료하는 연결 유지 메커니즘이 있습니다. 기본적으로 연결 유지는 활성화되어 있으며 2시간 11분 동안 활동이 없으면 연결을 종료하도록 설정되어 있지만 이러한 설정은 특정 요구 사항에 맞게 사용자 정의할 수 있습니다.
위 내용은 TCP 연결 유지는 어떻게 오래된 연결을 방지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!