Протокол фрагментированного IP-адреса с ошибкой - PullRequest
0 голосов
/ 11 января 2012

Я делаю приложение в c #. В этом приложении я хочу транслировать некоторые данные, используя протокол UDP. Я делаю сокет как

IPEndPoint ipep = new IPEndPoint(IPAddress.Broadcast, Convert.ToInt32(ServerPort));
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
 EndPoint ep = (EndPoint)ipep;
 socket.SendTo(m_SendBuffer, ep);

Здесь m_SendBuffer содержит данные, которые я хочу отправить.Но всякий раз, когда я наблюдаю трафик через wireshark, он показывает протокол IPV4 и отображает информацию как «Фрагментированный IP-протокол». Пожалуйста, помогите мне, почему это происходит?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 января 2012

Любая данная сетевая ссылка будет обеспечивать максимальный размер для каждой IP-дейтаграммы. Наиболее распространенным является 1500 байт. UDP и IP имеют 28 байтов заголовков, поэтому у вас осталось 1472 байта для полезной нагрузки.

Если вы отправите больше, тогда каждый пакет будет разбит на фрагменты. Они различаются в сети добавлением идентификатора фрагмента в заголовке IP. Если все фрагменты поступят в пункт назначения, они будут собраны в полный пакет, прежде чем они достигнут получающего приложения.

Фрагменты обычно плохие по нескольким причинам:

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

Но избежать фрагментации сложно. Другие объекты в сети, такие как MPLS, PPPoE или VPN, могут добавлять дополнительные заголовки, уменьшая объем данных, которые вы можете безопасно отправлять за пакет. Для обеспечения безопасности сохраняйте размер пакетов менее 1400 байт. Чтобы быть действительно безопасным, держите его ниже 500 байт.

0 голосов
/ 11 января 2012

Из Википедия :

Интернет-протокол (IP) реализует фрагментацию дейтаграмм, так что могут быть сформированы пакеты, которые могут проходить через канал с меньшим максимальным блоком передачи (MTU), чем исходный размер дейтаграмм.

Это означает, что вы отправляете слишком большие пакеты.

...