|
Формат Jumbo-кадра?, Где почитать описание |
|
|
|
Oct 26 2011, 20:47
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(Koluchiy @ Oct 26 2011, 13:21)  По стандарту, когда поле "тип/размер" больше 1536 (если не путаю), то поле = тип. Может быть кадр типа Ethernet-II - там тип пакета, а может быть 802.3 - там длина. Типы начинаются ЕМНИП с 0x0800 - IP. На самом деле, когда работаешь напрямую контроллером - длина принятого/отправленого кадра находится в регистрах и контроллеру собственно по барабану что там находится. (У некоторых контроллеров флаг ставится что находится в этом поле - флаг или длина, по приему) Сейчас обычно ходят Ethernet-II. Так что на 802.3 можно просто забить!
|
|
|
|
|
Oct 27 2011, 08:49
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(Koluchiy @ Oct 27 2011, 11:10)  Так всё-таки, что такое Jumbo-кадр? Это кадр с размером выше 1518 байт! Цитата(Koluchiy @ Oct 27 2011, 11:10)  Чему в этом случае равно поле тип/размер кадра? Это зависит от того что внутри кадра. Но реально используется Ethernet II - так что там тип пакета. Цитата(Koluchiy @ Oct 27 2011, 11:10)  Это пакет с нагрузкой любого протокола верхнего уровня (IP например) да!
|
|
|
|
|
Oct 27 2011, 09:09
|
Знающий
   
Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543

|
Чем дальше в лес, тем интереснее. Вот здесь вот: http://en.wikipedia.org/wiki/EtherType написано, что Jumbo - это (только) тип 0x8870 . Еще там есть интересное: The size of the payload of non-standard jumbo frames, typically ~9000 Bytes long, falls within the range used by EtherType; this conflict is resolved by substituting the special EtherType value 0x8870 when a length would otherwise be used.[2] The network stack can replace this special EtherType with the actual length of the packet on receive, or when bridging to non-Ethernet networks like FDDI. Честно говоря, не совсем понял. Типа, пакет передается с 0x8870 в поле тип/длина, и длина пакета = фактической длине? Типа, сколько пришло до окончания кадра, столько пришло...
|
|
|
|
|
Oct 27 2011, 15:44
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(Koluchiy @ Oct 27 2011, 13:09)  Типа, пакет передается с 0x8870 в поле тип/длина, и длина пакета = фактической длине? 0x8870 используется если вы используете IEE802.3/IEE802.2 инкапсуляцию! IMHO на нее можно забить! А если вы используете Ethernet II (RFC894) там стоит тип! Он так и остается для IP - 0x0800. в кадре Ethernet II информации о длине нет!
|
|
|
|
|
Oct 27 2011, 20:06
|
Знающий
   
Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688

|
не надо путать тип кадра и его длину. изначально в ethernet поле следующем за SRC_MAC передавали длину, но потом стали передавать тип данных, а чтобы сохранить обратную совместимость назвали поле length/type. есть весьма конкретный список типов нагрузки ethernet, там 0x0800, 0x0806, и так далее... но договорились что если длинна кадра меньше 0x0400 - то это указатель длины кадра. что касается jumbo - тут настолько все просто что даже не верится. это обычный кадр у которого размер полезной нагрузки может быть до 9000 байт. к примеру вам нужно передать 8192 байта данных по udp (для простоты). так вот если у ваш сетевой адаптер не позволяет передать jumbo кадр (или это опция отключена) то стек IP разбивает ваш кусок данных udp на фрагменты, равные по длине максимальному MTU адаптера, приписывает каждому фрагменту IP-header и отправляет. накладные расходы на IFG, DST_MAC, SRC_MAC, TYPE и 20 байт (еще CRC32надо тоже учитывать) на IP header накладываются на каждый кадр. (их будет 5 по 1514 байт и один 834 байт  без CRC32) Так если бы jumbo поддержка была выключена Стек IP создал бы один пакет размером 8234 байта (без CRC32) который бы отправлен был бы за один раз и его прием не потребовал бы не только сборки 6 фрагментов, но и тупо меньше физического времени (где то на 3%).
|
|
|
|
|
Oct 27 2011, 21:09
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(SFx @ Oct 28 2011, 00:06)  поле следующем за SRC_MAC передавали длину, но потом стали передавать тип данных, а чтобы сохранить обратную совместимость назвали поле length/type. Это не совсем так! Понято что есть древние форматы кадра, которые Novell со своим IPX использовал... Но в современных сетях это два разных формата кадра. 802.3 и Ethernet II, у Ethernet II тип пакета и сразу данные, а у 802.3 после заголовка идет 802.2 LLC/SNAP header. Цитата(SFx @ Oct 28 2011, 00:06)  длинна кадра меньше 0x0400 - то это указатель длины кадра. только 0x600, поэтому для 802.3 jumbo фреймов используется 0x8870 Еще вместо поля length/type может вообще стоять стоят 802.1q таг, а поле length/type идти за ним.
|
|
|
|
|
Oct 28 2011, 04:15
|
Знающий
   
Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543

|
Цитата 0x8870 используется если вы используете IEE802.3/IEE802.2 инкапсуляцию! IMHO на нее можно забить! Я не могу забить, я должен передавать вообще весь трафик, который ко мне приходит. Любого стандартного формата. Цитата что касается jumbo - тут настолько все просто что даже не верится. это обычный кадр у которого размер полезной нагрузки может быть до 9000 байт. То есть, Jumbo - это фрейм Ethernet-II, содержащий пакет верхнего уровня с большой длиной полезной нагрузки. Тогда что такое тип 0x8870?
|
|
|
|
|
Oct 28 2011, 09:21
|
Знающий
   
Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543

|
Цитата но длину надо узнавать у адаптера А откуда узнает длину адаптер?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|