Кадри Ethernet більше 64k


0

У мене є декілька ПК в локальній мережі Gigabit Ethernet, всі вони пов'язані з одним простим некерованим комутатором L2. Немає доступу до Інтернету. Я хочу побудувати систему реального часу, в якій певний ПК повинен посилати повідомлення в 1 МБ іншому, з таким властивістю, що це повідомлення або доставляється, або повністю втрачено (в останньому випадку не потрібно повторно передавати його, як це буде застарілими).

Більш подібно до "живий канал від камери відео + аудіо + деякі додаткові дані з датчиків". Я хочу використовувати протокол Ethernet, тому що мені не потрібні складні інтернет-маршрутизації, і MAC-адреси будуть просто достатніми.

Але Вікі сказав що максимальне корисне навантаження становить лише 46-150 октетів. Чи можу я подолати це обмеження за допомогою спеціально написаного програмного забезпечення (наприклад, використання netmap API), або це апаратно визначена поведінка, яка не може бути змінена?


1
Якщо інтерфейс Ethernet не підтримує нестандартні jumbo-фрейми, інтерфейс буде відкидати фрейми розміром більше 1514 байтів як неправильний або гігантський. Деякі пристрої підтримують нестандартні jumbo кадри, але максимум зазвичай становить 9000 байт. Погана частина полягає в тому, що різні виробники роблять це по-різному, підтримуючи різні максимальні розміри, іноді навіть на інтерфейсах одного і того ж пристрою, наприклад, деякі комутатори Cisco не підтримують або підтримують лише 3000 байт на інтерфейсах 100 Мбіт / с, але 9000 байт на інтерфейсах 1 Гбіт / с на одному пристрої. Усі інтерфейси в контурі повинні підтримувати розмір, який ви використовуєте.
Ron Maupin

@RonMaupin Спасибі, я вперше подумав, перш ніж намагатися навіть запустити реалізацію. Чи можу я якось "спалахнути" всі адаптери з новим MTU або це схема визначена? Де це обмеження «живе»?
xakepp35

Це апаратне обмеження, і насправді нічого не можна зробити, щоб змінити його. Стандарт Ethernet IEEE становить 1500 байт, тому будь-які інтерфейси, які працюють на великих розмірах, будуть нестандартними. Ви також не можете використовувати джамбо-фрейми через загальнодоступний Інтернет. Ще однією проблемою при відправці великих кадрів або пакетів є те, що ви волі втрачають деякі кадри або пакети, а потім потрібно повторно передати більше даних.
Ron Maupin

@RonMaupin, що є темою, я або хочу повідомлення доставляється повністю, або повністю не вдалося (на основі перевірки контрольної суми на стороні отримання). Це теоретично повинно бути зроблено без будь-якого зворотного зв'язку та повторної передачі. Якщо я поділяю його на частини, які були б у 3 рази складніше, тому що я змушений буде розділити 1 МБ через 700 пакетів по 1500 байт. Це дозволить ввести 23800 октетів додаткових заголовків Ethernet, я можу легко втратити один пакет, і в кінцевому рахунку, я не знаю, якщо може відбутися переупорядкування.
xakepp35

Це не станеться в мережі. Кадри весь час скидаються, і пакети втрачаються весь час. Протоколи верхнього рівня, напр. TCP або програма повинні враховувати це і вживати заходів, щоб визначити, коли щось втрачено, і повторно надіслати його. Є також причини, наприклад, Протоколи реального часу, такі як VoIP або відео, де ви не хочете повторно передавати втрачені дані, але для файлу, ви обов'язково виявляти та повторно відправляти втрачені дані.
Ron Maupin

Відповіді:


1

Ethernet 1G (та up) забезпечує підтримку Jumbo frame з довжиною кадрів до 9000 байт. Я бачив деякі старі карти Intel PCI (стародавні речі), які підтримували до 16k кадрів, але я вважаю, що вони не є стандартними.

Ви повинні розділити ваші повідомлення на дрібні шматки. Максимальна довжина кадру залежить від HW (і ніякий SW не буде працювати навколо цього), але я не думаю, що є щось, що підтримує 1M кадри.


1
Все jumbo фрейми нестандартні. Специфікація IEEE Ethernet вимагає максимального корисного навантаження Ethernet на 1500 байт. Різні виробники прийняли джамбо рамки без стандартів, і вони реалізують її по-різному.
Ron Maupin

