>  기사  >  운영 및 유지보수  >  iPerf를 사용하여 UDP 패킷 손실을 테스트하고 문제를 해결하는 방법

iPerf를 사용하여 UDP 패킷 손실을 테스트하고 문제를 해결하는 방법

坏嘻嘻
坏嘻嘻원래의
2018-09-28 15:37:168836검색

이 기사의 내용은 iPerf를 사용하여 UDP 패킷 손실 문제를 테스트하고 해결하는 방법에 대한 것입니다. 필요한 친구가 참고할 수 있기를 바랍니다.

iPerf를 사용하여 UDP 패킷 손실 문제 테스트 및 해결

현상 설명

Express 채널을 사용하여 동일한 지역에 있는 두 개의 VPC 네트워크 유형 ECS 인스턴스를 연결한 후 iPerf를 사용하여 두 인스턴스 UDP를 테스트합니다. 네트워크 간 패킷 손실률을 살펴보면, 테스트 대역폭이 50Mbps 이상에 도달할 때 패킷 손실이 발생했으며, 대역폭이 증가할수록 패킷 손실률이 증가하는 경향을 보였다. 아래와 같이

iPerf를 사용하여 UDP 패킷 손실을 테스트하고 문제를 해결하는 방법

Problem Analysis

두 네트워크 유형 ECS 인스턴스의 프라이빗 IP가 VPC ECS A(192.168.104.235) 및 ECS B(10.182.83.13)라고 가정하고 Netcat( NC) UDP 데이터 패킷을 모니터링하고 전송합니다. 네트워크 유형의 ECS 인스턴스 A와 인스턴스 B 간의 통신 링크 다이어그램은 다음과 같습니다.

iPerf를 사용하여 UDP 패킷 손실을 테스트하고 문제를 해결하는 방법

데이터 흐름 방향은 다음과 같습니다.

ECS A(192.168.104.235)-> NC 1(100.105.59.3)-> VGW(10.141.166.253)-> NC 2(100.105.59.9)-> ECS B(10.182.83.13)

링크 문제를 해결하고 분석해야 합니다. 손실을 알아내기 위해 패키지의 최종 이유입니다.

Solution

참고: 원본 Netcat(예: NC 1)과 대상 Netcat(예: NC 2) 간의 이전 통신만 볼 수 있으므로 패킷 캡처 및 문제 해결 중에 오해를 피해야 합니다. 무작위로 Netcat(NC)이라고 판단하여 패킷 간의 직접 통신이 끊어집니다.

문제 해결 시 원본 끝에서 캡처된 eth0 패킷이 VGW로 전송되지만 대상 끝에서 패킷을 캡처할 때는 다음 예와 같이 셸이 대상 NC 2 IP를 캡슐화하는 것을 발견합니다.

 [Time ] 17:32:07.130844   Point: `input `
 [ETHER] 24:4c:07:33:0e:02 -> 00:04:37:28:00:65, eth_type: 0x0800
 [IPv4 ] 100.105.59.3 -> 10.141.166.253
 proto: 17, ver: 04, ihl: 05, len: 1534, ident: 59824,R: 0, DF: 1, MF: 0, offset: 0, ttl: 60, chksum: 0xfe47
 [UDP  ] sport: 46703, dport: 250, size: 1514, chksum: 0x0000
 [VxLan] debug_flag: 0, vlan_tag: 0, payload_type: 0, version: 1, tunnel_id: 1878597, tos: 0, tof: 0
 [IPv4 ] 192.168.104.235 -> 10.182.83.13
 proto: 17, ver: 04, ihl: 05, len: 1498, ident: 55469,R: 0, DF: 1, MF: 0, offset: 0, ttl: 64, chksum: 0xd50e
 [UDP  ] sport: 36687, dport: 5001, size: 1478, chksum: 0xa0aa
 [Time ] 17:32:07.130854   Point: `output`
 [ETHER] 24:4c:07:33:0e:02 -> 00:04:37:28:00:65, eth_type: 0x0800
 [IPv4 ] 100.105.59.3 -> 100.105.59.9
 proto: 17, ver: 04, ihl: 05, len: 1534, ident: 59824,R: 0, DF: 1, MF: 0, offset: 0, ttl: 60, chksum: 0x0000
 [UDP  ] sport: 46703, dport: 250, size: 1514, chksum: 0x0000
 [VxLan] debug_flag: 0, vlan_tag: 0, payload_type: 0, version: 1, tunnel_id: 2125861, tos: 0, tof: 0
 [IPv4 ] 192.168.104.235 -> 10.182.83.13
 proto: 17, ver: 04, ihl: 05, len: 1498, ident: 55469,R: 0, DF: 1, MF: 0, offset: 0, ttl: 64, chksum: 0xd50e
 [UDP  ] sport: 36687, dport: 5001, size: 1478, chksum: 0xa0aa

데이터 패킷이 VGW를 통과한 것을 확인한 후 패킷 캡처 정보 카운트를 시작합니다.

ECS A는 iPerf를 통해 UDP 트래픽을 수신합니다: iperf -c 10.182.83.13 -u -b 600m

ECS B는 iPerf를 통해 수신합니다: iperf -u -s

인스턴스 내부의 패킷을 캡처합니다.

ECS A:sudo tcpdump -w ~/client.pcap -n -i eth0 src host 192.168.104.25 and src port 1234
ECS B:sudo tcpdump -w ~/server.pcap -n -i eth0 src host 192.168.104.25 and src port 1234

두 개의 NC eth0에서 패킷을 포착했습니다.

NC 1:sudo houyi-tcpdump -w /apsara/i-6we6pnh19n2q7srkgomd.pcap -nnK -i eth0
 udp and src inner_port 1234 and dst inner_host 10.182.83.13
NC 2:sudo houyi-tcpdump -B 4096 -w /apsara/i-6we53i9h3ducbju5rmuw.pap -nn -i eth0 
udp -K and src inner_host 192.168.104.235 and src inner_port 1234

ASW 및 LSW에 스트림 시스템 배포.

100.105.59.3:46728 -> 10.141.166.253:250

참고: 대상 패킷 셸은 대상 NC 1 IP를 자동으로 캡슐화하므로 VGW 측 데이터 패킷의 메시지 형식은 100.105.59.3:46728 ->

패킷 캡처 결과를 기반으로 분석합니다.

ECS A 패킷 손실/전송: 171/510203

NC 1 eth0 패킷 전송: 510204

ASW 및 LSW 흐름 통계 아웃바운드 패킷: 510204

NC 2 eth0 패킷 수신: 510204

ECS B 패킷 수신: 5 10 204 ,커널 2162에 의해 삭제된 507442

위 분석에서는 인스턴스 프로토콜 스택에서 패킷 손실을 찾습니다. 인스턴스의 내부 UDP 버퍼 크기를 조정하여 네트워크 스택(스택)을 조정합니다. 기본 UDF 버퍼 크기는 212992(208KB)입니다. 2097152(2MB)로 조정할 수 있습니다.

/proc/sys/net/core/rmem_default #默认的接收数据包内存大小
/proc/sys/net/core/rmem_max #最大的接收数据包内存大小

조정 후 UDP 패킷 손실을 테스트합니다.

iPerf를 사용하여 UDP 패킷 손실을 테스트하고 문제를 해결하는 방법

위 내용은 iPerf를 사용하여 UDP 패킷 손실을 테스트하고 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.