2010-03-23 4 views
3

Я использую сырые сокеты для создания своего собственного сокета. Мне нужно установить tcp_checksum.
Я пробовал много ссылок, но все не работают (я использую wirehark для тестирования).
не могли бы вы мне помочь.
Кстати, я где-то читал, что если вы установите tcp_checksum = 0. то аппаратное обеспечение автоматически рассчитает контрольную сумму для вас. Это правда? Я попробовал это, но в wirehark tcp_checksum дает значение 0X000 и говорит tcp разгрузка. Я также читал о разгрузке tcp и не понял, это только то, что wirehark не может проверить выгруженную контрольную сумму tcp, но есть правильный?tcp контрольная сумма и tcp разгрузка

EDIT: я понял, что если вы установите tcpChecksum на 0, то сетевая карта установит его, а не операционную систему. я тестировал с помощью wirehark и виртуальной машины, поэтому это объясняет, почему контрольная сумма равна 0x000 (так как пакет даже не переходит к сетевой карте.)
, но мне все еще интересно узнать о вычислении tcp_checksum вручную ... любую помощь или ссылки?

+0

вы фактически получаете ОБОРУДОВАНИЕ для вычисления контрольной суммы, минуя 0000? Не работал для меня. – user666412

ответ

3

This article пытается объяснить, как это делается.

Еще одно место, стоят взглянуть на это для ядра Linux источников, начиная с файла net/ipv4/tcp__ipv4.c

+2

Linux - отличный источник знаний для этого типа информации. Также загляните в спецификации для TCP http://www.rfc-editor.org/rfc/rfc793.txt –

+0

Хороший вопрос о RFC (откуда я забыл это на этот раз) - одна вещь, однако, - tools.ietf.org HTML-страницы гораздо удобнее читать на них: http://tools.ietf.org/html/rfc793#section-3.1 – Kimvais

 Смежные вопросы

  • Нет связанных вопросов^_^