Всегда ли протокол TCP/UDP отправляет или получает пакеты файлов последовательно? Можно ли сделать выбор, какие пакеты данных будут отправляться в первую очередь с помощью сокетов API?
1 ответ
Ни TCP, ни UDP не могут гарантировать, что пакеты прибывают к месту назначения в последовательности, потому что они оба используют IP-пакеты, а IP не выполняет никакой последовательности.
С UDP есть две отдельные проблемы. Одним из них является порядок пакетов, которые составляют одну дейтаграмму. Вы не можете контролировать это, и каждая известная мне реализация будет отправлять их по порядку.
Однако вы можете отправлять свои дейтаграммы в любом порядке. Отдельные фрагменты, которые составляют дейтаграмму, будут переупорядочены приемником для восстановления исходной дейтаграммы. Датаграммы, полученные не по порядку (не в том порядке, в котором они были отправлены), будут переданы приложению в том порядке, в котором они были получены. Датаграмма считается полученной, когда последний фрагмент, необходимый для ее восстановления, получен. Датаграммы будут переданы в приложение по мере их заполнения, независимо от порядка их отправки.
С TCP реализация контролирует формирование пакетов. Вы не можете действительно контролировать это вообще. Каждая реализация, о которой я знаю, будет отправлять их по порядку. Они обязаны переупорядочить их, если они получены не по порядку.