гарантирует ли ядро ​​Linux в системе SMP, что UDP-пакеты, поступающие из сети по порядку, будут считываться из сокета по порядку? - PullRequest
7 голосов
/ 25 июня 2010

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

Ответы [ 2 ]

10 голосов
/ 25 июня 2010

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

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

1 голос
/ 25 июня 2010

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

...