Название статьи вдохновлено недавним материалом Сергея Долина об улучшении ретро-компьютера, что называется, паяльником. Недавно мне поступил заказ от читателя на апгрейд ОЗУ в легендарном карманном компьютере Dell Axim X51v, за выполнение которого я получу крутейший ноутбук 1998 года. Конечно же я не смог отказаться от такого предложения и подготовил для вас подробную статью с предысторией апгрейда памяти на КПК, описанием процесса снятия и у
становки BGA-чипов, замене концевого переключателя на перемычку, а также ремонта рычажка Hold, из-за которого некоторые Axim'ы теряли работоспособность при общей исправности железа девайса. Жду вас под катом!
❯ Введение
Апгрейд девайсов своими руками — это всегда круто и интересно. Недавно хабровчанин @dliny jвыпустил две отличные статьи об апгрейде 386'ой материнки с установкой 486'ого процессора на неиспользуемую площадку для заводского апгрейда материнской платы и даже заставил работать всю систему относительно стабильно!
Однако апгрейд мобильных компьютеров тема немного иная, поскольку из-за повсеместного использования BGA-чипов и относительно тесной компоновке, далеко не каждый гик берется за аппаратный апгрейд своего девайса, боясь его случайно повредить. Цель этой статьи наглядно показать, что перепаивание чипов памяти и апгрейд ретро-КПК — не сложнее, чем заменить плашку памяти в стареньком ноутбуке и с этим справится любой человек при наличии паяльной станции и небольшой практики!
Сегодняшним героем у нас выступит легендарный КПК Dell Axim X51v, с которым наверняка знакомы многие мои читатели. Девайс, вышедший в 2005 году, привлекал очень шустрым чипсетом Intel PXA270, работающим на частоте 624МГц, наличием дискретного GPU Intel 2700G в отдельном чипе (!) с графическим ядром PowerVR MBX и набором видеодекодеров Intel для просмотра несжатого видео, а также... всего 64Мб ОЗУ! Многие владельцы устройства жаловались на малый объём памяти, но со временем некоторые сервисные центры (один из самых известных в свое время — pdacenter) даже приловчились оказывать услугу по её апгрейду в коммуникаторах и КПК до тех самых 128Мб!
Полгода назад я уже писал статью об апгрейде легендарного коммуникатора HTC Magician (который, к слову, участвовал ещё в моих статьях о написании 3D-игры под Windows Mobile с нуля!). После этой статьи ко мне несколько раз обращались люди с просьбой проапгрейдить им девайсы за деньги, даже при условии того что они сами закажут чипы памяти. Обычно я не берусь за заказы, поскольку это всё равно довольно рискованный процес (на некоторых девайсах нужно искать страп для активации всей ОЗУ), но в этот раз меня переубедили очень весомым аргументом. Когда я отказался от работы за деньги, мне предложили тяжелую артиллерию, а именно — топовый ноутбук Compaq Armada 7800 на Pentium II с дискретным GPU S3 ViRGE (о котором я тоже писал статью)!!! Тут я просто не смог не согласится: ноутбук из 90-х, да еще и с 3D-видеочипом, который стоил 5.000$ и который можно считать игровым? Я решил рискнуть...
В свое время эта процедура стоила около 2-3 тысяч рублей. В 2005-2007 году это были большие деньги, а сейчас апгрейд КПК можно провести за 400 рублей: чипы памяти продаются и сейчас и стоят по 200 рублей за штучку. Давайте же попробуем проапгрейдить наш девайс!
❯ Апгрейдим
Начинаем с разборки устройства. Сделать это несложно: откручиваем 4 винта с обратной стороны устройства и пластиковой картой (или ногтями) поддеваем фронтальную часть корпуса. Затем выдавливаем плату с дисплеем из задней части корпуса, снимаем дисплейный модуль и перед нами оказывается разобранный девайс:
Необходимые нам чипы памяти находятся под защитным экраном вместе с процессором и флэш-памятью. Сам металлический экран съёмный, однако перекладина под ним помешает установке чипов памяти: поэтому аккуратно срезаем её хирургическими ножницами. Полностью выпаивать защитный экран не нужно.
Я срезал перекладину ещё до фото :)
Теперь нам необходимо выпаять старые чипы памяти. Для этого наливаем немного флюса под «пузо» чипов, включаем фен на ~330 попугаев (у меня бюджетный фен, который я ещё не откалибровал — так что термопрофиль сомнительный), и принимаемся греть банки на протяжении около полутора минут. Текстолит хоть и толстый, но теплоемкость не очень высокая, так что банки можно снять и без нижнего подогрева. Как только чип стал свободно покачиваться — ждём ещё немного времени и снимаем его пинцетом. Учтите что BGA-чипы крепятся за счёт поверхностного натяжения, поэтому старый чип будет пытаться "уехать" на своё место обратно при попытке снятия, так что придется приложить небольшое усилие, однако очень важно догреть чип, иначе можно посрывать пятаки и потом под микроскопом лепить «улитки» :)
Не забудьте сделать фотографию обвязки (мелочухи), дабы иметь возможность её восстановить если случайно посдуваете.
Затем нам необходимо очистить площадки под чипы от остатков старых шаров. Для этого добавляем чуть флюса, берём паяльник и медную оплётку и проходимся по пинам оплёткой, собирая излишки припоя и выравнивая посадочную площадку. Шары здесь большие, так что можно обойтись без оплётки и просто пособирать припой паяльником, но технологию лучше соблюдать.
Новые чипы с завода уже имеют накатанные шары и их можно ставить «как есть», хотя некоторые мастера всё равно перекатывают чипы, поскольку на шарах могут образоваться окислы. Процесс установки новых чипов до безобразия прост: наливаем немного флюса на посадочную площадку, примерно центруем банку памяти на этой самой площадке и греем её феном на протяжении всё тех же полутора минут. При этом чип сам встанет куда нужно благодаря поверхностному натяжению, хотя его можно чуточку подровнять пинцетом, если стоит криво. Обратите внимание на флюс: если налить его слишком много, то чип может «уехать», если флюс кипящий, то чип будет «прыгать» при установке и соединение может оказаться некачественным. Я лично ставлю BGA «бодягой» под видом NC559 с Озона, вроде норм.
Установленные чипы памяти. В процессе работы пришлось один чип перекатать — случайно поставил не по ключу :)
Наконец-то чипы памяти установлены. Теперь смываем флюс с помощью FluxOff'а, устанавливаем обратно защитный экран и подсобираем девайс, дабы посмотреть что у нас получилось. И да, КПК запустился нормально и увидел все 128 мегабайт оперативной памяти! В случае с коммуникатором HTC, о котором я писал в первой статье, необходимо было установить ещё специальный страп — резистор 0.33Ом на линию CS1, иначе девайс не видел всей ОЗУ, так что если кто-то будет проделывать такой же апгрейд, имейте это ввиду.
Но это ещё не всё! Я ж обещал, что апгрейдить девайс будем и паяльником :) У многих КПК есть болячка в виде концевого выключателя на крышке отсека аккумулятора. К сожалению, со временем он ломается, а в случае X51v — ещё и служит кнопкой включения для устройства, поэтому его необходимо поменять на перемычку. Мой подписчик уже заменил концевой выключатель на соплю припоя, которую я заменил на более симпатичную и надежную перемычку:
А также перемычку имеет смысл установить вместо переключателя Hold — конкретно на Axim X51v он иногда выходит из строя, из-за чего девайсом становится невозможно пользоватся.
На этом наш апгрейд завершён. Собираем девайс и смотрим, что же он умеет!
❯ Смотрим на девайс
Windows Mobile славилась своей оптимизацией, система очень бодро бегала даже на 32Мб ОЗУ. Большинство приложений легко помещалось в памяти благодаря тому, что потребляли пару сотен или десятков килобайт, и в отличии от современных мобильных систем, WinMobile никогда не управляла жизненным циклом приложения сама, поэтому в системе была настоящая многозадачность. Приложения закрывались только тогда, когда этого захотел пользователь, благодаря чему была необходимость иногда следить за диспетчером задач.
Но если 64Мб было достаточно для всего, то зачем нужен был апгрейд до 128Мб? Все дело, конечно же, в играх! Зачастую владельцам КПК хотелось запустить несколько тяжелых приложений и иметь возможность одновременно играть музыку в фоне, сидеть в аське и играть в Pocket F.A.L.L.O.U.T. Тут и пригождался апгрейд по памяти, ведь игра влегкую могла скушать и 20 и 30 мегабайт!
Особенно это актуально в случае с Axim X51v, ведь у устройства был дискретный GPU, для которого отдельно разрабатывались 3D-игры, которые по уровню графики были не хуже чем у SEGA Dreamcast! А секрет прост, ведь PowerVR MBX, который используется в качестве GPU в Intel 2700G — это прямой потомок GPU из Dreamcast!
Графика не сильно хуже PSP!
Кроме того, в Axim X51v использовался здоровенный дисплей с разрешением VGA (640x480), из-за чего девайс потреблял несколько больше ОЗУ на графические ресурсы системы. На таком смотреть кино или сериал одно удовольствие!
Ну и в целом девайс работал значительно резвее с 128 мегабайтами оперативной памяти. А для чего я использую свой личный Axim X51v? Конечно же для разработки 3D-игры под его GPU с нуля! Именно за это я просто обожаю этот девайс!
❯ Заключение
Вот такой ретро-материал об апгрейде крутейшего КПК 2005 года у нас с вами сегодня получился. Надеюсь, вам было интересно! Моддинг ретро-девайсов это всегда занимательно и интересно не только из-за самого факта апгрейда, но и из-за некоторой неизведанности: как @dlinyjне знал, что будет, если впаять в материнскую плату второй процессор, так и я не знал, что будет, если установить банки памяти без поиска страпов на неизвестный мне КПК :)
Подписывайтесь на мой Telegram-канал, если вам интересна тематика программирования, моддинга и подручного ремонта различных девайсов, а если вам интересны мои видео о ретро-девайсах, то подписывайтесь на мой YouTube и паблик ВК.
Значит ли для вас что-то Axim X51v?
Понравился материал с апгрейдом «паяльником»?
Кстати, если у кого-то из читателей есть ненужные устройства (в том числе с косяками) или дешевые китайские подделки на айфоны/айпады/макбуки и другие брендовые девайсы будучи нерабочими, тормозящими, или окирпиченными и вам не хотелось бы выкидывать их на свалку, а наоборот, отдать их в хорошие руки и увидеть про них статью — пишите мне в Telegram или в комментах! Готов в том числе и купить их. Особенно ищу донора дисплея на китайскую реплику iPhone 11 Pro Max: мой ударник, контроллер дисплея калится и изображения нет :( Было бы интересно поколупать и КПК самого начала нулевых годов (PPC2002, а то и WinCE или PalmOS) — пишите, если таковые есть.
Примеры девайсов
А ещё я держу все свои мобилы в одной корзине при себе (в смысле, все проекты у одного облачного провайдера) — Timeweb. Потому нагло рекомендую то, чем пользуюсь сам — вэлкам:
В этом посте поговорим про фрагментацию пакетов, разберемся как она работает и почему она не выгодна никому: ни хостам, ни маршрутизатором, сначала будет немного теории, а затем воспользуемся генератором пакетов и посмотрим дампы.
MTU параметр настраиваемый и не факт, что на всех линка будет настроен MTU, который будет пропускать пакеты, генерируемые отправителем.
Это некие вводные ограничения, которые нам дает Ethernet. IPv4 к этим ограничением добавляет то, что узел получатель должен гарантировать всем своим соседям, что он может принять IP-пакет размером 576 байт, а узел в IPv6 должен уметь обрабатывать пакеты размером 1280 байт.
С учетом вышеописанного легко можно представить две ситуации, в которых может начать работать фрагментация :
Хосты согласовали обмен пакетами 1500 байт (на самом деле они согласовали TCP или SCTP MSS), но на сети есть линк или линки, где MTU меньше 1500 байт.
Хосты генерируют пакеты размером более 1500 байт, а на транзитных узлах MTU равен 1500 байт.
Эти ситуации можно решить за счет хостов, им просто нужно генерировать такие пакеты, которые пролезут через любой линк на сети, проблема в том, что хосты не знают MTU на всей сети и обычно надеются, что MTU всей сети не меньше, чем MTU их интерфейсов, которые в эту сеть включены, но есть и другие варианты решения:
Транзитное устройство может уведомить отправителя о том, что тот генерирует слишком большие пакеты и, если отправителю не запрещено, то он может начать генерировать пакеты меньшего размера.
Транзитный узел может не уведомлять отправителя о том, что тот генерирует большие пакеты, а начать самостоятельно разбивать их на такие пакеты, которые гарантированно пройдут через линк. Это и есть фрагментация.
Слишком большие пакеты могут просто уничтожаться, но нам этот вариант не очень интересен.
Стоит понимать, что фрагментация пакетов явление вынужденное и не очень желательное, единственное достоинство фрагментации заключается в следующем: если приложения не заботятся о размерах передаваемых данных, то это делает IP, чтобы хоть каким-то образом, но связь между отправителем и получателем поддерживалась.
Минусов у фрагментации много, вот три основных на мой взгляд:
При потере одного из фрагментов можно считать, что теряется весь исходный пакет.
Фрагментация повышает нагрузку на устройства сети.
В некоторых случаях при сборке фрагментированного пакет может быть нарушена целостность передаваемых данных.
В IP заголовке имеется четыре поля, которые так или иначе используются при фрагментации.
Размер пакет (Total Lenght). В этом поле хранится полный размер пакета в байтах, т.е. заголовка плюс поля данных.
Идентификатор (Identification). Это поле помогает принимающей стороне собрать исходный пакет из полученных фрагментов, у фрагментов, которые являются частями одного исходного пакета, значение этого поля будет одинаковым.
Флаги (Flags). Под каждый флаг выделен один бит, нумерация начинается с нуля. Нулевой бит(нулевой флаг) нам не интересен, первый бит называется DF или do not fragment, если значение этого бита равно единицы, то пакет фрагментировать запрещено, если возникает ситуация когда у пакета DF = 1 и размер больше допустимого MTU, такой пакет уничтожается(некоторые устройства игнорируют бит DF и всё равно выполняют фрагментацию). Второй флаг называется MF или more fragments, он используется для того, чтобы обозначить конец последовательности фрагментированных пакетов, пока MF = 1 узел получатель будет ожидать новые фрагменты, как только придет пакет с MF = 0, получатель поймет, что последовательность фрагментированных пакетов закончилась.
Смещение фрагмента (Fragment Offset). IP не гарантирует того, что получатель будет получать пакеты в той же последовательности, в которой их генерировал отправитель. В случаях, когда фрагментации нет, проблема собрать всё в нужной последовательности это проблема вышестоящего процесса или протокола, но если получатель принял фрагментированную последовательность, задача собрать исходных пакет из фрагментов ложится на IP процесс, поле смещение помогает понять в какой последовательности надо собирать исходный пакет. Данное поле хранит численное значение, одна единица этого числа равна восьми байтам.
Вот так эти поля выглядят в дампе Wireshark.
Поля фрагментированного пакета:Total Length, Identification, Flags, Fragment Offset в дампе Wireshark
Структура IP-пакета
Цвета на двух картинках выше соответствуют.
Смещение фрагмента в IP
Стоит отдельно остановиться на поле Fragment Offset, его размер 13 бит, то есть максимальное значение этого поля 8191, но весь вопрос в том, какие единицы измерения используются для смещения фрагмента, если в этом поле стоит значение 1, то это означает, что сдвиг надо делать на 8 байт, то есть максимально возможное смещение 65528 байт.
Проще всего разобраться с вопросом смещения можно будет на примере, допустим, у нас есть два хоста, соединенных каналом с MTU 1500 байт, но хосты хотят обмениваться пакетами размером 5940 байт, в этом случае будет включаться механизм фрагментации, и каждый исходный пакет будет разделен на четыре пакета по 1500 байт, чтобы они гарантированно прошли через канал, смещение первого фрагментированного пакета будет равно нулю, у второго пакета оно уже будет 1480 байт, третий пакет будет иметь смещение 2960 и последний пакет будет со смещением 4440 байт, все описанное выше представлено на рисунке.
Пример работы фрагментации IP пакетов
Для удобства я пересчитывал единицы измерения смещения в байты.
Из примера понятно, что фрагментация это лишняя работа не только для транзитных узлов, которые ее выполняют, но и для хостов. Также в примере виден смысл поля ID и флага MF, по ним получатель понимает, что это не конец фрагментированной последовательности, но получатель заранее не знает размер исходного пакета.
В качестве проверки и подтверждения сказанного ранее я сделал пинг пакетам с размером, как в примере выше, и снял дамп, важно, чтобы MTU линков был равен 1500 байт чтобы получилось как в примере.
Пример фрагментированных пакетов в дампе Wireshark
Интересные столбцы выделены цветами:
голубой = размер пакета
зеленый = наличие флага MF
красный = смещение
оранжевый = идентификатор
Строки выделять не стал, поскольку розовая строка здесь означает конец фрагментированной последовательности. Плюс важно учитывать, что на этом скрине в столбце Offset значение смещения не в байтах.
Установка iPerf3 на Linux и в Windows
Перейдем к практике, тренироваться будем на той же лабе, которая использовалась в посте про MTU. Вот топология сети:
Топология сети лабы
Далее будет краткий гайд по установке и использованию iPerf в Linux и Windows, кому этот момент очевиден, можно смело пропускать.
Iperf представляет собой простой кросс-платформенный генератор трафика, у него есть две версии: вторая и третья, второй никогда не пользовался и чем она отличается от третьей не знаю. Iperf является клиент-серверным приложением.
Iperf это утилита командной строки в Windows, установка его здесь довольная простая, скачиваете архив по этой ссылке, выбирайте самую свежую версию, она внизу. Внутри полученного архива будет папка с именем iperf+номер_версии_разрядность_ОС:
Архив с iPerf3
Если хотите, можете скинуть эту папку в любое удобное вам место и на этом установка будет завершена. Я же создам в корне диска C папку с именем iperf3 и скопирую в него содержимое папки "iperf3.17_64.", так будет проще:
Установленный iPerf3
При желании можете добавить путь к файлу iperf3.exe в переменную PATH, тогда для запуска программы не придется каждый раз в командной строке переходить по пути C:\iperf3 чтобы запустить программу.
Установку в Linux буду показывать на примере Debian 10, пишем две команды:
sudo apt update&&upgrade -y
sudo apt install iperf3
В других дистрибутивах команды могут отличаться, в команде на установку iperf тройку после iperf пишем обязательно, иначе установится вторая версия.
Примечание
В репозитории дистрибутива, который вы используете, может находиться пакет не с самой последней версией iPerf, в моем случае вопрос версии не принципиален, нам просто надо посмотреть на работу фрагментации, но если вы планируете использовать его для тестов своих каналов, учитывайте два момента: тесты, выполненные на iperf разных версий, могут не показать реальной картины (обычно результаты хуже чем есть на самом деле), в разных версиях есть разные баги, влияющие на результаты тестирования. Microsoft же вообще не рекомендует использовать iPerf для тестов в Windows.
Как запустить тест скорости iPerf
Запустить тест скорости в iPerf дело не хитрое, начнем с сервера. Запуск сервера делается так:
iperf3 -s
Запущенный сервер iPerf в Linux
Сервер ожидает запросы от клиента на порт 5201 любого из транспортных протоколов: TCP, UDP, SCTP. Если у вас используется firewall, убедитесь что порт открыт.
Клиента iperf будем запускать в Windows, для этого нужно запустить командую строку желательно от имени администратора, перейти в папку, где лежит exe файл (переходить никуда не надо будет, если добавить путь к iperf3.exe в переменную PATH):
C:\Windows\system32>cd c:\iperf3
c:\iperf3>iperf3.exe -c 10.0.0.2 -f k -M 1300
Connecting to host 10.0.0.2, port 5201
[ 5] local 10.0.0.6 port 49786 connected to 10.0.0.2 port 5201
Опции для разных ОС одинаковые, пользователи Linux могут получить справку при помощи утилиты man, в Windows можно написать iperf3.exe -h, но лучше обратиться к документации. Опции iperf делятся на серверные, клиентские и универсальные.
Теперь по поводу команды в Windows: -c говорит о том, что iperf запускается в режиме клиента, при этом данной опции надо передать IP-адрес сервера. Опция -f k говорит iperf о том, что скорость должна быть отображена в kbps, а -M 1300 задает размер TCP MSS 1300 байт.
Учитывайте, что какой бы протокол вы не использовали, iperf выставить df-bit = 1 и это никак не изменить, насколько мне известно, и это нужно учитывать при дальнейших тестах, плюс по умолчанию iperf генерирует пакеты только в одну сторону: от клиента к серверу. На сервере статистика тоже отображается, вот статистика для соединения, которое мы инициировали командой, выполненной выше в Windows:
Статистика теста скорости iperf на Linux сервере
Более детальную информацию о тесте можно получать, если использовать опцию -V на клиенте и сервере.
Как убрать df-bit у транзитного IP-пакета на роутере Cisco
Пожалуй, самый плохой сценарий для маршрутизатора в вопросах фрагментации, это когда маршрутизатор выполняет эту самую фрагментацию. Выше я не случайно написал про df-bit, который iPerf всегда выставляет на генерируемые им пакеты. С выставленным df-bit мы фрагментацию никогда не увидим, значит, его надо обнулить, как это сделать средствами Windows я не знаю и тратить время на то, чтобы с этим разобраться я не захотел, а вот на роутерах Cisco можно написать route-map и навешать этот route-map на интерфейс, в который будут входить пакеты с установленным df-bit, который мы хотим обнулять.
Примечание
Для тех, кто читал пост про MTU. В той лабе на интерфейсе CSR в сторону коммутатора был создан саб-интерфейс Gi2.200, на нем и был настроен IP-адрес, сейчас же саб-интерфейс Gi2.200 удален, IP-адрес перенесен на Gi2, а на линке CSR/SW кадры ходят без вланов.
Создать route-map можно, например, такой:
CSR#conf t
CSR(config)#route-map RM_DEL-DF-BIT permit 10
CSR(config-route-map)#match ip address 101
CSR(config-route-map)#set ip df 0
CSR(config-route-map)#exit
CSR(config)#access-list 101 permit tcp 10.0.0.0 0.0.0.255 any
Строка set ip df 0 как раз и заставляет обнулять df-bit, а RM_DEL-DF-BIT это просто имя route-map, которое я ей придумал. Роут-мапу нам надо повешать на интерфейс Gi2, поскольку пакеты с df-bit, который мы хотим обнулять, будут входить именно в интерфейс (если бы остался саб-интерфейс Gi2.200, то тогда вешать надо было бы на него). Делается это так:
CSR#conf t
CSR(config)#int gi2
CSR(config-if)#ip policy route-map RM_DEL-DF-BIT
И давайте зададим IP MTU 1300 байт на интерфейс Gi1:
CSR#conf t
CSR(config)#int gi1
CSR(config-if)#ip mtu 1300
Всё, лабу подготовили.
Как работает фрагментация IP пакетов на роутере
Наконец-то мы добрались до самой фрагментации. Запустим iperf на Винде(команда iperf3.exe -c 10.0.0.2 -f k -M 1370) и снимем дампы:
Первый с линка между SW/Win, здесь будут идти не фрагментированные пакеты с TCP MSS 1370 байт, это уже больше чем MTU интерфейса Gi1, но к значению MSS нужно будет добавить еще размеры заголовков TCP и IP.
Второй дамп будем делать с линка Host_1/CSR. Здесь мы сможем увидеть фрагментированные пакеты, видя два дампа, мы сможем сделать вывод о том, что фрагментацию выполняет именно роутер.
Важно найти один и тот же пакет как в первом, так и во втором дампе, проще всего это сделать по идентификатору пакета. Вот пакет с номером 2e8b на линке SW/Win:
Не фрагментированный пакет размером 1410 байт
Размер пакета 1410 байт, df-bit = 1. А вот этот же пакет на линке Host_1/CSR:
Роутер разделил исходный пакет и теперь вместо одного пакета 1410 байт у нас два пакета размером 1430 байт
Во-первых, пакетов два: 1300 байт и 130 байт, а это больше изначальных 1410, уже неприятно, особенно, если счёт будем вести на миллионы. Во-вторых, видим, что пакеты, которые идут в сторону Debian, имеют df-bit = 0, из увиденного делаем выводы:
Route-map работает, CSR снимает df-bit и делает фрагментацию.
Фрагментацию выполняет роутер.
Не вижу сейчас особого смысла смотреть внутрь пакета, т.к. все интересующие нас поля я вывел в дамп, но если что, вот пакет, который генерировала Винда:
Исходный пакет размером 1410 байт
Вот первый фрагмент на выходе из CSR Gi1:
Первый фрагмент исходного пакета
А вот второй фрагмент:
Второй фрагмент исходного IP-пакета
Мы посмотрели пример фрагментации пакетов, понятно, что делать это на роутерах не очень правильно, но иногда приходится.
В следующий раз поговорим про Path MTU Discovery, для этого нужно отвязать route-map от интерфейса Gi2, чтобы роутер перестал обнулять df-bit:
CSR#conf t
CSR(config)#int gi2
CSR(config-if)#no ip policy route-map RM_DEL-DF-BIT
IP MTU 1300 байт на линке Gi1 оставляем.
Вопросы для ваших ответов
Может ли фрагментированный IP пакет быть меньше 68 байт и почему?
Напомню топологию
Топология сети лабы
Представим ситуации: на интерфейсе Gi2 роутера CSR настроен IP MTU 1400 байт, на всех остальных линках IP MTU 1500 байт, хост Windows генерирует в сторону Linux пакеты размером 1450 байт, что с этими пакетами будет?
Имеется линк с IP MTU 700 байт: на сколько фрагментов и какого разрмера будет разбит пакет1400 байт?
Имеется линк с IP MTU 725 байт: на сколько фрагментов и какого разрмера будет разбит пакет1430 байт?
Видео версия
Для тех, кому проще смотреть и слушать есть видео версия
В прошлом посте обсудили MTU и некоторые важные особенности, связанные с размерами пакетов и кадров, в этом давайте посмотрим: как можно менять MTU на различном оборудование, для примера рассмотрим следующие устройства:
Компьютер под управлением Linux, для этого будет использоваться виртуальная машина с Debian 10 (на схеме это Host_1).
Компьютер под управлением Windows 10 (значок с подписью Win).
Роутер CSR1000v под управлением IOS XE.
Хотелось бы еще рассмотреть классические коммутаторы, но коммутаторы под управлением IOL в EVE-NG, как я понял, всё-таки являются multilayer свичами, а не классическими L2, плюс на IOL у меня не получилось изменить канальный MTU, но SW на схему добавлен и мы немного с ним поработаем.
Схема, на которой будем всё это тестировать:
Схема для тестов с MTU
Зеленый кружок это возможность для выхода устройств лабы в реальную сеть, IP-адреса подписаны на схеме, а на линке SW/CSR кадры ходят в 200 влане, в сторону Windows кадры отдаются без метки.
Как изменить MTU на коммутаторе Cisco
Перед изменением MTU разберемся как его смотреть, есть стандартное заблуждение, что на оборудование Cisco в конфигурации нельзя увидеть значения MTU, если оно равно значению MTU по умолчанию, и действительно, команда show run не дает никаких результатов:
SW#sh run | in mtu
SW#sh run | in MTU
SW#
Можно даже посмотреть конфигурацию одного из интерфейсов:
SW#sh run int e0/0
Building configuration...
Current configuration : 29 bytes
!
interface Ethernet0/0
end
SW#
Но почему-то многие забывают что есть show run all:
SW#sh run all | in mtu
crypto ikev2 fragmentation mtu 576
mtu 1500
mpls mtu 1500
mtu 1500
mpls mtu 1500
mtu 1500
mpls mtu 1500
mtu 1500
mpls mtu 1500
no ip tcp path-mtu-discovery
SW#
В лабе EVE-NG используется коммутатор IOL, MTU у них меняются на интерфейсах. Вот пример конфигурации интерфейса Ethernet0/0:
SW#show run all | s Ethernet0/0
buffers Ethernet0/0 permanent 96
buffers Ethernet0/0 max-free 96
buffers Ethernet0/0 min-free 0
buffers Ethernet0/0 initial 0
interface Ethernet0/0
switchport
switchport access vlan 1
no switchport nonegotiate
no switchport protected
no switchport port-security mac-address sticky
mtu 1500
no ip arp inspection trust
ip arp inspection limit rate 15 burst interval 1
ip arp inspection limit rate 15
load-interval 300
carrier-delay 2
no shutdown
tx-ring-limit 64
tx-queue-limit 64
no macsec replay-protection
no macsec
ipv6 mfib forwarding input
ipv6 mfib forwarding output
ipv6 mfib cef input
ipv6 mfib cef output
mpls mtu 1500
snmp trap link-status
no onep application openflow exclusive
cts role-based enforcement
no mka pre-shared-key
mka default-policy
cdp tlv location
cdp tlv server-location
cdp tlv app
arp arpa
arp timeout 14400
channel-group auto
spanning-tree port-priority 128
spanning-tree cost 0
hold-queue 2000 in
hold-queue 0 out
ip igmp snooping tcn flood
no bgp-policy accounting input
no bgp-policy accounting output
no bgp-policy accounting input source
no bgp-policy accounting output source
no bgp-policy source ip-prec-map
no bgp-policy source ip-qos-map
no bgp-policy destination ip-prec-map
no bgp-policy destination ip-qos-map
SW#
Если не увидели в выводе выше значение MTU, то вот строки: mtu 1500, mpls mtu 1500. Все интерфейсов на коммутаторе четыре:
SW#
SW#sh int des
Interface Status Protocol Description
Et0/0 up up
Et0/1 up up
Et0/2 up up
Et0/3 up up
SW#
Посмотреть MTU на интерфейсе можно еще и так:
SW#sh int e0/0 | in MTU
MTU 1500 bytes, BW 10000 Kbit/sec, DLY 1000 usec,
SW#
Это канальный MTU. В конфигурации каждого порта мы видим два MTU: Ethernet и MPLS, оба равны 1500 байт, но порт можно перевести в режим роутера, тогда у него появится еще и IP MTU. Переводим порт:
SW#conf t
SW(config)#int e0/1
SW(config-if)#no switchport
Посмотрим какие MTU есть на коммутаторе:
SW#sh run all | in mtu
crypto ikev2 fragmentation mtu 576
mtu 1500
mpls mtu 1500
mtu 1500
ip mtu 1500
mpls mtu 1500
mtu 1500
mpls mtu 1500
mtu 1500
mpls mtu 1500
no ip tcp path-mtu-discovery
SW
Появилась строка ip mtu 1500, она относится к порту Ethernet0/1. Чтобы посмотреть IP MTU можно воспользоваться вот такой командной:
SW#sh ip int e0/1
Ethernet0/1 is up, line protocol is up
Internet protocol processing disabled
SW#
Возникла ошибка, дело в том, что интерфейс e0/1 переведен в режим роутера, но на нем не работает IP процесс, чтобы он заработал, надо настроить IP-адрес:
SW#conf t
Enter configuration commands, one per line.
SW(config)#int e0/1
SW(config-if)#ip add
SW(config-if)#ip address 1.1.1.1 255.255.255.0
Теперь мы можем посмотреть IP MTU и другие параметры процесса IP:
SW#sh ip int e0/1
Ethernet0/1 is up, line protocol is up
Internet address is 1.1.1.1/24
Broadcast address is 255.255.255.255
Address determined by setup command
MTU is 1500 bytes
MPLS MTU посмотреть можно так (но MPLS должен быть включен на интерфейсе):
SW# sh mpls interfaces e0/1 detail
Interface Ethernet0/1:
Type Unknown
IP labeling not enabled
LSP Tunnel labeling not enabled
IP FRR labeling not enabled
BGP labeling not enabled
MPLS not operational
MTU = 1500
SW#
Изменить канальный MTU можно было бы вот такой командой:
SW#conf t
SW(config)#int e0/1
SW(config-if)#mtu 1600
% Interface Ethernet0/1 does not support user settable mtu.
SW(config-if)#
IP MTU на образах IOL меняется:
SW(config-if)#ip mtu 1000
MPLS MTU тоже можно поменять:
SW(config-if)#mpls mtu 1100
Итоговая конфигурация интерфейса теперь такая:
SW#sh run int e0/1
Building configuration...
Current configuration : 106 bytes
!
interface Ethernet0/1
no switchport
ip address 1.1.1.1 255.255.255.0
ip mtu 1000
mpls mtu 1100
end
SW#
Классические коммутаторы Cisco, как правило, не позволяют менять MTU отдельных интерфейсов и не имеют конфигураций MPLS MTU, у них есть так называемый system mtu, который позволяет задавать MTU всем интерфейсам сразу, показать не могу, поэтому отправлю к странице Configuration Guide для Catalyst 2960.
Команда Ping и размеры пакетов при пинге
Порт e0/1 на коммутаторе никак не влияет на передачу данных между хостами. MTU на всех линках, которые обеспечивают связность между ПК, сейчас стандартный и равен 1500 байт. Давайте в этом убедимся пингом с одного хоста на другой:
user@debian:~$ ping 10.0.0.6 -M do -s 1472 -c 4
PING 10.0.0.6 (10.0.0.6) 1472(1500) bytes of data.
1480 bytes from 10.0.0.6: icmp_seq=1 ttl=127 time=1.20 ms
1480 bytes from 10.0.0.6: icmp_seq=2 ttl=127 time=1.51 ms
1480 bytes from 10.0.0.6: icmp_seq=3 ttl=127 time=1.46 ms
1480 bytes from 10.0.0.6: icmp_seq=4 ttl=127 time=1.76 ms
Здесь стоит обратить внимание на то, что опция -s 1472 задает размер ICMP вложения без учета ICMP и IP заголовков, таким образом получается, что сформированный IP-пакет равен 1500 байт. В этом легко убедиться, если посмотреть на дамп Wireshark:
Размер пакета, который был сгенерирован при пинге с опцией -s 1472 в Linux
Если указать размер 1473 байта, то пинга не будет:
user@debian:~$ ping 10.0.0.6 -M do -s 1473 -c 3
PING 10.0.0.6 (10.0.0.6) 1473(1501) bytes of data.
На скрине зеленым выделен размер кадра, красным IP-пакета. А теперь сделаем пинг с роутера в сторону Debian:
CSR#ping 10.0.0.2 size 1500 df-bit
Type escape sequence to abort.
Sending 5, 1500-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
Packet sent with the DF bit set
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/63/121 ms
CSR#ping 10.0.0.2 size 1501 df-bit
Type escape sequence to abort.
Sending 5, 1501-byte ICMP Echos to 10.0.0.2, timeout is 2 seconds:
Packet sent with the DF bit set
.....
Success rate is 0 percent (0/5)
CSR#
По результату пингов можно сделать вывод, что в IOS XE задается размер IP пакета при выполнении пинга. В Windows при пинге задается размер ICMP вложения без учета заголовков IP и ICMP:
Пинг в Windows с указанием размера payload ICMP и запретом на фрагментацию
Вывод из этого всего простой. Когда вы задаете размеры чего-то при пинге, всегда узнавайте, чего именно размер вы задаете.
Как изменить MTU на роутере Cisco?
Фактически способы изменения различных MTU на роутере мы рассмотрели, когда говорили про коммутаторы, т.к. для примера использовался multilayer switch. Но давайте все-таки кое-что посмотрим.
Для начала обратим внимание что максимальный канальный MTU на интерфейсе роутера может быть 9216 байт:
CSR#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
CSR(config)#int gi1
CSR(config-if)#mtu ?
<1500-9216> MTU size in bytes
CSR(config-if)#mtu
При этом сейчас канальный MTU равен 1500 байт, давайте посмотрим на возможные значение IP и MPLS MTU:
CSR(config-if)#ip mtu ?
<68-1500> MTU (bytes)
CSR(config-if)#mpls mtu ?
<64-1500> MTU (bytes)
Изменим L2 MTU, зададим максимальное значение:
CSR(config-if)#mtu 9216
CSR(config-if)#do sh int gi1 | in MTU
MTU 9216 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
Значение изменилось, а теперь давайте посмотрим на значения, которые можно задать IP и MPLS MTU:
CSR(config-if)#ip mtu ?
<68-9216> MTU (bytes)
CSR(config-if)#mpls mt
<64-9216> MTU (bytes)
Их верхняя граница отодвинулась на значение 9216 байт, при этом у IP минимальный MTU может быть равен 68 байт, а у Ethernet и MPLS 64. Давайте теперь посмотрим на линк в сторону коммутатора, в самом начале я упоминал, что на этом линке используется 200 влан, со стороны роутера настроен саб-интерфейс с номером 200, который инкапсулирует кадры в 200 влан, конфигурация выглядит так:
CSR# sh run int gi2
Building configuration...
Current configuration : 96 bytes
!
interface GigabitEthernet2
description toHost_2_via_SW
no ip address
negotiation auto
end
CSR# sh run int gi2.200
Building configuration...
Current configuration : 100 bytes
!
interface GigabitEthernet2.200
encapsulation dot1Q 200
ip address 10.0.0.5 255.255.255.252
end
CSR#
Поясню по поводу саб-интерфейса Gi2.200: о том, что на кадры нужно ставить метку с номером 200, говорит строка encapsulation dot1Q 200, цифра 200 после Gi2 это номер саб-интерфейса, эта цифра не обязана совпадать с номером влана, но для удобства их обычно делают одинаковыми.
Саб-интерфейс и влан в данном случае я городил, чтобы посмотреть на связь между MTU физического интерфейса и MTU саб-интерфейса.
Посмотрим какие MTU сейчас на Gi2 и Gi2.200:
CSR#sh int gi2 | in MTU
MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
CSR#sh int gi2.200 | in MTU
MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
CSR#sh ip int gi2.200 | in MTU
MTU is 1500 bytes
CSR#
Посмотрим какой MTU можно задать саб-интерфейсу:
CSR(config)#int gi2.200
CSR(config-subif)#mtu ?
<1500-9216> MTU size in bytes
Выставим саб-интерфейсу L2 и L3 MTU равными 1600 байт:
CSR(config)#int gi2.200
CSR(config-subif)#mtu 1600
CSR(config-subif)#ip mtu ?
<68-1500> MTU (bytes)
CSR(config-subif)#ip mtu
Роутер съел команду mtu 1600, но при этом задать ip mtu 1600 возможности нет. Давайте посмотрим применился ли L2 MTU 1600 для саб-интерфейса:
CSR#sh int gi2.200 | in MTU
MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
CSR#
А вот и не изменился. Выставим L2 MTU 1600 байт для Gi2:
CSR(config)#int gi2
CSR(config-if)#mtu 1600
CSR(config-if)#do sh int gi2 | in MTU
MTU 1600 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
CSR(config-if)#
Выставили, он применился. Посмотрим MTU Gi2.200:
CSR(config-if)#do sh int gi2.200 | in MTU
MTU 1600 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
CSR(config-if)#
Увеличим MTU Gi2 до 1700 байт и посмотрим канальный MTU Gi2.200:
CSR(config)#int gi2
CSR(config-if)#mtu 1700
CSR(config-if)#do sh int gi2.200
GigabitEthernet2.200 is up, line protocol is up
Hardware is CSR vNIC, address is 5000.0002.0001 (bia 5000.0002.0001)
Internet address is 10.0.0.5/30
MTU 1700 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
Канальный MTU саб-интерфейса увеличивается вместе с канальным MTU основного интерфейса. L3 MTU теперь тоже можно сделать 1700 байт, но мы сделаем 1600 байт:
CSR(config)#int gi2.200
CSR(config-subif)#ip mtu ?
<68-1700> MTU (bytes)
CSR(config-subif)#ip mtu 1600
CSR(config-subif)#do sh run int gi2.200
Building configuration...
Current configuration : 113 bytes
!
interface GigabitEthernet2.200
encapsulation dot1Q 200
ip address 10.0.0.5 255.255.255.252
ip mtu 1600
end
CSR(config-subif)#do sh ip int gi2.200 | in MTU
MTU is 1600 bytes
CSR(config-subif)#do sh int gi2.200 | in MTU
MTU 1700 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
CSR(config-subif)#
Какие выводы мы можем сделать из увиденного?
В IOS XE значение Ethernet MTU саб-интерфейса наследуется от основного интерфейса.
Сетевым MTU саб-интерфейса можно управлять, но он не может быть больше канального.
Плюс нужно не забывать, что это пример конкретного оборудования с конкретной операционной системой, и на каком-то ином оборудование поведение может быть другим, поэтому либо читайте документацию, либо тестируйте, а лучше и то и другое.
По факту в IOS XE на саб-интерфейсе можно менять IP MTU и MPLS MTU, канальный MTU наследуется, это подтверждает вывод sh run all:
CSR#sh run all | b GigabitEthernet2.200
interface GigabitEthernet2.200
...
encapsulation dot1Q 200
ip address 10.0.0.5 255.255.255.252
....
ip mtu 1600
...
mpls mtu 1700
.....
!
По результатам sh run all видим, что нет даже возможности задать канальный mtu на саб-интерфейсе, а вот конфигурация основной интерфейс.
CSR#sh run all | b GigabitEthernet2
interface GigabitEthernet2
description toHost_2_via_SW
...
mtu 1700
...
ip mtu 1700
...
mpls mtu 1700
...
!
Для дальнейшего рассмотрения я вернул MTU всех интерфейсов на 1500 байт.
Размер Ethernet заголовка и настройки MTU
В прошлом посте про MTU я говорил, что есть некоторые стандарты, которые увеличивают размер заголовка, самый очевидный и часто используемый в компьютерных сетях стандарт это 802.1q или VLAN, он добавляет к полю заголовка 4 байта, то есть эта добавка никак не должна влиять на способность оборудования пропустить кадр с MTU 1500, если на интерфейсах этого оборудования настроено 1500 байт.
Убедимся в этом, запустим пинг из Linux в Windows IP-пакетами размером 1500 байт и снимем дамп с двух линков:
На линке Host_1/CSR. Здесь кадр идет без поля 802.1q.
На линке CSR/SW, здесь кадры идут с меткой 200.
На линке коммутатор/Windows дамп снимать смысла нет, потому что коммутатор убирает метку, когда отдает кадр в сторону ПК. Пинг:
user@debian:~$ ping 10.0.0.6 -M do -s 1472
PING 10.0.0.6 (10.0.0.6) 1472(1500) bytes of data.
1480 bytes from 10.0.0.6: icmp_seq=1 ttl=127 time=56.6 ms
1480 bytes from 10.0.0.6: icmp_seq=2 ttl=127 time=1.19 ms
1480 bytes from 10.0.0.6: icmp_seq=3 ttl=127 time=1.46 ms
1480 bytes from 10.0.0.6: icmp_seq=4 ttl=127 time=1.57 ms
1480 bytes from 10.0.0.6: icmp_seq=5 ttl=127 time=1.79 ms
1480 bytes from 10.0.0.6: icmp_seq=6 ttl=127 time=1.88 ms
Дамп с линка между Линуксом и роутером:
Ethernet кадр без метки размером 1514 байт с вложением 1500 байт
Зеленым выделен размер кадра (Dst MAC + Src MAC + Type + Payload). Красным выделен размер пакета 1500 байт. Теперь кадр на линке между роутером и коммутатором:
Ethernet кадр с меткой размером 1518 байт с вложением 1500 байт
Размер кадра увеличен до 1518 байт за счет того, что к заголовку добавились поля 802.1Q, но IP-пакет по-прежнему 1500 байт, данный кадр прошел через линк с MTU 1500 байт и это правильное поведение оборудование, но если вы работаете с каким-нибудь noname китайским тестируйте такие моменты.
Как изменить MTU интерфейса в Windows 10?
Сразу скажу, что я не самый быстрый стрелок на этом диком западе в части специфичных сетевых настроек на Винде, но как поменять MTU я знаю, для начала давайте посмотрим какие интерфейсы есть и какой MTU на них задан. Вот этой командной можно посмотреть канальные интерфейсы и их MTU в Windows:
C:\Windows\system32>netsh interface ipv4 show subinterfaces
В левом столбце значение L2 MTU, вывод я такой делаю, потому что можно посмотреть расширенные настройки интерфейсов:
C:\Windows\system32>netsh interface ipv4 show interfaces level=verbose
Interface Loopback Pseudo-Interface 1 Parameters
----------------------------------------------
IfLuid : loopback_0
IfIndex : 1
State : connected
Metric : 75
Link MTU : 4294967295 bytes
Reachable Time : 30500 ms
Base Reachable Time : 30000 ms
Retransmission Interval : 1000 ms
DAD Transmits : 0
Site Prefix Length : 64
Site Id : 1
Forwarding : disabled
Advertising : disabled
Neighbor Discovery : disabled
Neighbor Unreachability Detection : disabled
Router Discovery : dhcp
Managed Address Configuration : enabled
Other Stateful Configuration : enabled
Weak Host Sends : disabled
Weak Host Receives : disabled
Use Automatic Metric : enabled
Ignore Default Routes : disabled
Advertised Router Lifetime : 1800 seconds
Advertise Default Route : disabled
Current Hop Limit : 0
Force ARPND Wake up patterns : disabled
Directed MAC Wake up patterns : disabled
ECN capability : application
Interface Ethernet Parameters
----------------------------------------------
IfLuid : ethernet_32768
IfIndex : 8
State : connected
Metric : 25
Link MTU : 1500 bytes
Reachable Time : 20000 ms
Base Reachable Time : 30000 ms
Retransmission Interval : 1000 ms
DAD Transmits : 3
Site Prefix Length : 64
Site Id : 1
Forwarding : disabled
Advertising : disabled
Neighbor Discovery : enabled
Neighbor Unreachability Detection : enabled
Router Discovery : dhcp
Managed Address Configuration : enabled
Other Stateful Configuration : enabled
Weak Host Sends : disabled
Weak Host Receives : disabled
Use Automatic Metric : enabled
Ignore Default Routes : disabled
Advertised Router Lifetime : 1800 seconds
Advertise Default Route : disabled
Current Hop Limit : 0
Force ARPND Wake up patterns : disabled
Directed MAC Wake up patterns : disabled
ECN capability : application
И тут написано Link MTU. Поменяем значение MTU интерфейсу со значением Ethernet на 1600 байт через командую строку. Изменения рекомендую вносить через командую строку, запущенную от имени администратора:
C:\Windows\system32>netsh interface ipv4 set subinterface "Ethernet" mtu=1600 store=persistent
Ok.
C:\Windows\system32>netsh interface ipv4 show subinterfaces
Слово "Ethernet" в команде для смены MTU это имя интерфейса, имена интерфейсов можно посмотреть командой ipconfig. В графическом интерфейсе можно изменить размер кадров, который должен уметь обрабатывать интерфейс, заходим в меню "Настройки параметров адаптера" и здесь жмем ПКМ на нужный интерфейс:
Перечень адаптеров в Windows 10
Выбираем пункт "Свойства"/"Properties".
Меню просмотра и настроек свойств выбранного интерфейса
Жмем на кнопку "Configure..."/"Настроить...". А далее идем по цифрам:
Меню включения Jumbo Frame на сетевых интерфейсах в Windows 10
В русской версии Windows меню "Jumbo Packet" перевели как "Большой кадр". Значение 9014 байт это именно что размер кадра, потому что после того как будет выбрано 9014 байт, MTU интерфейса станет 9000 байт:
C:\Windows\system32>netsh interface ipv4 show subinterfaces
Когда вы включаете Jumbo кадры, интерфейс перезагружается.
Как изменить MTU в Linux?
Перейдем к Linux. Разберемся как проверять MTU на интерфейсах.
Прежде чем продолжить сделаю одно примечания. В посте о настройке лабы TTL я довольно подробно описал базовые сетевые настройки для Debian 10, плюс там же дал некоторые полезные ссыли, поэтому сейчас на этом вопросе подробно не останавливаюсь.
На конкретном интерфейсе MTU смотрим так:
user@debian:~$ ip link show dev ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
Разберемся с тем, как сделать временные изменения MTU на интерфейсе, изменять будем на ens3, этот интерфейс включен в мою домашнюю сеть, а через нее в интернет, для проверки попинуем Гугл:
У интерфейса ens3 MTU будет 1400 байт до перезагрузки машины, после ребута он вновь станет 1500 байт. Разберемся как изменить MTU на постоянной основе, как и большая часть других настроек Linux, постоянные изменения применяются через изменение конфигурационных файлов. Открываем файл с сетевыми настройками любым удобным редактором:
sudo nano /etc/network/interfaces
Находим конфигурацию нужного нам интерфейса и добавляем в нее значение MTU нужного нам размера, в моем случае 1400 байт:
#to_CSR
allow-hotplug ens4
iface ens4 inet static
address 10.0.0.2/30
up ip route add 10.0.0.4/30 via 10.0.0.1
mtu 1400
Стоит учитывать что название и расположение файла с сетевыми настройками зависит от дистрибутива, с которым вы работаете. Давайте проверим изменился ли MTU:
user@debian:~$ ip link show dev ens4
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
PING 10.0.0.1 (10.0.0.1) 1372(1400) bytes of data.
1380 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=60.9 ms
1380 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=0.641 ms
1380 bytes from 10.0.0.1: icmp_seq=3 ttl=255 time=0.591 ms
1380 bytes from 10.0.0.1: icmp_seq=4 ttl=255 time=0.595 ms
^C
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 61ms
rtt min/avg/max/mdev = 0.591/15.670/60.856/26.088 ms
user@debian:~$
И не забывайте, что в Linux есть замечательная утилита grep, которая позволяет избежать просмотра портянок различного рода конфигураций и диагностических выводов:
user@debian:~$ ip a | grep mtu
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP group default qlen 1000
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP group default qlen 1000
user@debian:~$
Ну и всё, спасибо, что дочитали!
Вопрос для вашего ответа
Почему роутер дает возможность установить минимальный MTU для IP 68 байт, а для MPLS и Ethernet 64 байта? В чем логика, если IP это вложение в Ethernet и тот же IP может быть закрыт MPLS заголовком?
Видео версия
Видео версия для тех, кому проще посмотреть и послушать, чем почитать.
Часто бывает, что время разговора по Zoom вы понимаете каждое слово, но затем ваша память решает поиграть в прятки именно в тот момент, когда это нужно больше всего. Не волнуйтесь, теперь у вас есть Otter.ai (https://otter.ai/).
Сервис транскрибирует ваши разговоры Zoom в текст в режиме реального времени, гарантируя, что вы не пропустите ни одного слога. Это ваш компаньон-полиглот, который без труда распознает речь на разных языках, в том числе на красивом и сложном русском.
Обсуждаете ли вы детали проекта на английском, говорите на испанском или разрабатываете стратегию на китайском, инструмент гарантирует, что язык больше не будет препятствием для понимания и сотрудничества.
Работает в Zoom, Google Meet и Microsoft Teams. С бесплатной версией вы можете использовать до 300 минут записей в месяц, при этом на каждую беседу отводится не более 30 минут.
«Ты программист? Тогда подскажи, как взломать страницу в ...?»
Да-да, это самый популярный вопрос к программисту до сих пор, к сожалению, и не только...
Поэтому мы собрали очередную порцию самых популярных стереотипов и заблуждений о программировании, и задали их нашему гостю — fronted-разработчику и тимлиду Андрею Белову.
Вот тут его интервью о том, что учиться нужно каждый день, чтобы поспевать за миром: