Если приведенный выше сценарий верен, как операционная система может узнать, что данные поступают по проводам? Это не может быть занятым объединением. Это какой-то механизм на основе прерываний?
Аппаратное обеспечение сообщает об этом, отправляя событие, аппаратное прерывание вызывает запуск обработчика события.
Если поступает слишком много данных и буфер недостаточно велик, произойдет ли потеря данных?
Да, но TCP использует механизм управления окнами. ОС сообщает другому концу, сколько у нее буферов, она может делать это динамически. Так что это может начаться с того, что у меня есть 4 КБ буферов. После того, как 2k прибыл, другой конец может отправить 2k больше, но мы можем подтвердить первые 2k. Если другой конец отправит слишком много, наша ОС откажется от него. Это также скажет это замедлить и повторно признать то, что уже имеет. Когда буферы свободны, мы можем сказать другому концу, чтобы он продолжал, он отправит то, что мы не подтвердили. ОС делает все это для нас при использовании TCP, но не для UDP.
Является ли операция "прослушивание порта" действительно блокирующей операцией?
Да, но очень, очень быстро.
Слушай ничего не делает, только записку для ОС. Если кто-то пытается подключиться к этому порту, это я, который будет обрабатывать это. Это принимает, что ждет этого соединения.
ОС не нужно выделять какой-либо буфер так рано.
Слушай записал некоторые метаданные в таблицу os.
Соединение приходит использует следующий буфер обработки соединения.
Более поздние данные поступают и используют буфер данных, буфер данных не нужно выделять для каждого соединения. Множество ожидающих данных на одном соединении может привести к уменьшению доступных буферов на других соединениях. Ваша ОС может иметь политики и механизмы, чтобы сделать вещи справедливыми.