четверг, 7 февраля 2013 г.

MTU и MSS

MTU и MSS

У многих возникает вопрос что же такое MTU (Maximum transfer Unit) и MSS (Maximum Segment Size). Ответы на эти вопросы оказываются достаточно просты, правда в некоторых руководствах описаны до того запутанно, что бывает очень тяжело понять так все таки что же это за размеры сегментов такие. Здесь я постараюсь кратко и доходчиво описать все же что это такое.
Итак все мы знаем 4 уровня стека протоколов TCP/IP:
4) Уровень приложений (SMTP, HTTP)
3) Транспортный уровень (TCP/UDP)
2) Сетевой (IP)
1) Уровень доступа к сети (Ehernet и др. протоколы).

Теперь представим процесс как наше приложение данные по сети на примере передачи от браузера к HTTP серверу:
4) Прикладной уровень:
 Наш браузер берет нашу строку запроса которую мы ввели и передает ее транспортному уровню:
             |
             |
            \/
3) Транспортный уровень к чистым данным добавляет свой заголовок в котором указывает порты отправителя и получателя. Обычно такой заголовок занимает 20 байт. А вот "чистые данные" от приложения занимают максимально1460 байт. На этом этапе данные с заголовком занимают 1480 байт. (20 байт заголовок).
Как видим со 160 бит, то бишь 20 байт занимает заголовок, затем пошли данные с максимальным размером 1460 байт, почему такой - согласно стандартам.  Вот этот размер это и будет наш MSS=1460 байт. Затем транспортный уровень предает данные с заголовком 1480 байт на сетевой (межсетевой) уровень

             |
             |
            \/
2) Сетевой уровень. Добавляет  к данным полученным от транспортного уровня т.е к 1480 байтам, еще и свой заголовок с ip адресами отправителя и получателя. Который также обычно равен 20 байт. Итого перед передачей на уровень доступа к сети размер наших данных с заголовками будет уже 1500 байт (20 байт заголовок TCP + 20 байт IP). Сетевой уровень пересылает эти 1500 байт уровню доступа к сети. Так вот эти 1500 байт - это и есть MTU.
             |
             |
            \/
1) Уровень доступа к сети (назовем его так). Принимает эти данные и добавляет к ним свой заголовок и контрольную сумму (в этом примере взят кадр Ethernet, у HDLC, PPP совсем другие), все вместе обычно составляет обычно 18 байт (хотя не всегда, здесь не буду объяснять, поверим Википедии). В итоге мы получим 1518 байт.
Вообщем своими словами:
MSS - маскимальная длина данных, которые прикладной уровень передает транспортному, максимальная длина данных прикладного уровня в сегменте TCP, без ТСP заголовка.
MTU - масимальная длина поля данных в кадре Ethernet (данных пройденных после инкапсуляции на транспортном и сетевом уровнях, включая их заголовки).

Как быстрее всего расчитать?
Идем от нижних уровней
1) Отбрасываем от Ethernet кадра (фрейма) заголовки и CRC и получаем 1500 байт данных.
2) От этих 1500 - 20 (IP заголовок) -20 (ТСP заголовок) =1460 байт.





Комментариев нет:

Отправить комментарий