Когда я отправлял небольшие данные (16 байт и 128 байт) непрерывно (используйте 100-часовой цикл без какой-либо вставленной задержки), пропускная способность настройки TCP_NODELAY кажется не такой хорошей, как нормальная настройка. Кроме того, TCP-slow-start, по-видимому, повлиял на передачу в начале.Почему скорость TCP/IP зависит от размера отправки данных?
Причина заключается в том, что я хочу, чтобы управлять устройством с ПК через Ethernet. Время обработки этого устройства составляет около нескольких микросекунд, но огромная латентность отправки команды повлияла на всю систему. Не могли бы вы поделиться со мной некоторыми способами решения этой проблемы? Заранее спасибо.
В прошлый раз я измерил производительность передачи между Windows-ПК и встроенной линией для Linux. Чтобы проверить TCP_NODELAY, я настраиваю систему с двумя Linux-ПК, напрямую связанными друг с другом, то есть Linux PC < -> Маршрутизатор < -> Linux PC. Маршрутизатор использовался только для двух ПК.
Производительность без TCP_NODELAY показана следующим образом. Легко видеть, что пропускная способность значительно увеличилась при размере данных> = 64 КБ. Кроме того, когда размер данных = 16 B, иногда полученное время падает до 4.2 us. Есть ли у вас какое-либо представление об этом наблюдении?
Производительность с TCP_NODELAY кажется неизменным, как показано ниже.
Полный код можно найти в https://www.dropbox.com/s/bupcd9yws5m5hfs/tcpip_code.zip?dl=0
Пожалуйста, поделитесь со мной своим мышлением. Заранее спасибо.
Я занимаюсь программированием сокетов для передачи двоичного файла между ПК с Windows 10 и встроенной линией для Linux. Библиотека сокетов - winsock2.h и sys/socket.h для Windows и Linux, соответственно. Двоичный файл копируется в массив в Windows перед отправкой, а полученные данные хранятся в массиве в Linux.
Windows: socket_send (sockfd, & SOPF-> array [0], n);
Linux: socket_recv (& SOPF-> array [0], connfd);
Я мог бы получить все данные должным образом. Однако мне кажется, что время передачи зависит от размера отправляемых данных. Когда размер данных мал, полученная пропускная способность довольно низкая, как показано ниже.
могли бы вы показали мне некоторые документы, объясняющие эту проблему? Заранее спасибо.
Принимаете ли вы с накладными пакетами? При переносе между двумя непрерывными устройствами (т. Е. С низкой вероятностью проблем с NW), чем больше буфер, тем лучше. Когда передача происходит между удаленными устройствами, ошибки и повторные передачи выходят на сцену, и, следовательно, вам необходимо уменьшить размер буфера до оптимального значения. – FDavidov
Упрощенно указано, что для отправки одного пакета есть некоторые фиксированные накладные расходы. Таким образом, при меньших размерах данных вы платите за фиксированные накладные расходы намного больше, чем при большем размере данных. – kaylum
TCP/IP также имеет функцию «медленный старт», которая дросселирует скорость, когда соединение «разогревается». Это повышает стабильность соединения на первых этапах соединения и снижает общий сетевой трафик по отношению к «потерянным» пакетам. – Myst