eh .. на жаль. Я подумав використовувати трансляцію 1 Мб кадрів MAC, що було б чудово, коли кілька клієнтів могли отримувати великі дані в реальному часі одночасно і ефективно. До речі, чому 1500 і 9000? чому б не 65536 !?
xakepp35

Це, ймовірно, дуже глибока математика за ним, включаючи хвильові ефекти поширення сигналу в мідному кабелі і так далі ... Не для моєї голови.
Tomek

1

Ethernet (і, в цьому відношенні, IP) був розроблений так, щоб мати фіксовану верхню довжину на розмірах пакетів, так що ніхто не може занадто довго переносити спільний носій, передаючи деяке довге повідомлення довільної довжини.

Стандартні кадри Ethernet можуть мати тільки 1500 байт корисного навантаження.
Стандартні IP-дейтаграми можуть становити до 64 кілобайт. (Але через те, що в Інтернеті дуже багато мережевих мереж, подібних до Ethernet, більшість часу IP-дейтаграми залишаються в межах 1500 байтів Ethernet, тому що фрагментація і повторна збірка великих IP-дейтаграм менш ефективні, ніж просто зберігати дейтаграми в даних MTU шару посилання.)

Якщо ваша заявка має справу з повідомленнями, більшими за це, вам потрібно самостійно зробити фрагментацію / повторне збирання / перевірку повідомлення на своєму власному шарі. Саме так було розроблено і як кожен має справу з ним, і ви будете плавати вгору, щоб спробувати зламати ваше обладнання, щоб дозволити 1 Мб повідомлень. Замість цього ви повинні просто розуміти, що те, що ви хочете, - це не те, що забезпечують вам нижчі шари, але вони надають вам будівельні блоки, необхідні для створення власного рішення на вашому шарі. Мережеві протоколи і технології спеціально розроблені в шарах, причому найнижчі шари забезпечують мінімальний рівень, необхідний цьому шару, так що верхні шари не обтяжені нижніми шарами, які роблять більше, ніж потрібні верхні шари. Тут називається важливий документ "Кінцеві аргументи в системному дизайні" Салцера, Рід і Кларка . Будь-хто, хто потрапляє в мережу на цьому рівні деталізації, повинен його прочитати.

Я впевнений, що є багато бібліотек, що створюють повідомлення, щоб полегшити передачу повідомлень довільної довжини по протоколу TCP або UDP, де бібліотека, що створює повідомлення, дбає про фрагментацію, повторне збирання та перевірку ваших повідомлень.


А як щодо jumbogram IPv6, що дозволяє до 4GiB пакетів? tools.ietf.org/html/rfc2675 Її до IP розділяють пакети, але яка проблема на нижньому рівні Ethernet, який повинен піклуватися тільки про MAC-адресації і функції CRC, але не довжину! Здається, вони надмірно використовували Ethernet нижнього рівня, щоб виконувати функції протоколу IP, не читали вашу книгу? (Ethernet не є необов'язковим IP)
xakepp35

@ xakepp35 Для технології шарів каналів (в даному випадку Ethernet) цілком доречно накласти обмеження довжини, так що ви можете мати спільний носій без необмеженої затримки / джиттера від пристроїв, які переносять гігантське повідомлення. Насправді це був цей прорив перемикання пакетів з обмеженою довжиною, що дозволив створити Інтернет, і вибив мережу з комутацією каналів і комутацією повідомлень, що передує йому.
Spiff

Я не кажу про інтернет, а про відсутність гнучкості. Було б здорово зірвати ліміт довжини від ethernet, тому що він представлений в IP, і це дозволить адаптувати (майже чудово) протокол Ethernet і дешеве обладнання для місцевих потреб. В інтернеті немає пакетів, крім IP. Так навіщо обмежувати його на нижчому рівні, тоді як один просто може налаштувати будь-який маршрутизатор / шлюз для відхилення / фрагментації більших кадрів?
xakepp35

@ xakepp35 У цей момент будь-хто, хто потребує довільних повідомлень, просто використовує бібліотеку, яка забезпечує передачу повідомлень через TCP або UDP, що чудово працює на існуючому дешевому товарному обладнанні, не потребуючи нового користувальницького обладнання (для читання: дорого) для підтримки довільного - довжини повідомлень. Немає ринкової вартості для зміни апаратного забезпечення, яке ви просите, тому що люди вже вирішили його на прикладному рівні приблизно 3 десятиліття тому.
Spiff
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.