У меня есть некоторые сомнения по поводу увеличения размера окна TCP в приложении. В моем программном приложении С++ мы отправляем пакеты данных размером около 1k с клиента на сервер с использованием блокировки TCP/IP. Недавно я столкнулся с этим понятием TCP Window Size. Поэтому я попытался увеличить значение до 64K, используя setsockopt()
для SO_SNDBUF
и SO_RCVBUF
. После увеличения этого значения я получаю некоторые улучшения в производительности для WAN-соединения, но не в подключении к локальной сети.
В соответствии с моим пониманием в размере окна TCP,
Клиент отправит пакеты данных на сервер. Достигнув этого размера окна TCP, он будет ждать, чтобы убедиться, что ACK получен с сервера для первого пакета в размере окна. В случае подключения к глобальной сети, ACK задерживается с сервера клиенту из-за задержки в RTT около 100 мс. Поэтому в этом случае увеличение размера окна TCP компенсирует время ожидания ACK и тем самым улучшает производительность.
Я хочу понять, как производительность улучшается в моем приложении.
В моем приложении даже несмотря на то, что размер окна TCP (как отправителя, так и получателя) увеличивается с использованием setsockopt
на уровне сокета, мы сохраняем тот же размер пакета 1k (то есть байты, которые мы отправляем с клиента на сервер в одиночный сокет). Также мы отключили алгоритм Nagle (встроенная опция для консолидации небольших пакетов в большой пакет, тем самым избегая частого вызова сокета).
Мои сомнения таковы:
-
Поскольку я использую блокирующий сокет, для каждого пакета передачи данных из 1k он должен блокироваться, если ACK не поступает с сервера. Как повысить производительность после улучшения размера окна TCP в WAN-соединении? Если я неправильно понял концепцию размера окна TCP, пожалуйста, исправьте меня.
-
Для отправки 64 тыс. данных, я считаю, что мне все равно нужно вызвать функцию отправки сокетов 64 раза (так как я отправляю 1 кэш для отправки через блокирующий сокет), хотя я увеличил размер окна TCP до 64 КБ. Пожалуйста, подтвердите это.
-
Каков максимальный предел размера окна TCP с масштабированием окон, включенным с помощью алгоритма RFC 1323?
Я не так хорош в своем английском. Если вы не смогли понять ни одного из вышеуказанных вопросов, пожалуйста, дайте мне знать.