Я выбрал UDP в качестве моего однорангового сервиса, и как я могу доказать, что он надежен в моей ситуации - PullRequest
1 голос
/ 18 декабря 2011

У меня есть два сервера Debian, расположенных в одной подсети. Они связаны выключателем. Я знаю, что UDP ненадежен.

Вопрос 1: Я полагаю, что канальный уровень - Ethernet. И MTU от стандарта Ethernet составляет 1500 байт. Тем не менее, когда я сделал пинг с одного сервера на другой, я узнал, что максимальный размер пакета может быть отправлен 65507. Не должно ли быть 1500 байт? Могу ли я сказать, потому что между этими двумя серверами нет маршрутизатора, поэтому IP датаграмма будет не быть фрагментированным.

Вопрос 2. Поскольку два сервера напрямую связаны с коммутатором, могу ли я Предположим, что все дейтаграммы приходят в порядке и без потерь на пути?

Вопрос 3. Как определить, что шансы на дейтаграмму упали? на сервере из-за переполнения буфера. Какой размер установить приемный буфер, чтобы датаграмма не переполняла приемный буфер.

Ответы [ 4 ]

4 голосов
/ 18 декабря 2011

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

  1. Вы провели тест ping с включенной фрагментацией. Кроме того, ping использует не UDP, а ICMP, поэтому результаты ничего не значат. Пакеты UDP, меньшие, чем MTU, не будут фрагментированы, но MTU зависит от большего количества факторов, таких как параметры IP и заголовки VLAN, поэтому оно может быть не больше 1500.

  2. Нет. Коммутаторы выполняют буферизацию, и внутренние буферы могут переполняться. Рассмотрим 24-портовый коммутатор, где все 23 узла максимально быстро передают данные на последний узел. Очевидно, что соединение с последним узлом не может обрабатывать совокупный трафик 23 других каналов, коммутатор будет пытаться буферизовать пакеты, но в конечном итоге отбрасывает их.

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

  3. Чтобы проанализировать вероятность переполнения буфера, вы можете использовать теорию очередей, чтобы найти вероятность того, что пакет прибудет, когда буфер заполнен. Вам понадобятся некоторые предположения относительно распределения вероятностей по скорости передачи пакетов и времени обработки. Затем количество пакетов в буфере образует конечную цепочку, надеюсь, Маркова, которую можно решить для вероятностей стационарного состояния каждого состояния в цепочке. Хорошие ключевые слова для поиска, чтобы узнать больше, это "теория очередей", "цепь Маркова", "емкость вызова", "емкость канала", "коэффициент нагрузки".


РЕДАКТИРОВАТЬ: Вы изменили название вопроса. Ответ на ваш новый вопрос: «Вы не можете доказать то, что не соответствует действительности». Если вы хотите создать надежное приложение с использованием UDP, вы должны добавить свою собственную логику подтверждения и обработки потерь.

0 голосов
/ 18 декабря 2011

Вопрос 1: Вы путаете MTU с максимальным размером пакета tcp, см. здесь

Вопрос 2. Два сервера, подключенные через коммутатор, не гарантируют поступление дейтаграмм в порядке. Будут происходить другие сетевые передачи, которые будут мешать потоку udp, потенциально вызывающему непоследовательность кадров

Вопрос 3: ответил Бен Фойгт выше.

0 голосов
/ 18 декабря 2011
  1. Стек IP будет фрагментировать и дефрагментировать пакет для вас.Вы можете проверить это, установив флаг без фрагмента.Пакет будет отброшен.

  2. Нет.Скорее всего, они придут в порядке и, вероятно, не будут отброшены, но сетевой стек в отправителе, маршрутизаторе и получателе может свободно отбрасывать пакет, если он не может обработать его при поступлении.Также помните, что когда большой пакет фрагментирован, один потерянный фрагмент означает, что весь пакет будет отброшен стеком.

  3. Полагаю, вы можете проверить, отправив 1000 пакетов и измерить потери,но исторические ценности не предсказывают будущее ...

0 голосов
/ 18 декабря 2011

Максимальный размер пакета 64 КБ является абсолютным пределом протокола, в отличие от 1500-байтового MTU, который вы, возможно, настроили (MTU может быть легко изменен, ограничение 64 КБ не может).

На практике вы, вероятно, никогда не увидите переупорядоченные дейтаграммы в вашем сценарии. И вы, вероятно, потеряете их, только если принимающая сторона обрабатывает их недостаточно быстро (или полностью отключена).

«Вероятность» потери дейтаграммы получателем - это не то, что мы можем количественно оценить, не зная намного больше о вашей ситуации. Если получатель обрабатывает дейтаграммы быстрее, чем отправляет их отправитель, у вас все в порядке, в противном случае вы можете потерять некоторые из них - точно знать, сколько и когда именно это намного более точная точка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...