2015-01-13 6 views
0

먼저 여기에서 성취하려고하는 것에 대한 정보. 텍사스 인스트루먼트 보드 EVM6678LE을 사용하고 있으며, 보드와 PC 간의 UDP 전송 속도를 높이려고합니다.MTU가 증가했지만 여전히 큰 UDP 패킷을 보낼 수 없습니다.

netsh> interface> ipv4를 통해 내 PC의 MTU를 15,000으로 늘 렸습니다. 그러나 PC에서 보드를 ping 할 때 "ping 192.168.2.100 -l 10194"까지만 ping 할 수 있습니다. 195 바이트 이후로 ping을 요청하면 요청 시간이 초과됩니다. 이게 내 PC 또는 다른 것의 한계입니까?

누군가가이 문제의 가능한 원인을 파악할 수 있습니까? 전혀 조언이나 제안을 환영합니다. 전송률을 높이는 유일한 방법은 오버 헤드를 줄이는 패킷 크기를 늘리는 것입니다. 그리고 10k에서 약 9.1MB/s의 속도를 가지며 25MB/s를 달성하려고합니다.

감사합니다.

답변

0

PC에서 MTU를 높이면 조각화가 방지되지 않을 수 있습니다. 나는 이것을 정확히 제어하지는 못하지만 MTU에 이르지 않아도 네트워크 카드 나 드라이버가 패킷을 조각 낼 수 있습니다. Wireshark와 같은 스니퍼를 사용하여 패킷 전송 방법을 확인하십시오.

타임 아웃에 대해 보드가 조각난 핑을 거부 할 수 있습니다 (Ping of Death 보호 때문에). 패킷 버퍼가 10kB (10240) 바이트 길이로 더 큰 패킷을받을 수없는 가능성도 있습니다. 또한 수신 엔드 포인트에 일치하는 MTU가 있는지 확인하십시오.

어쨌든 전송 속도를 높이려고하면 잘못된 경로에 있습니다. UDP의 오버 헤드는 8 바이트, IP 20 바이트, 이더넷 18 바이트로 총 46 바이트입니다 (오, 일치, 46 + 10194는 정확히 10240). 1024 MTU에 대한 오버 헤드 46 바이트는 95.5 %입니다. 4096에 대한 46 바이트는 98.9 %, 16384에 대한 46 바이트는 99.7 %입니다. 즉, 1024 ~ 4096 MTU에서 + 3.5 % 전송률을, 4096 ~ 16384에서 + 0.8 %를 얻을 수 있음을 의미합니다. 이득은 단지 우스꽝스럽고 MTU를 일반 기본값 1500으로 설정해야합니다.

어쨌든, MTU를 바꾸는 것만으로 9.1MB/s에서 25MB/s로 전환하는 것은 불가능합니다 (그렇다면 왜 PC 기본값이 높지 않은 것입니까?). 여기서는 패스트 이더넷 (100BASE-T)을 사용하고 있으며 이미 거의 전 대역폭을 전송 중입니다. 더 높은 속도를 얻으려면 기가비트 이더넷 (1000BASE-T)이 있어야합니다. 이는 1000BASE-T를 지원하기 위해 두 하드웨어 엔드 포인트가 모두 필요하다는 것을 의미합니다.

+0

나는 그것이 우스꽝스럽게 보인다는 것을 안다. 나는 그것도 이상하다고 느낀다. 그러나 나는 이사회가 기가비트 이더넷을 지원한다고 말했고 속도를 달성하는 데 아무런 문제가 없어야한다고 말했다. 나는 내 PC에 큰 UDP 패킷을 보내고받는 프로그램을 작성했고, 내가 25-32k 바이트 정도를 보낼 필요가있는 속도를 달성했다. – Cherple

+0

조각난 핑에 관해서는. wireshark를 사용했는데 MTU를 늘리기 전에 조각난 핑 문제가 있었지만 MTU를 15k로 늘린 후 wireshark에서 나에게 잘 들렸습니다. wireshark에 대한 11k 핑 요청을 볼 수 있습니다. 응답이 없습니다. 전혀 돌아 오지 않는다. – Cherple

+0

@Cherple 패킷이 단편화되지 않은 경우 버퍼 크기와 관련이있을 수 있습니다. 보드의 버퍼를 가져 오거나 설정할 수 있는지 확인하십시오. Windows에서는'wmic NIC get Name, Speed'를 사용하여 링크 협상 속도를 볼 수 있습니다. 1.000.000.000이 아니면 하나의 엔드 포인트가 기가비트를 지원하지 않습니다. 또한 MTU가 증가 할 때 상당한 속도 증가를 실제로 측정 했습니까? 그렇다면 UDP 프로그램에 문제가있을 수 있습니다 (크기에 관계없이 매 ms마다 정확히 1 개의 패킷을 보내는 것과 같을 것입니다). – ElderBug