SOCK_RAW

Тема в разделе "WASM.NETWORKS", создана пользователем like, 18 дек 2008.

  1. like

    like New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    21
    Адрес:
    Чебоксары
    Всем привет.
    Пара вопросов,желательно прямые,краткие и точные ответы. Пинать,отсылать читать RFC пожалуйста не нужно.

    SOCKET socket(int af, int type, int protocol )
    если type=SOCK_RAW, и в опциях задан IP_HDRINCL как обрабатывается параметр prolocol,где-то встретил информацию,что он просто заносится в IP заголовок в поле,где указывается протокол?

    Отправляю IP-датаграммы c нулевой контрольной суммой IP и UDP заголовков,на другом конце принимаю успешно. Какое она тогда имеет значение?
     
  2. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Просто на windows SOCK_STREAM подразумевает TCP/6, а SOCK_DGRAM - UDP/17. На unix больше вариантов (например локальные sockets). API пришёл из Unix мира.
     
  3. like

    like New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    21
    Адрес:
    Чебоксары
    Не очень содержательный ответ. Кто знает точно?
     
  4. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    При использовании IP_HDRINCL заголовок IP для каждого вызова отправки заполняется самостоятельно.
    UDP - ненадежный протокол, вычисление контрольной суммы не обязательно (=0)..
    Контрольную сумму IP вычисляет сетевой стек, поэтому она не задается в коде (=0).
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    researcher
    Правильно.
    Есть 2 поля в кадре, на которые не удастся вам воздействовать на программном уровне (не залезая в дров сетевухи) и в том числе обнулить контрольную сумму.
    Когда кадр сформирован, перед тем как положить его в кольцевой буфер кадров (есть такой внутренний буфер сетевухи) для отсылки, система вычисляет контрольную сумму. Кадр с одной стороны обволакивается преамбулой, с другой - добавляется контрольная сумма.
    В итоге получается нечто такое:
    [Preambula][кадр][чексумма]. Вот так вот
     
  6. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    TermoSINteZ
    Предположу, что эти два поля: ip_id - уникальный идентификатор и ip_offset - смещение фрагмента.
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    researcher
    Ну не совсем, это поля вы можете изменить (тока это уже будет нечто некошерное). Канальный уровень тоже доступен весь. А вот чуть ниже.. Смотрите, Фрейм Ethernet выглядит так:
    [Preamble] [Destination Address] [Source Address] [EtherType] [Payload] [FCS]
    Так вот Preamble и FCS добавляет сетевая карта (то есть ее драйвер). И тут даже NDIS вам не поможет. Нужно ниже брать.
    Для других протоколов, другие поля, с другими назначениями. Но они тоже есть.
     
  8. like

    like New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    21
    Адрес:
    Чебоксары
    Сколько не встретил примеров,везде ее считают самостоятельно,нигде не пишут - не заморачиваемся,за нас все сделает сетевой стек.Почему?)
    Получается можно в поле вызова socket-->protocol вписывать ноль?
     
  9. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    В примерах могут ошибаться, потверждение тому твой работающий код (ведь соединяется!). Поищи примеры из книги Джонс Э., Оланд Дж. "Программирование в сетях Microsoft Windows. Мастер-класс", книга переводная с издания Microsoft Corporation. Глава 13. Простые сокеты. Там есть раздел "Использование IP_HDRINCL".
    Да. Это обычная практика для всех типов сокетов, протокол задается позже, на этапе соединения для клиента или привязки для сервера. Иначе, если Windows не разрешает такой протокол, то сокет может не создаться.
     
  10. like

    like New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    21
    Адрес:
    Чебоксары
    Книга дельная,спасибо.
     
  11. like

    like New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    21
    Адрес:
    Чебоксары
    Удалите этот пост)
     
  12. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    Здесь речь идет о разных вещах. TermoSINteZ говорит о контрольных суммах Ethernet, которые действительно считает дров сетевой карты. А чексуммы IP, TCP и прочего обычно считаются стеком (некоторые сетевухи умеют их считать, т.н. checksum offload)
     
  13. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    TermoSINteZ
    а исходящие syn-пакеты?? слышал что они режутся в драйвере и отправить таковой из user-mode'a вообще невозможно (без патчинга драйверов и других извратов)
     
  14. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    B xp sp2 из юзермода вообще TCP пакеты не отправить