Обнаружение MTU пути в C#

Как найти путь MTU между соединениями? Мне нужно это, чтобы определить размер пакета моего UDP-соединения. Есть ли в .Net такие вещи, как Path MTU Discovery?


person Syaiful Nizam Yahya    schedule 10.11.2010    source источник


Ответы (3)


Взято из здесь:

winsock не поддерживает сообщение об обнаруженном MTU, хотя другие стеки TCP/IP поддерживают (например, AIX через параметр сокета IP_GETPMTU). Поскольку winsock не может сообщить об этом, .NET не может предоставить API (который должен быть поверх winsock).

person bitbonk    schedule 10.11.2010

Я нашел способ (обходной путь), чтобы найти путь mtu для udp на С#. просто попробуйте отправить пакет udp с параметром udpclient.dontfragment, установленным в true. если он выдает исключение, уменьшайте размер пакета до тех пор, пока исключение не будет выброшено. если кто-то хотел бы увидеть какой-то образец, просто спросите.

person Syaiful Nizam Yahya    schedule 11.11.2010
comment
Меньший MTU может быть вдоль пути. Таким образом, вы не получаете исключение, пакет отправляется, но не принимается. Вы должны отправить некоторые размеры пакетов и сделать другую конечную точку, чтобы отправить вам несколько пакетов ACK обратно, чтобы выполнить обнаружение MTU. - person xmedeko; 18.10.2018
comment
Любое устройство на пути, чей MTU меньше, чем пакет, будет отбрасывать такие пакеты и отправлять обратно сообщение ICMP Destination Unreachable (Datagram Too Big), содержащее его MTU. en.wikipedia.org/wiki/ - person aminhotob; 30.10.2018

Вы пробовали использовать libpcap с C#? Существует библиотека SharpPCap, которую можно использовать для поиска PMTU.

person isyi    schedule 06.02.2012
comment
Кроме того, могу ли я получить ваш пример кода для использования Udpclient для определения Path MTU без libpcap? - person isyi; 07.02.2012