중복 ACK 레코드의 원인은 무엇입니까?


19

여러 개의 중복 ACK 레코드를 표시하는 클라이언트 시스템에서 Wireshark 캡처를 검토하여 재전송 및 순서가 잘못된 패킷을 트리거합니다.

다음 스크린 샷에 나와 있습니다. .26은 클라이언트이고 .252는 서버입니다.

여기에 이미지 설명을 입력하십시오

중복 ACK 레코드의 원인은 무엇입니까?

도움이된다면 더 많은 배경 :

하나의 특정 클라이언트 사이트에서 네트워크 처리량 문제를 조사하고 있습니다. 사용자 인터페이스 관점에서 인식되는 문제는 활용도가 낮은 1gbps WAN 연결에도 불구하고 데이터가 느리게 전송된다는 것입니다.

거의 모든 클라이언트 시스템에는 동일한 문제가 있으며 20 개 이상의 시스템에서 테스트되었습니다. 문제가없는 두 대의 기계를 찾았습니다. 우리는 그들의 구성에서 다른 것을 식별하는 과정에 있습니다. 우리는 문제가없는 두 머신에서, 오직 하나의 중복 된 ACK 레코드 만 보았습니다. 문제가있는 머신에는 일반적으로 3 개의 중복 ACK 레코드가 있습니다. 한 가지 주목할만한 차이점은 잘 작동하는 머신은 모두 네트워크 운영 팀의 구성원이며 다른 모든 머신은 "일반적인"직원을위한 것입니다. 기계는 표준으로되어 있지만 네트워크 관리자는 로컬 시스템을 변경했을 수 있습니다. 이는 우리가 연구하는 또 다른 측면입니다.

우리는 서버 에서 TcpMaxDupAcks 설정을 변경하려고 시도했지만 실제로 필요한 값은 5이고 유효한 범위는 1-3입니다.

서버는 Windows Server 2003입니다. 클라이언트는 모두 엔터프라이즈 관리 Windows XP입니다. 작동중인 두 클라이언트를 포함한 모든 클라이언트에는 시만텍 안티 바이러스가 설치되어 있습니다.

이 문제를 보여준 수백 개의 유일한 클라이언트 사이트입니다.

pathping 문제의 시스템에서도 56ms RTT 및 일관된 0/100 패킷 손실을 보여줍니다.

감사,


두 엔드 포인트 사이에 어떤 종류의 라우팅 스위칭 하드웨어가 있습니까?
SpacemanSpiff

@SpacemanSpiff에는 Cisco ASR 1006 라우터가 있습니다.
Sam

IT 직원과 고객이 동일한 스위칭 장비에 있습니까? 머신 중 하나를 IT 영역으로 가져 가서 문제가 사라지는 것을 볼 수 있습니까?
SpacemanSpiff

답변:


25

참고 :이 캡처는 클라이언트 컴퓨터에서 수행되었다고 가정합니다.

TCP 시퀀싱에 대한 간략한 요약 : TCP는 두 응용 프로그램간에 바이트 스트림을 안정적으로 제공합니다. 이 경우 "신뢰할 수있는"이란 무엇보다도 TCP가 순서가 잘못된 데이터를 수신 응용 프로그램에 전달하지 않도록 보장합니다.

순서 번호를 사용하여 순서대로 신뢰할 수있는 전달이 구현됩니다. 각 스트림의 모든 패킷에는 32 비트 시퀀스 번호가 할당됩니다 (TCP는 사실상 두 개의 독립적 인 데이터 스트림 인 A-> B 및 B-> A 임). A가 ACK를 B로 보내는 경우 ACK 필드의 값은 A가 B에서 볼 것으로 예상되는 다음 시퀀스 번호입니다.

위에서 서버에서 클라이언트로 전송되는 TCP 세그먼트가 하나 이상 손실 된 것으로 보입니다. 순서대로 세 개의 중복 ACK는 클라이언트가 빠른 재전송 을 트리거하려는 시도 입니다. TCP 발신자가 동일한 데이터에 대해 3 개의 중복 수신 확인 (즉, 가장 최근에 전송 된 데이터가 아닌 동일한 세그먼트에 대한 4 개의 ACK)을 수신하면, ACK되는 세그먼트 직후의 세그먼트가 손실되었다고 합리적으로 가정 할 수 있습니다. 네트워크에 연결되어 즉시 재전송됩니다.

이 경우 재전송이 이루어지고 Wireshark에서 순서가 잘못된 것으로 식별됩니다.

