2009-09-29 2 views
1

일부 통신 문제를 해결하는 중이고 네트워크 추적에서 때때로 TCP 시퀀스 오류가 발생합니다. 내가있어 하나의 예는 다음과 같습니다응용 프로그램이 TCP 재전송에 영향을 미칠 수 있습니까?

  1. 서버 클라이언트에 서열 = 3174, 렌 = 50
  2. 클라이언트 서버 : 긍정 = 3224
  3. 서버 클라이언트에 서열 = 3224, 렌 = 50
  4. 서버에
  5. 클라이언트 : 긍정 = 3224
  6. 서버 클라이언트에 서열 = 3274, 렌 서버 = 10
  7. 클라이언트 : = 3224 승인, SLE = 3274, SRE = 3284

패킷 4 & 5는 거의 정확하게 같은 시간에 추적에서 기록됩니다 (클라이언트와 서버 사이의 라우터에서 발생 함). 따라서 전송 중 교차 가능성이 가장 높습니다.

TCP 세션이 서버의 마지막 두 전송을 누락 한 클라이언트와 동기화되지 않았습니다. 이 두 패킷은 재전송되어야하지만 그렇지 않은 경우 추적의 다음 로그는 패킷 6 이후 24 초 후 클라이언트의 RST 패킷입니다.

내 질문은 재전송 실패의 원인과 관련이 있습니다. 패킷에서 서버 데이터 3 & 5? 재전송은 운영 체제 수준에 있다고 가정 하겠지만 어쨌든 응용 프로그램이 영향을 미쳐 전송을 중지 할 수 있습니까? 블로킹이나 잠을 자거나 그런 식으로?

답변

2

하나의 패킷 만 서버에서 클라이언트로 손실됩니다 (패킷 3). 패킷 6에는 패킷 5에 대한 선택 승인 (SACK)이 포함되어 있습니다.

특정 질문에 대한 답변으로, 아니요, 응용 프로그램 수준의 문제로 인해 TCP 재전송을 막아서는 안됩니다.

+0

응용 프로그램이 관련되어 있다고 생각하지 않았지만 네트워크에서 이상한 일이 발생했다는 것을 의미합니다. 즉, 정리하기가 더 까다 롭습니다. (패킷 5의 데이터를 응용 프로그램은 패킷 3의 데이터가 수신 될 때까지 응용 프로그램을 실행합니까? – sipwiz

+1

sipwiz : 맞습니다. 중간에 패킷 로그가 아닌 양쪽에서 패킷 로그를 얻으십시오. – caf

관련 문제