ядро Linux в системной гарантии SMP, что пакеты UDP, прибывающие из сети в порядке, будут считаны из сокета в порядке?

на проекте я продолжаю работать, мы видим неисправные проблемы при определенных обстоятельствах в системе SMP, когда мы читаем поток UDP из сети. Мы видим, что это прибывает из сети в порядок путем сниффинга от концентратора, соединенного между отправителем и получателем. Однако иногда это, кажется, прибывает не в порядке, когда считано из сокета. Есть ли гарантия пакетов UDP в этом случае, или приложение должно реализовать буфер восстановления последовательности? Мы не устанавливаем привязку ЦП здесь, я подозреваю, что это могло бы помочь, но идеально я хотел бы, чтобы все потоки CPU/hw обработали сетевой трафик.

7
задан tylernol 25 June 2010 в 16:33
поделиться

2 ответа

UDP не гарантирует никакого упорядочивания. Это ответственность приложения. Фактически, это даже не гарантирует, что пакеты не будут повторяться / отбрасываться и т. Д. Я предлагаю вам прочитать: http://en.wikipedia.org/wiki/User_Datagram_Protocol

Это не имеет смысла для ядро, чтобы сделать любые такие гарантии, особенно если сами входящие пакеты могут быть не в порядке, поскольку ядро ​​может (разумно) ожидать, что приложение будет иметь дело с этим, если приложение требует упорядочивания.

10
ответ дан 6 December 2019 в 23:01
поделиться

Вы не можете быть уверены, что UDP-пакет не будет потерян во время передачи, поэтому у вас не может быть никаких гарантий упорядочения. Когда система получает, например, пакет №14 и пакет №16, у нее нет возможности узнать, следует ли ей подождать, пока придет пакет №15, прежде чем передавать пакет №16, или пакет №15 был отброшен и никогда не придет. Система просто передаст вам кучу пакетов, а вы должны сами расставить их по порядку.

1
ответ дан 6 December 2019 в 23:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: