Как правильно подходить к контрольному суммированию пакетов UDP - PullRequest
1 голос
/ 09 марта 2010

Я создаю серверное приложение UDP на C #. Я столкнулся с проблемой контрольной суммы пакета.

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

Теперь UDP уже имеет 2-байтовую контрольную сумму как часть заголовка, что необязательно, по крайней мере, в мире IPv4. Альтернативный метод состоит в том, чтобы иметь пользовательскую контрольную сумму как часть раздела данных в каждом пакете и проверять ее на получателе.

Мой вопрос сводится к следующему: лучше ли полагаться на (необязательную) контрольную сумму в заголовке UDP-пакета или создать собственную контрольную сумму как часть раздела данных пакета?

Возможно, правильный ответ зависит от обстоятельств (как обычно), поэтому одним из обстоятельств здесь является то, что, хотя код написан и разработан в .NET для Windows, он может должен работать в независимой от платформы платформе. Mono.NET, поэтому возможное решение должно быть совместимо с другими платформами. Я полагаю, что пользовательский алгоритм контрольной суммы будет легко переносимым, но я не очень уверен насчет первого.

Есть мысли?

Также приветствуются крики о проверке контрольных сумм в целом.

1 Ответ

1 голос
/ 09 марта 2010

Нужно ли считать ошибки? Если контрольная сумма UDP неверна, любой маршрутизатор может просто выбросить пакет, и вы ничего не получите.

Конечно, если в заголовке есть ошибка (например, IP-адрес назначения), вы также не получите ее.

Кроме того, алгоритм контрольной суммы UDP полностью стандартизирован, хотя вызов функции для включения или выключения контрольных сумм зависит от платформы, хотя обычно включает setsockopt.

...