IP_TRANSPARENT
TCP/IP 연결을 사용하면 "너무 많은 TIME_WAIT" 문제를 피할 수 있다고 들었습니다 . RST
a 는 연결을 끊는 데 사용되는 것 같지만 FIN
and 는 아닙니다 ACK
.
그러나 나는 이것을 달성하는 방법을 잘 이해하지 못합니다.
답변1
어떤 OS를 사용하고 있는지 언급하지 않았으므로 GNU/Linux라고 가정합니다("UNIX 및 Linux"이므로 이는 잘못된 가정일 수 있음).
커널 동작 조정
Linux에서 런타임 시 TCP 스택 조정은 일반적으로 sysctl
및/또는 procfs를 사용하여 수행됩니다.
따라서 아마도 다음을 살펴봐야 합니다.
- TCP(7) 맨페이지
Documentation/sysctl/
커널 소스 코드 아래의 파일. (당신은 또한 사용할 수 있습니다이 웹사이트).
이를 허용하는 옵션/매개변수가 있는지 확인하세요.
더 나아가
커널 소스 코드(net/ipv4/tcp.c
) 닫기 위해 FIN 플래그를 사용하는 것은 "하드코드"되어 변경할 수 없는 것 같습니다...죄송합니다.
어쩌면 이 동작을 변경하기 위해 패치를 작성해 볼 수도 있지만... 프로덕션 서버에 그런 패치를 적용하지는 않을 것입니다 ;-)
결론적으로
요청하신 내용을 수행할 방법이 없는 것 같습니다.
그래도 net.ipv4.tcp_fin_timeout(http://www.net.ipv4.tcp_fin_timeout에서도 사용 가능)과 같은 다른 매개변수를 조정하여 "너무 많은 TIME_WAIT" 문제를 완화할 수 있습니다 /proc/sys/net/ipv4/tcp_fin_timeout
.
애플리케이션 소스 코드가 있는 경우 setsockopt()
생성된 소켓을 사용하여 해당 동작을 조정할 수도 있습니다.
답변2
IP_TRANSPARENT는 아니지만 문제에 대한 다른 해결책이 있을 수 있습니다.
(코드 블록을 읽을 수 있도록 주석이 아닌 답변으로 게시됨)
Linux 시스템이 서버가 아닌 클라이언트인 경우 /etc/sysctl.conf에서 다음을 한 번 또는 함께 실험해 볼 수 있습니다 sysctl -p
. 그런 다음 각 방법의 기능을 검토하고 각 방법이 사용하기에 적합한지 확인하십시오.
net.ipv4.ip_local_port_range = 2000 65535
net.ipv4.tcp_tw_reuse = 1
잔혹한 세부 사항을 설명하는 훌륭한 기사:https://vincent.bernat.ch/en/blog/2014-tcp-time-wait-state-linux