Я просеивания через несколько сетевых следов и заметил на своей машине, что при подключении через HTTP, пакеты выглядеть примерно так:полезной нагрузки данных в TCP Ack
client --> server: GET
server --> client: tcp ack
server --> client: HTTP response
client --> server: tcp ack
Однако, я посмотрел на некоторые CIFS (SMB), которые я сохранил за несколько лет назад. Я вижу такие вещи, как:
client --> server: Create Request
server --> client: Create response (This packet also acks the request)
На высоком уровне мне интересно, почему разница - что вызывает разные поведения? Что контролирует, будет ли ответ приложения помещен на запрос ack или другой пакет: приложение или ОС?
Вы можете указать таймер задержки в любых настройках инициализации TCP? – NHDaly
Вы можете отключить его с помощью опции TCP_QUICKACK с помощью setsockopt в соответствии с IPPROTO_TCP (non portable btw). Но изменение значения может быть невозможным, поскольку я считаю, что он жестко запрограммирован, если нет нового sysctl для него (или что-то подобное). – Milan
После того, как я установил параметр TCP-сокета для отключения TCP Quick ACK, я все равно не получил комбинированный пакет: opt = 0; setsockopt (sockfd, IPPROTO_TCP, TCP_QUICKACK, (char *) & opt, sizeof (opt)); –