фрагментация пакетов для необработанных сокетов - PullRequest
3 голосов
/ 15 ноября 2010

Если я использую необработанные сокеты для отправки UDP-пакета размером 3000 байт, нужно ли мне самому обрабатывать фрагментацию пакета в коде, или же необработанный сокет обрабатывает фрагментацию, аналогичную сокету DGRAM?

Ответы [ 4 ]

5 голосов
/ 15 ноября 2010

Ну, если вы используете UDP, вы на самом деле не отправляете RAW.RAW вообще не будет IP, в этом случае да, вам придется самостоятельно обрабатывать фрагментацию.

С UDP вы получаете поддержку фрагментации IP, которая, ИМХО, достаточно хороша для сетей ближней связи, где коллизии должны быть минимальными.Сделайте связь между двумя системами выделенной подсетью, и это совсем не проблема.

То, что TCP покупает вас через UDP (помимо прочего), это способность стека просто пересылать один фрагмент, еслион теряется или как-то скрывается.С UDP, если это произойдет, все сообщение должно быть отброшено.Хотя это и накладные расходы, и для большинства современных сетей вы, вероятно, можете согласиться с этим компромиссом.

2 голосов
/ 15 ноября 2010

Базовый протокол, IP, по-прежнему обрабатывает фрагментацию. Пока вы не устанавливаете бит DF (не фрагментируйте), у вас все будет в порядке, я думаю.

2 голосов
/ 15 ноября 2010

Нет, фрагментация пакетов обрабатывается на более низком уровне. Вы должны увидеть, что именно вы положили в пакет, выходить. То есть UDP гарантирует границы сообщений.

0 голосов
/ 15 ноября 2010

В зависимости от вашей системы это может быть сделано по-разному.Например, в Linux вы можете попросить нижние уровни обработать обнаружение MTU пути и выдать ошибку (EMSGSIZE), если вы попытаетесь отправить нечто большее, чем (известный) MTU пути.

Как «raw» является необработаннымсокет ты о чем?Другие системы могут просто позволить вам контролировать бит DF (или вы, возможно, создаете большую часть заголовка IP самостоятельно), и в этом случае поведение также будет зависеть от этого.

Как правило, если вы передаете с DF, установите васКак правило, пользователь может выбрать, будет ли обнаружена ошибка в пользовательском пространстве или что нижние уровни на вашем хосте будут обрабатывать обнаружение PMTU и останавливают отправку чего-то слишком большого.Если вы не установите DF, то вы (вероятно) увидите соответствующую фрагментацию от маршрутизатора (ов) вдоль пути.

...