Ubuntu 12.04.3 (커널 3.8.0-31- 일반)을 실행하는 컴퓨터 ( “서버”)에서 수신 대기하는 TCP 서버가 있습니다. 서로 다른 두 클라이언트 시스템에서 연결을 수신합니다. 머신 A는 Ubuntu 12.04.4 (3.11.0-17-generic)를 실행하고 머신 B는 Ubuntu 11.10 (3.0.0-32-server)을 실행합니다.
서버에서 TCP 타임 스탬프를 활성화 한 경우 (sysctl net.ipv4.tcp_timestamps = 1) 경우에 따라 시스템 A의 SYN 패킷이 “무시”됩니다. 서버에서 tcpdump를 사용하여 (비 차단 모드에서) SYN이 올바르게 도착하고 올바른 체크섬으로 응답이 없음-SYN / ACK 및 RST가 없음을 알 수 있습니다. 머신 A는 포기하기 전에 SYN을 여러 번 재전송합니다. 머신 A에서 실행되는 클라이언트 소프트웨어 (이 경우에는 wget)는 즉시 새로운 연결로 재 시도하고 성공하여 즉시 SYN / ACK를 얻습니다.
머신 B는 동일한 서버에 문제가 없으며 트래픽이 정상으로 보입니다. 머신 A와 동일한 TCP 옵션을 사용하고 있습니다 (캡처 파일에서 볼 수 있음). 서버에서 TCP 타임 스탬프를 비활성화하면 모든 것이 제대로 작동합니다.
무시 된 SYN 패킷의 타임 스탬프는 나에게 유효한 것처럼 보이지만 왜 그들이 문제를 일으키는 지 또는 근본적인 원인인지 확실하지 않습니다.
https://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap 여기에 익명의 pcap을 넣었습니다 . 서버 A (10.4.0.76)가 HTTP GET (패킷 1 ~ 10)을 성공적으로 수행 한 다음 1 초 후에 동일한 URL을 다시 가져 오려고하지만 (패킷 11 ~ 17) 서버 (10.76.0.74)에서 가져 왔습니다. SYN이 무시되었습니다. 패킷 18-27은 또 다른 성공입니다.
” 이 서버가 SYN 패킷에 대한 응답으로 SYN / ACK 패킷을 보내지 않는 이유 “에 설명 된 것과 비슷한 문제라고 생각하며 타임 스탬프를 비활성화하는 것은 현재 상황을 이해하고 싶은 해결 방법입니다. 이것은 단지 버그입니까?
로컬 방화벽이 실행되고 있지 않습니다. 서버는 꽤 많은 TCP 연결 (한 번에 약 32K)을 처리하지만 사용 가능한 메모리 / CPU가 많이 있습니다. pcap에 표시된 테스트 시점에 시스템 A와 서버 사이에 다른 TCP 연결이 없었습니다. 서버 응용 프로그램의 수락 대기열이 갑자기 채워지고 있다는 신호는 없습니다 (내가 추정하는 두 클라이언트에 영향을 미칩니다). 서버에서 가져온 pcap에서 패킷이 정상으로 보이므로 네트워크 장치가 개입하는 것처럼 보이지 않습니다.
나는 원래 이것을 우분투 포럼에 게시했지만 뒤늦게 보면 더 적절한 위치 일 수 있습니다. 단서의 대출을 기대합니다.
답변
필자의 경우 다음 명령으로 Linux 서버에서 누락 된 SYN / ACK 응답 문제를 해결했습니다.
sysctl -w net.ipv4.tcp_tw_recycle=0
TCP 타임 스탬프는 결국 (PAWS, 창 스케일링 등) 유용하기 때문에 TCP 타임 스탬프를 비활성화하는 것보다 더 정확하다고 생각합니다.
tcp_tw_recycle
많은 IP 공유기가 타임 스탬프를 유지하므로 동일한 IP의 타임 스탬프가 일치하지 않기 때문에 PAWS 가 시작되기 때문에이를 활성화하지 않는 것이 문서에 명시 되어 있습니다.
tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4) Enable fast recycling of TIME_WAIT sockets. Enabling this option is not recommended for devices communicating with the general Internet or using NAT (Network Address Translation). Since some NAT gateways pass through IP timestamp values, one IP can appear to have non-increasing timestamps. See RFC 1323 (PAWS), RFC 6191.