>  기사  >  Java  >  TCP 연결 유지는 어떻게 부실 소켓 연결을 방지합니까?

TCP 연결 유지는 어떻게 부실 소켓 연결을 방지합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-26 08:42:30863검색

How Does TCP Keep-Alive Prevent Stale Socket Connections?

TCP 소켓 연결에 "Keep Alive"가 있습니까?

, TCP 소켓 연결에는 다음과 같은 시간 초과 메커니즘이 있습니다. TCP 연결 유지. 이는 소켓 연결이 무기한 열려 있는 것을 방지하여 한쪽이 다른 쪽에게 알리지 않고 연결을 종료하는 시나리오를 해결합니다.

TCP 연결 유지 프로세스

TCP 연결 유지는 다음을 통해 Linux에서 구성할 수 있습니다. 속성:

  • tcp_keepalive_time(기본값: 7200초)
  • tcp_keepalive_probes(기본값: 9)
  • tcp_keepalive_intvl(기본값: 75초)

이 프로세스에는 응답이 수신될 때까지 정기적으로 빈 ACK 패킷을 보내는 작업이 포함됩니다. 지정된 수의 프로브 후에도 응답이 수신되지 않으면 연결이 종료됩니다.

구현 참고 사항

Keep-Alive 패킷은 선택 사항이며 안정적으로 전송되지 않을 수 있습니다. 그러나 실제로는 대부분의 운영 체제와 클라우드 공급자가 이 메커니즘을 지원합니다.

TCP 시간 초과 변경

소켓별 구성(Java 11 이상):

Java 11에는 네이티브 코드를 사용하여 소켓별 수준에서 TCP 시간 초과를 구성하는 기능이 도입되었습니다.

시스템 전체 구성:

이전 버전의 Java 및 다른 운영 체제에서는 시스템 수준에서 시간 초과 구성을 적용해야 할 수도 있습니다.

Linux:

# Echo commands to modify the values in /proc
echo 180 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes
echo 10 > /proc/sys/net/ipv4/tcp_keepalive_intvl

Mac OS X:

# Use sysctl to modify values
sysctl -w net.inet.tcp.keepidle=180000 net.inet.tcp.keepintvl=10000 net.inet.tcp.keepcnt=3

Windows:

레지스트리 키: HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTCPIPParameters

위 내용은 TCP 연결 유지는 어떻게 부실 소켓 연결을 방지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.