Может ли канальный уровень выполнять фрагментацию IP в некоторых особых случаях?
Я читаю книгу TCP/IP Illustrated, Vol.1 и там говорится, что IP-фрагментация выполняется сетевым уровнем.
Вот как я понял концепцию: сетевой уровень (L3) создает "дейтаграмму IP" (заголовок IP + данные) и отправляет этот байтовый массив на канальный уровень (L2). Если L2 не знает о структуре дейтаграммы IP, и полученный байтовый массив больше максимального размера, он не будет знать, как разделить этот байтовый массив и добавить заголовок IP к каждому чанку, что является обязанностью его L3. Так что L2 и L3 должны как-то сотрудничать.
Что меня смущает, так это то, что несколько страниц спустя, когда обсуждается заголовок IP, общая длина и максимальный размер дейтаграммы IP, он говорит: "Хотя возможно послать дейтаграмму IP размером 65535 байт, большинство канальных уровней будет фрагментировать это".
Моя "концепция" неверна? Знает ли L2 о структуре дейтаграммы IP, чтобы она могла фрагментировать дейтаграмму IP? Если это правда, почему L2 не всегда выполняет фрагментацию, поскольку знает свой MTU?
3 ответа
Фрагментация IP - это вещь, которая прерывает дейтаграммы на уровне IP. Работа по повторной сборке и возможная повторная передача в случае потери одного из фрагментов означает, что следует избегать фрагментации.
Нижележащий уровень 2 является отдельным и охватывает каждый пакет (фрагмент) в кадре. Фактически это все, что он может сделать, так как обычно L2, и, конечно, не Ethernet, не выполняет "фрагментацию".
Определение оптимального размера намного меньше координации и больше похоже на догадки и называется Path MTU Discovery. Сетевой стек вряд ли будет пытаться использовать максимум 65535 байт. Возможно, придет сообщение ICMP о том, что размер слишком велик. Хотя путь, вероятно, является интерфейсом Ethernet с самого начала, поэтому попытка чего-либо более 1400 или около того, вероятно, не будет работать.
Формулировка вводит в заблуждение. Уровень IP знает максимальный размер полезной нагрузки канального уровня, поэтому он выполняет фрагментацию.
L2 не знает об IP, но у него есть свои ограничения по размеру кадра. Любая датаграмма IP, превышающая размер кадра L2, будет распределена между 2 и более кадрами L2.