Доброе время суток, уважаемые коллеги!
Имеется вот нейкая сетевая структура, где сервер и клиент связаны по TCP.
Межде сервером и клиентом поддерживается постоянное соединение (OS: Linux Ubuntu).
Предполагается, что эти сервер и клиент — отдельные машинки локальной сети.
Вопрос: какова максимальная длина пакета, который НЕ будет разбиваться сетью на более мелкие пакеты?
Правильно ли я понимаю, что эта длина определяется параметром MTU (когда вызываем команду
ifconfig или
netstat -ie в Linux)?
Вот откуда инфа:
https://stackoverflow.com/questions/2613734/maximum-packet-size-for-a-tcp-connection
Вопросы:
MTU равный примерно 1.5 KBytes — это для произвольных данных?
Для текстовых данных этот показатель порядка 14 KBytes. Почему различие почти в десять раз?
ПРИМЕЧАНИЕ:
Данные насчёт показателя равного 14 KBytes (для текстовых данных) — взяты отсюда:
https://tylercipriani.com/blog/2016/09/25/the-14kb-in-the-tcp-initial-window
Для общего случая — следует ориентироваться значением 1.5 KBytes.
Насколько вероятна ситуация, что поменяется порядок следования пакетов? То есть — переданный в сеть позже, появится на приёме раньше.
Вышеуказанные данные получены экспериментально.
При работе без сети (local-loopback) — просто на 127.0.0.1 — максимальная длина TCP пакета намного больше. Порядка 64 KBytes.
P.S. Конечно же, я предусмотрел на стороне приёма, накопление сегментов_пакета — восствновление исходного пакета.
Оно основано на поиске 32-х битного маркера конца пакета.
Но меня интересует вопрос — как сеть дробит пакеты TCP?
Как защититься от изменения порядка следования пакетов?
Заранее благодарен за любые подсказки!