Влияет ли TcpClient.ReceiveBufferSize на размер базового кадра? - PullRequest
0 голосов
/ 18 мая 2018

Сначала я думал, что ответом на этот вопрос будет «нет», но Wireshark, похоже, доказывает, что я не прав.

В нашем приложении мы заметили, что больший TcpClient размер буфера приема приводит к тому, что несколько сообщений будутсгруппированы в более крупные кадры.Когда мы уменьшаем размер буфера приема до 100 байт, Wireshark сообщает нам, что наши сообщения больше не группируются, и мы получаем от сервера более мелкие кадры.

Насколько я понимаю, TcpClient работаетна более высоком уровне, и у нас нет контроля над размером кадра.Моя теория состоит в том, что крошечный размер буфера заставляет Windows согласовывать крошечный максимальный размер сегмента , и это приводит к тому, что каждый сегмент помещается в одном кадре.Я здесь далеко?

Согласно Документам Microsoft ...

Свойство ReceiveBufferSize получает или задает количество байтов, которое вы ожидаете сохранитьв буфере приема для каждой операции чтения.Это свойство фактически управляет сетевым буферным пространством, выделенным для приема входящих данных.

Это не сильно помогает.

1 Ответ

0 голосов
/ 21 мая 2018

Оказывается, небольшой размер буфера приводит к тому, что TCP-соединение имеет меньший размер окна .Этот размер окна передается на удаленный компьютер, поэтому он будет знать, сколько данных он может отправить за один раз.Поэтому да, если установить размер буфера на достаточно малое значение, удаленный компьютер будет отправлять данные небольшими порциями.

...