Необработанные сокеты собирают пакет? - PullRequest
1 голос
/ 17 октября 2019

Я реализую простое туннелирование и шифрование исходящих IP-пакетов, т.е. каждый пакет + заголовок IP шифруется и добавляется с новым заголовком IP.

Для этой цели я использую необработанные сокеты в отправителе и получателе. .

Я просто пытаюсь выяснить, может ли фрагментация исходящих пакетов привести к невозможности их повторного дешифрования.

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

1 Ответ

0 голосов
/ 17 октября 2019

Это зависит от ОС, но обычно это зависит от того, как вы их читаете. Взгляните на пару документов linux на POSIX-сокетах:

В частности, вы используете SOCK_RAW, тогда recvfrom не всегда будет возвращать полные пакеты. См. Следующие цитаты:

Если сообщение слишком длинное, чтобы поместиться в предоставленный буфер, лишние байты могут быть отброшены в зависимости от типа сокета, из которого получено сообщение.

Если len слишком мал, чтобы вместить весь пакет, лишние байты будут возвращены при следующем чтении.

При получении вызовов обычно возвращаются любые доступные данные, вплоть до запрошенной суммы, ачем ожидание получения всей запрашиваемой суммы.

К вашему вопросу:

Предоставляют ли необработанные сокеты собранный пакет, или мне нужно самостоятельно выполнить дефрагментацию?

Они этого не делают, вам нужно отделить себя. Если сокет не очищен или происходит фрагментация, вызов вернет все доступные данные, возможно, только частичные пакеты, ожидая, что вы их реструктурируете.

...