서버에서 SYN-ACK 패킷이 없습니다.

서버에서 SYN-ACK 패킷이 없습니다.

저는 두 대의 서버를 가지고 있으며 LwIP가 포함된 자체 임베디드 시스템을 사용하여 이 서버에 연결했습니다.

LwIP가 포함된 임베디드 시스템은 클라이언트이고 server1과 server2가 있습니다. 나는 server1에 연결하고 server2에 연결하기 전에 연결을 종료했습니다.

흐름에 대한 추가 분석:

  1. 클라이언트는 server1을 사용하여 새 소켓을 생성합니다.
  2. 클라이언트는 server1의 IP 주소를 얻기 위해 DNS 패킷을 보냈습니다. AP로부터 ACK를 받았습니다.
  3. 클라이언트는 TCP SYN 패킷을 보냅니다.
  4. Server1은 TCP SYN-ACK를 보내고 일부 데이터 전송을 수행합니다.
  5. 클라이언트는 TCP RST 패킷을 전송하여 server1과의 연결을 종료합니다. 소켓을 닫고
  6. 클라이언트는 server2를 사용하여 새 소켓을 생성합니다.
  7. 클라이언트는 server2의 IP 주소를 얻기 위해 DNS 패킷을 보냈습니다. AP로부터 ACK를 받았습니다.
  8. 클라이언트는 TCP SYN 패킷을 server2로 보냅니다.
  9. Server2는 TCP SYN-ACK를 보내고 일부 데이터 전송을 수행합니다.
  10. 클라이언트는 TCP RST 패킷을 전송하여 server2와의 연결을 종료합니다. 소켓을 닫고

그러나 때때로 server2가 9단계에 있는 클라이언트의 SYN 패킷에 응답하지 않는 경우가 있습니다. 이는 가끔 발생합니다. 다음과 같은 여러 포럼을 확인했습니다.

[1]서버가 SYN 패킷에 대한 응답으로 SYN/ACK 패킷을 보내지 않는 이유

[2]서버가 SYN 패킷에 대한 응답으로 SYN/ACK 패킷을 보내지 않습니다.

내 코드는 창 크기 조정을 활성화하지 않습니다. 서버가 개인 서버인지 확인할 수 없어서 삭제되었는지 잘 모르겠습니다. 내 환경은 많은 라우터와 통신 장치로 인해 상당히 시끄럽고 바쁩니다. 이 문제는 시끄러운 환경에서만 발생하며 깨끗한 환경에서는 발생하지 않습니다.

이 문제를 해결하려면 고객으로서 무엇을 할 수 있습니까?

답변1

때때로 서버가 SYN-ACK로 응답하지 않는 이유에 대한 몇 가지 아이디어:

  • SYN 패킷이 전송되면 서버의 애플리케이션이 중지됩니다. 이는 충돌이 발생할 수 있으며 프로그램의 자동 재시작 메커니즘을 사용하여 다시 작동할 수 있습니다. 서버 앱이 중지되거나 충돌하면 TCP 청취 소켓이 닫히므로 OS가 응답하지 않습니다.
  • 서버가 클라이언트를 다시 찾는 데 몇 가지 문제가 있습니다. 이는 일부 라우팅 문제이거나 비대칭 라우팅(이로 인해 방화벽이 손상됨)일 수 있습니다.
  • 클라이언트와 서버가 동일한 네트워크에 있는 경우 스패닝 트리 프로토콜 또는 ARP와 같은 레이어 2 문제로 인해 문제가 발생할 수 있습니다.
  • 네트워크의 패킷 손실: SYN 또는 SYN ACK 패킷이 삭제됩니다.
  • 서버가 압도되어 때때로 SYN 패킷에 응답할 수 없습니다.

서버가 SYN 패킷에 응답하지 못하게 만드는 요인이 많이 있을 수 있습니다.

나는 뭘 할까 :

  • 네트워크 확인을 위해 서버에서 일부 tcpdump 수행: 서버가 SYN 패킷을 수신합니까, 아니면 미리 네트워크에 문제가 있습니까? 서버가 SYN ACK 패킷을 생성하고 전송합니까? 그리고 거기에서 일하십시오.
  • 서버에 액세스할 수 없는 경우 가장 가까운 라우터/방화벽에서 동일한 작업을 수행하세요.
  • 서버에 액세스할 수 있는 사람에게 문의하세요.

관련 정보