Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Спровоцировать фрагментацию на уровне IP для UDP датаграммы  (Прочитано 31236 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
dimedrol
Помогающий

ru
Offline Offline

« : 26-11-2010 14:00 » 

В процессе тестирования сборки фрагментов в собственном TCPIP стеке возникла проблема тестирования: никак не удается спровоцировать сильную фрагментацию в отсылаемом из Windows приложения пакете. По техническим причинам стек не будет принимать пакеты больше 2000 байт, а если отправлять такой пакет из винды, получается максимум 2 фрагмента. Я пробовал задавать малые значения для SO_SNDBUF, но пакет режется все равно на уровне около 1500 байт. Как можно заставить сокет резать пакет помельче? Очень желательно получить с десяток фрагментов хотябы.
Записан

Как говориться, cемь бед - один Reset Улыбаюсь
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 26-11-2010 15:28 » 

Есть такое понятие MTU. Через ipconfig попробуй уменьшить этот параметр
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
dimedrol
Помогающий

ru
Offline Offline

« Ответ #2 : 30-11-2010 09:47 » 

Через ipconfig похоже невозможно это сделать (WinXP SP2), нашел ссылку на параметр в реестре
Цитата
System Key: [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\
Interfaces\[Adapter ID]]
Value Name: MTU
Data Type: REG_DWORD (DWORD Value)
Value Data: Default = 0xffffffff
но, как ни странно, и он не помог. Я выставил значение 0x20 - с машины спокойно уходили пакеты по 800б одним куском.
Записан

Как говориться, cемь бед - один Reset Улыбаюсь
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 30-11-2010 10:09 » 

Это значит, что винда игнорировала твои опции. Прежде всего, таких пакетов - 32 байта - быть не может.

Вообще, фрагментацию должен делать маршрутизатор. Например, если один его интерфейс - ethernet mtu 1500, а другой - vpn-ppp mtu 1480, по пакет 1500 во второй интерфейс не пролезет и должен быть фрагментирован.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
dimedrol
Помогающий

ru
Offline Offline

« Ответ #4 : 30-11-2010 10:42 » 

я так понимаю нужно минимум заголовок IP + 8 байт чтоб влезал в MTU? Тогда подходит и 32. Или там еще и ethernet кадр учитывается?
А на конкретной машине разве нельзя настроить сразу дробить пакеты?
Записан

Как говориться, cемь бед - один Reset Улыбаюсь
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 30-11-2010 12:58 » 

Ethernet не учитывается.

Объясни, зачем тебе фрагментированный трафик и каковы должны быть его характеристики.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
dimedrol
Помогающий

ru
Offline Offline

« Ответ #6 : 30-11-2010 13:29 » 

фрагментированный траффик нужен для отладки аппаратного TCPIP стека, а конкретно сборки фрагментов. Характеристики: 1.хотябы с десяток фрагментов одного пакета 2.желательно конечно перекрывающиеся и перепутанные фрагменты, хотя этого, видимо, достичь можно только кофигуря маршрутизаторы между клиентом и сервером. В общем пока только первое. В первом посте я писал что у стека ограничение на длинну пакета, бОльшие отбрасываются просто, так что получить фрагментацию надо н пакете не больше 2000 б
Записан

Как говориться, cемь бед - один Reset Улыбаюсь
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 30-11-2010 15:20 » 

dimedrol, кстати, а почему именно 2000? Почему не 65536? Все равно, больше этой цифры в IP4 не может быть пакетов.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 30-11-2010 16:24 » 

dimedrol, современные ядра Linux генерят фрагментированный исходящий трафик (с чем это связано - не знаю, но это факт). Поработай, к примеру, с нашим форумом и снимай при этом трафик снифером. После выдавай этот трафик в сеть.
Чем выдать дамп в сеть не подскажу, ибо мне какого никогда не требовалось. Наверняка подобные программы существуют.
Альтернативно поищи программные генераторы трафика - такой класс программ точно существует.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
dimedrol
Помогающий

ru
Offline Offline

« Ответ #9 : 01-12-2010 07:55 » 

Хорошо, RXL, попробую. Finch, большего не позволяют аппаратные ресурсы - флешка и ОЗУ Улыбаюсь Да и протокол общения по udp не подразумевает больших пакетов
Записан

Как говориться, cемь бед - один Reset Улыбаюсь
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #10 : 01-12-2010 10:04 » 

Выдать самодельный пакет можно попробовать при помощи функции pcap_sendpacket() из библиотеки (win)pcap.
При определённом навыке можно и перепутанные пакеты создавать и фрагментировать как угодно.
« Последнее редактирование: 01-12-2010 10:08 от darkelf » Записан
dimedrol
Помогающий

ru
Offline Offline

« Ответ #11 : 01-12-2010 12:16 » new

Спасибо за идею,darkelf, думаю это можно сделать и на "сырых" сокетах, надо будет попробовать, но прежде поищу нет ли готовых решений
Записан

Как говориться, cемь бед - один Reset Улыбаюсь
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines