Проблемы с диапазоном полей идентификации IPv4 - PullRequest
0 голосов
/ 05 июня 2018

Я использовал сокет UDP (IPv4), отправляющий пакет размером 64 КБ в конечную систему.Когда я перехватывал пакеты конечной системы с помощью Wireshark, я обнаружил, что поле IP Identification повторно собранной IP-дейтаграммы находится в диапазоне от 0x0000-0x7fff(0-32767), т. Е. Когда конечная система получила дейтаграмму с ID 0x7fff, следующая дейтаграмма содержитзначение id 0x0000, а не 0x8000.

Меня это сильно смутило.Почему бы не 0x0000-0xffff(0-65536)?

Моя программа-отправитель написана с кодом C #, работающим в Windows7.Марка сетевой карты - Intel.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 05 июня 2018

Значение поля идентификации является выбором отправителя.Его можно распределять любым способом, который нравится отправителю.RFC 791 говорит об этом (выделение добавлено):

Поле идентификации используется для различения фрагментов одной дейтаграммы от фрагментов другой.Модуль протокола-инициатора дейтаграммы Интернета устанавливает в поле идентификации значение, которое должно быть уникальным для этой пары источник-назначение и протокола в течение времени, когда дейтаграмма будет активна в системе Интернет. Модуль протокола-инициатораполной дейтаграммы устанавливает флаг more-фрагментов на ноль, а смещение фрагмента на ноль.

Таким образом, отправляющая система может ограничить свои значения identification до 0 - 0x7fff, пока любойдатаграмма «уникальна ... в течение времени, когда дейтаграмма будет активна».

...