joeqwerty 에서 언급했듯이 패킷 손실은 대부분 혼잡에 의해 발생합니다. 인터페이스 카드 불량, 케이블 연결 불량 등으로 인해 링크의 CRC 또는 기타 오류로 인한 것일 수도 있습니다. 경로를 따라 모든 링크의 통계를 살펴보고 경로가 많이 활용되고 있는지 및 / 또는 많은 오류가 발생했습니다.

확실한 후보를 볼 수없는 경우 경로를 따라 여러 지점에서 동시 패킷 캡처를 수행하여 손실이 발생하는 위치를 찾아 내십시오.

여기서 어떤 종류의 WAN 연결을 사용하고 있습니까? 전용선입니까? MPLS VPN 링크? 공용 인터넷을 통한 IPsec VPN? 다른 것?


귀하의 의견에 감사드립니다. 맞습니다. 패킷 캡처는 클라이언트에서 가져옵니다. 당신이 무슨 말을하는지 이해한다면, 중복 ACK는 클라이언트가 잘못한 것이 아니라 실제로 다른 레코드 (ACK 이후의 레코드)를받지 못한 클라이언트의 트리거입니다. 그 맞습니까? 클라이언트 PC에서이 문제를 일으킬 수있는 사항은 무엇입니까? 클라이언트 PC 문제가 아닌 경우 왜 일부 클라이언트에는 표시되고 다른 클라이언트에는 표시되지 않습니까?
Sam

WAN은 미국 동부 해안과 중서부의 3 개 사이트 사이에서 "2 점간 회로"입니다.
Sam

맞습니다; DUPACK은 패킷 손실의 증상입니다. 문제가 다른 클라이언트가 아닌 일부 클라이언트에서 발생하는 이유에 대해 영향을받는 클라이언트에 공통적 인 사항을 해결해야합니다. 그들은 모두 같은 사무실에 있습니까? 공통 네트워크 인프라를 사용하십니까? (스위치 또는 링크?). 수행 할 가치가있는 한 가지는 영향을받는 각 시스템에서 mtr(또는 pathpingWindows에서) 패킷 손실이 발생하는 것처럼 보이는 서버 경로를 따라 일반적인 홉이 있는지 확인하는 것입니다. 스위치 포트 데이터를 보는 데 사용할 수있는 네트워크 모니터링 시스템이 있습니까?
Murali Suriar 10

4

문제가있는 곳을 격리하는 동안 패킷 덤프를 증상 중 하나라고 생각하십시오. 유 추적으로 누군가가 가슴 통증으로 의사의 진료실에 들어가면 의사는 3 시간 동안 의사의 성격을 조사하지 않습니다. 고통. 그는 약 2 분을 보낸 다음 원인의 95 %가 가슴 앓이 또는 협심증이라는 것을 알고 있습니다. 같은 방법으로 중복 ACK가 보이면 즉시 흔적의 잡초에 쥐 구멍을 뚫지 마십시오. .

연결이 설정된 후 전송 네트워크 문제로 인해 TCP 성능이 저하되는 것은 아닙니다. 때로는 서버 CPU 또는 디스크 제한으로 인해 발생하며 때로는 클라이언트 PC의 일부 문제로 인해 발생합니다. 몇 주 동안 wireshark 추적의 잡초에 파고 들어 mtr을 사용 하여 문제를 비교적 빨리 포기하고 찾기 위해 또는 CPU 및 디스크 I / O와 같은 다른 호스트 메트릭을 조사하여 꼬리를 쫓았습니다 .

첫 번째 작업은 이것이 네트워크 문제인지 또는 호스트 수준 문제인지를 증명하는 것입니다. 초점 네트워크를 통해 실시간 트래픽을 전송 및 증명에 대한 여부있는 거 대기 / 잃어버린 / 재 주문 주 1 이; 이는 항상 이와 같은 잠재적 인 네트워크 문제에 대한 최종 결론 입니다.

ping처리량 문제가 발생하는 동안 클라이언트와 서버간에 오랜 시간 (일반적으로 1 시간) 샘플링을 수행합니다 . 이를 위해 mtr 또는 ping 플로터 프리웨어 를 사용할 수 있습니다 . 일부 홉에서 지속적으로 패킷을 잃어버린 후 모든 홉이 많이 느슨하게 풀리면 네트워크가 의심 될 수 있습니다. 장치 ICMP 속도 제한으로 인해 일부 홉이 패킷을 잃어버린 것처럼 보일 수 있습니다. 그러므로 해당 홉에서 시작하는 트렌드와 그 이후의 트렌드를 찾고자합니다.


참고 1 트래픽을 다시 주문 하는 경우 wireshark가 제공 하는 전문가 정보 필드 에 다소 빨리 나타납니다.


