#tcp #linux-kernel #network-programming
#tcp #linux-ядро #сетевое программирование
Вопрос:
Поскольку TCP отправляет пакеты асинхронно в пространство пользователя, т.Е. Данные пользовательского пространства помещаются в очередь в буфере отправки и отправляются, когда это разрешено контролем перегрузки и другими алгоритмами, я хочу знать, какие именно события запускают TCP, чтобы проверить, может ли он отправлять больше пакетов.
Мои предположения
- Когда пользовательское приложение пытается отправить больше данных
- Когда получено подтверждение, и TCP предполагает, что он может отправлять больше данных
Может быть, я ошибаюсь в своих предположениях, или, может быть, я упускаю другие сценарии. Пожалуйста, поправьте меня.
Ответ №1:
Когда пользовательское приложение пытается отправить больше данных
ДА. Когда приложение выполняет запись в сокет, оно информирует TCP о своем намерении отправить данные. Основываясь на состояниях сокета с точки зрения размера окна, полученных подтверждений и т.д., он примет окончательное решение отправить его по проводам.
Когда получено подтверждение, и TCP предполагает, что он может отправлять больше данных
ДА. Если он повторно передавал ранее, и теперь ACKS подтверждает их, это будет сигналом для TCP, что все в порядке для отправки новых сегментов, которые до сих пор не были отправлены.
Комментарии:
1. Спасибо. Являются ли это единственными сценариями, которые запускают потенциальную отправку пакетов?
2. Тайм-аут повторной передачи — это еще один случай.