Используется ли в буфере отправки / приема пакетов та же предварительно выделенная память

#windows #udp #buffer-overflow

#Windows #udp #buffer-переполнение

Вопрос:

У меня есть приложение Windows, потребляющее большие объемы входящего udp-трафика и отправляющее небольшое количество сообщений udp-пакетов «keep alive». Я вижу небольшое количество отбрасываний как при входящих, так и при исходящих. Я был удивлен, что из-за небольшого объема исходящих данных происходили сбои, поэтому я захватил пакеты с помощью netMon и вижу, что все они отправляются с сервера, из 3 отправленных фреймов только 2 поступают на сервер Linux.

Я хотел бы знать следующее: 1. Является ли NetMon клоном в sock_buffer и, следовательно, данные могут быть удалены в буфер пакетов и фактически не отправляются с сервера? 2. Одинакова ли память буфера пакетов как для отправки, так и для получения (т.Е. если буферы приема пакетов используют всю предварительно выделенную буферную память, может ли это привести к потере пакетов при небольшом объеме исходящего трафика)?

Ответ №1:

Первое: буфер отправки и приема пакетов имеет отдельную память. Второе: NetMon работает на более низком сетевом уровне, а не на уровне сокетов. третье: имейте в виду, что UDP — ненадежный протокол, и вы не можете гарантировать, что все пакеты, отправленные с одного конца, будут получены на другом конце. Если вам нужна надежность, вам следует рассмотреть TCP или какой-либо другой надежный протокол.

Кстати, отправитель и получатель находятся в одной локальной сети или Интернете?? Как они связаны? если вы можете описать это, то, возможно, кто-нибудь сможет предложить что-то еще для дальнейшего устранения проблемы.

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

1. Спасибо за ответ. Отвечая на несколько ваших вопросов, да, они находятся в одной локальной сети, я не уверен в точных деталях того, как они подключены (по крайней мере, один коммутатор), и отсутствие TCP не вариант (величина потерь приемлема, но я хотел бы это понять и попытаться улучшить). Итак, если netMon захватывает кадры на отправляющем сервере, означает ли это, что он на 100% уверен, что они вышли на провод (нет места в сетевой карте для их удаления и, следовательно, должна быть проблема с сетью)? Из интереса, есть ли какие-нибудь хорошие документы, которые помогут мне немного лучше понять это? Спасибо

2. хм … во-первых, если оба находятся в одной локальной сети, то вероятность того, что ваши пакеты будут отброшены из-за ненадежности UDP, очень мала. Сам я предпочитаю использовать «Wireshark» (ранее известный как Ethreal) вместо NetMon для отладки такого рода проблем. И существует очень, очень редкая вероятность того, что ваш пакет будет удален в сетевой карте, так что также может возникнуть какая-то другая проблема. Вы пробовали сокращать или останавливать входящие данные и посмотреть, сохраняется ли проблема?? Другими вариантами отладки могут быть включение входа в ваш коммутатор или маршрутизатор для UDP и проверка, доходят ли туда ваши исходящие пакеты??

3. Также, что, в частности, вам нужно понять?? Я имею в виду, какую документацию вы ищете? Подробности протокола UDP? или сведения о прослушивании пакетов (NetMon)?? что-то конкретное?

4. Еще раз спасибо…. Это трудно определить, поскольку это происходит не постоянно, но обычно происходит несколько раз в день, когда у меня есть одно приложение, подписывающееся на несколько потоков многоадресной рассылки (где дополнительные потоки многоадресной рассылки составляют всего 10% от исходного). Я хотел бы лучше понять, как данные поступают по проводам в пространство пользователя. Задействованные буферы и правила доступа к ним.