UDP: как отключить поле чексум?

Тема в разделе "WASM.NETWORKS", создана пользователем Quantum, 24 май 2005.

  1. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    В стандарте описан формат пакетов UDP. Там есть поле, по типу CRC, которое проверяют маршрутизаторы и, если чексум не совпадает (пакет повреждён), они такой пакет дропают. В стандарте ещё сказано, что это поле можно отключить (заполнить нулями) чтоб маршрутизаторы ничего не дропали, что мне собственно и нужно реализовать. В документации Win2k3 написано, что ось командует сетевой карте чтоб она высчитывала этот самый чексум и заполняла данное поле в пакете. Кто-нибудь знает (не)документированный способ отключения этого дела в сокете UDP? Сырые сокеты не предлагать.
     
  2. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
    В МСДН описан флажок UDP_NOCHECKSUM. Однако в SDK написано, что некоторые маршрутизаторы плевать хотели на нули в этом поле - все равно дропают.
     
  3. smax

    smax New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2004
    Сообщения:
    32
    Адрес:
    .ru
    1. контрольная сумма UDP заголока может(но не должна) проверяться только в конечных точках соединения (отправитель-получатель пакета) - это значит, что маршрутизаторы плевать хотели не на пакеты с неверной чексум, а вообще на UDP заголовки :)

    так как маршрутизаторы транспортного уровня касаться не должны :)



    2.(уже не по самому вопросу, а по теме) контрольная сумма считается не по алгоритму CRC, а по алгоритму "сложение в обратном коде (с циклическим переносом из старшего разряда в младший)" - такой же как в заголовке IP.

    но я так и непонял - что это за "сложение" :dntknw:

    буду рад если кто подскажет.



    3. а правда... кто знает точно, в winsock - кто это поле и в какой момент заполняет?
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    За UDP не скажу, но сложение видимо такое (обычное, без переноса), некоторые проги используют для контроля своих пакетов (результат в eax)
    Код (Text):
    1.             mov     esi,data
    2.             xor     eax,eax
    3. @@:         add     eax,dword [esi]
    4.             add     esi,4
    5.             cmp     esi,sizeof.data
    6.             jnz     @B
     
  5. Arvensis

    Arvensis New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    72
    Адрес:
    Russia
    bogrus

    Контрольные суммы Инета описываются в RFC 1071. Там все несколько хитрее, правда, я не знаю, насколько :) Называется "шестнадцатибитная сумма с поразрядным дополнением"
     
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Arvensis

    То, что нужно! Спасибо!



    smax



    Это поле заполняет NIC.