기본적으로 네트워크를 비난하는 것은 좋은 접근 방법이 아닙니다. 스택 전체의 계측은 항상 모범 사례입니다. 그러나이 경우, DUPACK, 비 순차적 및 재전송 된 세그먼트는 두 엔드 포인트 간의 네트워크 손실을 나타내는 것으로 보입니다.
Murali Suriar

@Murali Suriar, 당신의 주장과 함께 가자. 패킷 손실이 발생하는 이유 를 격리해야합니다 . 우리 IT 사람들은 wireshark우리가 현미경을 너무 오래 보는 것을 좋아한다는 점까지 신비롭게 사랑에 빠졌습니다 . 내가하고 싶은 요점 pcap은 TCP의 연대기에 깊이 파고 드는 것보다 패킷 손실, CPU 사이클 및 디스크 I / O 계측에 소요되는 사이클을 줄이는 것이 좋습니다. 그렇게 할 시간이 있지만 일반적으로이 분석 단계에는 없습니다.
Mike Pennington

@Mike는 동의했기 때문에 첫 번째 단계로 경로를 따라 장치의 오류 / 사용 정보를 찾도록 제안했습니다. 나는 접근성 이외의 다른 ICMP 기반 진단의 팬이 아닙니다. 말하자면 속도 제한과 잘못 구성된 ACL / 방화벽은 신뢰할 수 없게 만들 수 있습니다. 엔터프라이즈 네트워크 (이것처럼 들리 겠지만)에서 MTR은 종종 올바른 방향을 가리킬 수 있습니다. MTR의 다른 문제는 종종 하나의 문제 만 지적한다는 것입니다. 그것은 있다는 것을 전적으로 가능 여러 당신이 첫 번째 해결 될 때까지 찾을 수 없습니다 경로를 따라 고장.
Murali Suriar 21:55에

우리는 동의하지 않습니다. TTL 스테핑이있는 ICMP는 만병 통치약이 아니며 여러 가지 결함이있을 수 있습니다. 그러나 방화벽 및로드 밸런서를 다루는 모든 결함에 대해 ICMP는 문제가있는 특정 응용 프로그램 포트에서 호스트 수준 계측 TCP / UDP 세션을 실행할 수없는 한 최고의 원격 진단입니다. 이 소켓은 많이 재전송되고 있지만 왜? 70 %의 시간, 나는 당기고 mtr있거나 어리석은 일이며 지난 15 년간 같은 방식으로 문제를 해결해 왔습니다. 특정 장치에 중점을
두면

1
@Sam : 네트워크 문제 해결에 관한 한 가지 점 : 모든 네트워크에는 "문제"가 있습니다. 핵심은 이러한 문제가 성능 및 / 또는 연결 문제를 일으키는 지 확인하는 것입니다. 모든 네트워크에서 중복 ACK, TCP 재전송, 브로드 캐스트, 잘못된 프로토콜 등을 찾을 수 있습니다. 중복 ACK 및 복제 ACK 전송에 가장 관련된 호스트의 볼륨에 중점을 두어 이것이 실제로 더 큰 문제의 증상인지 또는 네트워크의 자연스러운 작동인지 확인해야합니다. 1,000 개의 패킷 중 5 개의 중복 ACK가 보이면 다시 생각하지 않을 것입니다.
joeqwerty

3

ACK없이 많은 [재 조립 된 PDU의 TCP 세그먼트] 를 많이 보아서 - 선택적인 승인 (일명 SACK) 행동 으로 인해 ACK가 [TCP Dup ACK ...] 로 표시 될 가능성이 높습니다 .

예:

  • 클라이언트가 데이터 부분 (..., 0,1,2,3,4,5,6, ...)을 보냅니다.

  • 서버가 acked (0), 수신 (2,4,3), (5), (6) 수신되지 않음 (1)

위 시나리오에서 서버는 (2-4) 범위, 먼저 (2-5) 범위, (2-6) 범위를 합법적으로 선택할 수 있습니다. "(AB) 범위 ack"패킷을 형성하는 동안 서버는 TCP 헤더에서 마지막으로 잠긴 부분 (0)을 지정해야합니다. Wireshark는 범위 헤더 (SACK)를 [TCP Dup ACK ...]로 표시 합니다. 모든 범위 범위는 TCP 헤더에서 마지막으로 확인 된 부품 값이 있기 때문입니다 (귀하의 경우 Ack = 872619).


1

네트워크 혼잡 문제와 같은 느린 네트워크 성능과 함께 ACK를 복제합니다. 네트워크의 브로드 캐스트 트래픽 양과 속도를 확인하십시오. 멀티 캐스트뿐만 아니라 물리 계층 및 네트워크 계층 브로드 캐스트도 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.