Какие события заставляют TCP в ядре Linux отправлять пакеты

#tcp #linux-kernel #network-programming

#tcp #linux-ядро #сетевое программирование

Вопрос:

Поскольку TCP отправляет пакеты асинхронно в пространство пользователя, т.Е. Данные пользовательского пространства помещаются в очередь в буфере отправки и отправляются, когда это разрешено контролем перегрузки и другими алгоритмами, я хочу знать, какие именно события запускают TCP, чтобы проверить, может ли он отправлять больше пакетов.

Мои предположения

  • Когда пользовательское приложение пытается отправить больше данных
  • Когда получено подтверждение, и TCP предполагает, что он может отправлять больше данных

Может быть, я ошибаюсь в своих предположениях, или, может быть, я упускаю другие сценарии. Пожалуйста, поправьте меня.

Ответ №1:

Когда пользовательское приложение пытается отправить больше данных

ДА. Когда приложение выполняет запись в сокет, оно информирует TCP о своем намерении отправить данные. Основываясь на состояниях сокета с точки зрения размера окна, полученных подтверждений и т.д., он примет окончательное решение отправить его по проводам.

Когда получено подтверждение, и TCP предполагает, что он может отправлять больше данных

ДА. Если он повторно передавал ранее, и теперь ACKS подтверждает их, это будет сигналом для TCP, что все в порядке для отправки новых сегментов, которые до сих пор не были отправлены.

Комментарии:

1. Спасибо. Являются ли это единственными сценариями, которые запускают потенциальную отправку пакетов?

2. Тайм-аут повторной передачи — это еще один случай.