This is an old revision of the document!


Увеличение предельного MTU в Windows для чипа Realtek 8111B

Впервые опубликовано на форуме 2010-04-21, на сайте - 2011-03-06 ===== Дано ===== Имеем следующие сетевые карточки (встроенными в материнку GA-MA790FX): * 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01) * 03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01) ===== Ситуация в GNU/Linux ===== В Debian GNU/Linux с ядром версии 2.6.28.9: <code>rm@alpha:~$ sudo ifconfig eth0 mtu 7200 rm@alpha:~$ sudo ifconfig eth0 mtu 7201 SIOCSIFMTU: Invalid argument</code> Успешно смогли выставить MTU в 7200. Нас пингуют (без фрагментации пакетов) успешно: <code>rm@haru:~$ ping -M do -s 7172 alpha.i4 PING alpha.i4 (192.168.0.1) 7172(7200) bytes of data. 7180 bytes from alpha.i4 (192.168.0.1): icmp_seq=1 ttl=64 time=0.990 ms</code> ===== Ситуация в Windows ===== В Windows 7, с новейшей версией драйверов. Ставим в свойствах сетевой карты “7KB MTU”. Нам говорят мол, “угу”, всё нормально. По факту, максимальный размер кадра, которым пингуется этот компьютер будучи запущенным под Windows - “круглое число” MTU 4082. На байт больше - и всё, пакеты теряются. Налицо искусственное ограничение в Windows-драйвере. ==== Исправление ==== Изучение .inf-файла к драйверу показало, что для данных девайсов VEN_10EC&DEV_8168&SUBSYS_E0001458&REV_01 нынешними версиями драйверов в реестр прописываются значения Jumbo Packets до 4096 байт, а то, что у меня там была возможность выбрать 7168 - это, видимо, осталось после установки старых версий. Однако это не страшно, берём и добавляем нужное значение вручную: Дальше - интереснее. Нагугленный где-то Realtek_Windows_Vista_Driver_Adv_Properties.htm сообщает самый главный секрет: <code> 2KB MTU : MTU is 2*1024 bytes 3KB MTU : MTU is 3*1024 bytes 4KB MTU : MTU is 4*1024 bytes 5KB MTU : MTU is 5*1024 bytes 6KB MTU : MTU is 6*1024 bytes 7KB MTU : MTU is 7*1024 bytes <…> Althrough, the Advanced page has Disable, 2KB MTU, 3KB MTU, … 7KB MTU. Driver will not enable the option which exceeds the NIC hardware limitation. If exceeds, driver automatically decreases the length to a proper value.</code> Прогоняем sys-файл драйвера через дизассемблер (objdump). В получившемся листинге находим таблицу соответствий различных чипов и размеров кадра, на которые по мнению драйвера данные чипы способны. Ориентир для поиска - hex-значения 0x2400 (9 КБ), 0x1c00 (7 КБ) и 0x1000 (4 КБ), находящиеся в непосредственной близости друг от друга (в пределах пары экранов листинга). Находим, затем меняем ровно один байт: Устанавливаем драйвер, подписываем с помощью полезной программы dseo13b.exe. После перезагрузки проверяем - размер кадра до (7154+14=)7168 байт отлично выставляется и без всяких проблем работает! :) P.S. Если в сети есть GNU/Linux-машины, для корректного общения с этой виндовой на них нужно сделать ifconfig eth0 mtu 7154. ===== Ссылки ===== * Обсуждение на форуме iXBT


r8169-windows-mtu.1299429779.txt · Last modified: 2011-03-06 16:42 UTC by rm