В соответствии с стол здесь, в нем указано, что MTU = 1500 байтов, а часть полезной нагрузки составляет 1500 - 42 байта или 1458 байтов (<- это действительно неправильно!). Теперь, помимо этого, вам нужно добавить заголовки IPv4 и UDP, которые составляют 28 байтов (20 IP + 8 UDP). Таким образом, мое максимальное сообщение приложения составляет 1430 байт! Но, ища это число в Интернете, я вижу вместо этого 1472. Я здесь неправильно делаю этот расчет?
Все, что я хочу узнать, - это максимальное количество сообщений приложения, которое я могу отправить по сети без риска фрагментации. Это определенно не 1500, потому что это включает заголовки кадров. Может кто поможет?
Путаница в том, что PAYLOAD на самом деле может достигать 1500 байт, и это MTU. Так каков же размер полезной нагрузки 1500? Из этой таблицы он может достигать 1542 байта.
Таким образом, максимальное количество сообщений приложения, которое я могу отправить, составляет 1472 (1500 - 20 (ip) - 8 (udp)) при максимальном размере провода 1542. Меня удивляет, как все может быть настолько сложным, когда оно на самом деле простое. И я не понимаю, как кто-то придумал число 1518, если в таблице написано 1542.
Схема в Википедии ужасна. Надеюсь, то, что я собираюсь написать, будет яснее.
Максимум полезная нагрузка в Ethernet 802.3 - 1500 байт.
Это данные, которые вы пытаетесь отправить по сети (и то, что имеет в виду MTU).
[payload]
<- 1500 байт
Полезная нагрузка инкапсулирована в Фрейм Ethernet (который добавляет MAC-адрес источника / назначения, тег VLAN, длину и контрольную сумму CRC. Это всего 22 байта дополнительного "материала"
[SRC+DST+VLAN+LENGTH+[payload]+CRC]
<- 1522 байта
Кадр передается по проводу - до того, как ваша карта Ethernet сделает это, она в основном встает и очень громко кричит, чтобы убедиться, что никто другой не использует провод (CSMA / CD) - Это Преамбула и Разделитель начала кадра (SFD) - дополнительные 8 байт, теперь у нас есть:
[Preamble+SFD+[Ethernet Frame]]
<- 1530 байт
Наконец, когда приемопередатчик Ethernet завершает отправку кадра, 802.3 требует передать 12 байтов тишины («Межкадровый промежуток»), прежде чем ему будет разрешено отправить следующий кадр.
[Preamble+SFD+[Ethernet Frame]+Silence]
<- 1542 байта, переданных по сети.
Преамбула, SFD и межкадровый интервал не считаются частью кадра. Они являются структурой поддержки самого протокола Ethernet.
MTU применяется к полезной нагрузке - это самая большая единица данных, которую вы можете втиснуть в пакет. Таким образом, пакет Ethernet с MTU 1500 байтов фактически будет фреймом 1522 байта и 1542 байта на проводе (при условии наличия тега vLAN).
Итак, ответ на ваш вопрос - Какой самый большой пакет я могу отправить по Ethernet 802.3 без фрагментации? - является 1500 байт данных полезной нагрузки.
ТЕМ НЕ МЕНИЕ уровень Ethernet не может быть вашим ограничивающим фактором. Чтобы узнать, не ограничивает ли что-то время MTU меньше 1500 байт данных полезной нагрузки, используйте одно из следующих действий:
ping hostname -f -l sizeofdata
(техника, о которой упоминал Джон К.)ping -D -s sizeofdata hostname
ping -M do -s sizeofdata hostname
Наибольшее значение sizeofdata
что работает - это MTU (по конкретному пути, по которому идут ваши данные).
Это зависит от количества данных, которые вы помещаете во фрейм. Если вы поместите 1500 байт данных во фрейм, ваш общий размер фрейма будет 1518 байт. Имея 1472 байта данных, вы получите общий размер кадра 1500 ..
http://en.wikipedia.org/wiki/Ethernet_frame
При этом, если вы действительно заинтересованы в тестировании фрагментации, хороший способ проверить это - использовать старый добрый ping с несколькими флагами:
ping имя хоста -f -l sizeofdata
Флаг -f приведет к сбою проверки связи, если пакет фрагментирован. Ключевым моментом здесь является то, что «sizeofdata» - это объем данных, которые вы можете поместить в сообщение без фрагментации, поэтому, если вы отправляете полезную нагрузку 1500, вы начнете фрагментировать, когда вы превысите 1500 байт. Однако уменьшите это значение до 1472 (1500 - 18 байт служебных данных), и вы увидите, что эхо-запросы проходят.
Для базового кадра Ethernet_II размер кадра составляет 1518 байтов (по сети или вне ее). Он состоит из 6 байтов для каждого адреса назначения и источника, 2 байтов для поля типа от 46 до 1500 байтов для полезной нагрузки (в вашем случае всего IP-пакета с его IP-заголовком и заголовком UDP) и 4 байта для ФТС. В дополнение к этому существует ограничение на размер кадра (64 байта). Вот почему диапазон составляет от 46 байтов (добавьте это к двум адресам, типу и FCS, и вы получите 64 байта - 46 + 6 + 6 + 2 + 4 = 64).
Если кадр находится в сети, которая поддерживает несколько vlan, и вам нужно пометить кадр с помощью тега vlan, то перед полем типа добавляется одно дополнительное поле. Это 4 байта. Теперь это означает, что диапазон размеров полезной нагрузки может быть уменьшен на 4 байта в нижней части и все еще иметь как минимум 64 байта. Следовательно, 42. (Итак, 42 + 6 + 6 + 2 + 4 + 4 для тега vlan = 64)
Таким образом, когда диапазон записан 1500-42, это не означает 1500 минус 42, это означает, что допустимы любые значения от 1500 до 42 байтов. По сети этот тегированный кадр может иметь размер 1522 байта (если используется только один тег, или 1526, если используются два тега). Ничто из этого не объясняет число 1542.
Чтобы получить это число, вам нужно подумать о том, как кадр может быть отправлен по Ethernet. В локальной сети Ethernet нет часов, поэтому передатчик кадра отправляет серию единиц и нулей для установки часов. Это называется преамбулой. Не каждый слушатель «услышит» всю преамбулу, но большинству следует услышать какую-то ее часть. Чтобы сигнализировать о конце преамбулы, один из последних 8 отправленных битов переворачивается, так что вместо 10101010 он становится 10101011. Этот байт называется разделителем начала кадра (SDF). Это технически бесполезно для захвата по сети, поэтому 7 байтов преамбулы и 1-байтовый SDF обычно не считаются, но если бы они были нашим исходным 1518, теперь было бы 1526. Все еще не 1542 ..
После отправки кадра на проводе устанавливается принудительное молчание, которое называется межкадровым интервалом. Это эквивалентно передаче 12 байтов. Это также не считается или захватывается, но если бы это было так, мы получили бы 1538 байт. Единственный способ перейти к 1542 из 1538 - сказать, что фрейм помечен (т.е. он действительно содержит 4-байтовый тег плана). Уф, наконец-то 1542 год.
Все дело в терминологии. Стандартный кадр занимает 1518 байт на проводе (для любого устройства захвата). Тегированный кадр (одиночный тег) занимает 1522 байта на проводе. Они занимают 1538 байтов или 1542 байта пространства передачи на проводе.
Надеюсь, что это поможет прояснить ...
нет, вы хотите, чтобы произошла фрагментация, поэтому вы получаете пакет, который нужно фрагментировать, но df set принимает это как это двухстороннее шоссе с целой кучей полуфабрикатов против того же шоссе с целой кучей маленьких умных автомобилей, которые оба собираются те же полуфабрикаты пункта назначения несут больше полезной нагрузки, но они медленнее и могут перегружать легкие автомобили меньшего размера перевозят меньше, но перемещаются быстрее MSS - это не то же самое, что MTU