Сервер не может получить TCP-пакет, размер которого превышает 1500 байт.

Один сервер не может получить TCP-пакет размером более 1500 байт,
но этот сервер МОЖЕТ отправить TCP-пакет размером более 1500.

Я также пытаюсь захватить пакет на этом сервере для анализа WireShark.
Однако WireShark не может нормально захватывать пакеты на этом сервере.
(например, некоторые полученные пакеты не захватываются WireShark)

У кого-нибудь есть идея? Большое спасибо.

Информация о сервере.
ОС: Windows 2008;
MTU: 1500.

================================================== =
Позвольте мне описать этот вопрос более четко.
У меня есть программа клиент / сервер, которая создает TCP-соединение между 2 серверами
, и ситуация следующая
Server_A ---- Server_B
---> pkt ‹1500 байт не может получить
---> pkt> 1500 байт может получить
‹ --- pkt ‹1500 байт может получить
‹ --- pkt> 1500 байт может получить

Эта программа хорошо работает на другом сервере, только ненормально на server_B.
У кого-нибудь есть такой опыт?


person liononline    schedule 22.10.2014    source источник
comment
Если mtu равно 1500, то сервер может отправить TCP-пакет размером более 1500 байт, но уровень IP будет фрагментировать пакет так, чтобы результирующие дейтаграммы IP были не больше, чем mtu.   -  person Craig S. Anderson    schedule 24.10.2014
comment
да, в обычном случае моя программа может отправить пакет больше 1500. Но в этом случае, конкретный сервер, я создаю TCP-соединение между server_A и server_B. И отправляю пакет на server_B. Когда размер пакета меньше 1500, моя программа на server_B может получить пакет. Но если больше 1500, не может.   -  person liononline    schedule 24.10.2014
comment
Я думаю, что на данном этапе, если вы разместите фрагмент кода, это поможет. При создании кода, который записывает в сокет TCP в Linux / Unix, я просто выполняю системный вызов write (), передавая ему указатель на буфер и его длину. Затем ОС сообщает мне, сколько было написано. Если ОС не записывает весь буфер, я снова вызываю write () с указателем на байты, которые не были отправлены.   -  person Craig S. Anderson    schedule 24.10.2014
comment
Вероятно, это было вызвано черной дырой pMTU из-за того, что кто-то думает, что ICMP является необязательным, и поэтому вполне нормально настроить брандмауэр для его блокировки. ICMP - это требование конечной точки Интернета, и его блокировка ломает такие вещи, как TCP.   -  person David Schwartz    schedule 20.07.2021


Ответы (1)


Когда размер пакета меньше 1500, моя программа на server_B может получить пакет. Но если больше 1500, не может.

TCP - это не протокол обмена сообщениями. Это протокол байтового потока. Продолжай читать.

person user207421    schedule 24.10.2014