NodeJS ip фрагментация
Этот вопрос предполагает, что модуль Node.js Net не обрабатывает ip-фрагментацию: Node.js, как обрабатывать фрагментацию пакетов с помощью net.Server
Я почти не могу себе представить, что это правда, но я не могу найти никакой документации по этому поводу (пожалуйста, прости меня, если не должно быть слишком трудно найти информацию об этом:-)). Это правда?
Если нет: спасибо, это действительно более безопасный день для меня:-).
Если это правда: как справиться с этой проблемой, если я не знаю, насколько велика вся дейтаграмма?
Ситуация: у меня TCP-соединение со встроенной системой (Wiznet W5500). MSS (максимальный размер сегмента, в основном равный MTU - 40) будет установлен на 536, а пакеты данных имеют переменный размер и могут быть размером более 4 КБ. Таким образом, пакет данных будет отправлен в несколько сегментов. Будет ли событие "on data" инициироваться после получения сегмента или только при получении всего пакета?
Дополнительный вопрос: Прав ли я, что сегмент данных (о чем говорит Wiznet в объяснении регистра MSS) равен ip-фрагменту? Поэтому, если мне нужно отправить 4000 байт (т.е. полезную нагрузку), а MSS установлен на 536, я получу последовательно:
segment1: 536bytes payload
segment2: 536bytes payload
segment3: 536bytes payload
segment4: 536bytes payload
segment5: 536bytes payload
segment6: 536bytes payload
segment7: 536bytes payload
segment8: 248bytes payload
Может ли событие "on data" запускаться только после 8-го сегмента, и будет ли "аргумент data" содержать весь пакет, или может случиться так, что событие "on data" будет запускаться после каждого отдельно полученного сегмента?
Как я могу быть на 100% уверен, что получу весь пакет, прежде чем продолжить его обработку? Решение, о котором я подумал:
- Первые 2 байта пакета данных - это длина байта всей длины, я продолжаю конкатенировать полученные данные, пока не получу столько байтов. Если я получил больше, чем размер пакета, я буду считать, что эти последовательные байты являются началом последующего пакета данных.
Я действительно считаю, что это "решение" несколько сложно, и я надеюсь, что оно не требуется.
Заранее спасибо! Если какая-либо информация отсутствует: извините, пожалуйста, не стесняйтесь просить об этом:-).
1 ответ
Я большой поклонник nodeJS, но в этом случае вы должны использовать Python с Scapy:)