Где буфер из стека TCP/IP, если вы не вызываете recv?

77
9

Скажем, у меня есть сервер, который слушает Port X.

Несколько клиентов подключены к серверу и отправляют данные через команду send.

Что произойдет, если сервер не имеет recv подпрограммы "вымывать" буфер?

Сохраняет ли буфер в вашем собственном процессе или в Windows?

Возможно ли еще "DDos"?

спросил(а) 2021-01-25T19:52:29+03:00 4 месяца, 4 недели назад
1
Решение
89

Что произойдет, если на сервере нет процедуры recv для "сброса" буфера?

Буфер приема, соответствующий этому сокету, заполнится. Когда это произойдет, UDP будет молча отбрасывать входящие датаграммы. TCP отбрасывает входящие датаграммы и не подтверждает их, запуская управление перегрузкой (уменьшая размер окна в Reno/XP или переключаясь в окно задержки в CompoundTCP/Vista+).
Когда вы удаляете некоторые данные из буфера, UDP возобновляет прием датаграмм, как будто ничего не произошло (это ваша проблема, чтобы понять, что вы потеряли данные!), И TCP продолжит принимать и подтверждать пакеты, постепенно увеличивая размер окна (данные в смоделированном потоке будет последовательным, как если бы ничто не было сброшено, когда-либо).

Сохраняет ли буфер в вашем собственном процессе или в Windows?

Это может быть и то, и другое не требует каких-либо срочных требований, если он управляется/принадлежит библиотечному слою, он может также находиться в пространстве пользователя (хотя он практически в пространстве ядра). Это деталь, которая не важна, поскольку, поскольку у вас нет способа прямого доступа к необработанному буфере в любом случае. Вы можете получить доступ к нему только через API, предоставляемый вашей сетевой библиотекой (либо функции Winsock, либо функции сокетов, подобные Berkeley).

Возможно ли еще "DDos"?

Да. DDoS - это атака, которая физически насыщает сетевой кабель. Это не имеет большого значения (или вообще), что вы делаете на стороне программного обеспечения. DDoS необходимо устранить на более высоком сетевом уровне (к которому обычно нет доступа!). После того, как трафик изгоев переместился через "жирные трубы" на вашу подсеть сервера (или на маршрутизатор, соединяющий его вверх по течению), вы больше ничего не можете сделать.
Сети имеют различные физические (оптические или электрические) и логические (например, токены) вкусы, но в любом случае в кабеле может быть только один отправитель. Если кто-то насыщает вашу пропускную способность с помощью DDoS, ни вы, ни маршрутизатор не сможете помещать пакеты в провод, за исключением случайного, случайного. Маршрутизаторы, однако, построены так, чтобы иметь короткие очереди очереди и быстро отбрасывать пакеты, когда очередь заполняется, поэтому практически вам не повезло.

ответил(а) 2021-01-25T19:52:29+03:00 4 месяца, 4 недели назад
64

У меня нет очень глубокого понимания TCP, поэтому это непрофессиональное объяснение может быть не совсем правильным. Релевантные поисковые термины, чтобы узнать больше, - "управление потоком", "окно", "пропускная способность" и "насыщенность".

Посмотрите, что происходит, когда сервер tcp/udp публикуется быстрее, чем клиент потребляет? , где ответ говорит, что "это не будет": соединение позволяет только для определенного количества данных быть "в полете" и прекратить отправку, как только он обнаружит, что достигнут максимум.

Когда все принимающие буферы (NIC, ядро) заполнены и не обрабатываются принимающим приложением, а отправитель продолжает отправлять данные (злонамеренно не придерживаясь протокола TCP), принимающая сетевая карта будет удалять входящие пакеты.

Это все равно будет стоить полосу пропускания, так как пакеты попадают в сетевой адаптер, так что да, это все еще уязвимость DDOS.

ответил(а) 2021-01-25T19:52:29+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема