реклама на сайте
подробности

 
 
> Помогите с Ethernet TCP/IP, Не понимаю...
alexPec
сообщение Jan 11 2013, 19:57
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Начал писать TCPIP. При отладке началось...

Вопрос №1:
Смотрю пакеты wireshark-ом. Для начала соединил 2 компа и установил TCP соединение. (пакеты на первом рисунке) . Пакет SYN (№51) проходит нормальный, SYN,ACK (52) нормальный, а ACK(53) - уже с ошибкой контрольной суммы. При передаче данных wireshark тоже говорит что пакеты PSH с ошибкой контрольной суммы. Слышал, что КС вычисляется аппаратно кое-где, но тогда поле КС равно 0. А тут не 0. Повторюсь, это при соединении между 2 компами, при этом данные передаются, соединение устанавливается нормально.

Вопрос №2:
Соединяю комп и свой контроллер. Делаю установить соединение (SYN пакет от компа, на втором рис. первый пакет), в контроллере формирую свой пакет SYN,ACK, отсылаю, комп на него не реагирует, а wireshark пишет непонятное "Short segment. Segment/fragment does not contain full TCP header....". Контрольная сумма с ошибкой, но на это уже внимания не обращаю.
После долгих мучений убрал опцию MSS в заголовке, т.е. поля options не стало вообще - все стало ок, соединяется, данные отсылаются, КС в порядке.
Как добавить MSS в заголовок, подскажите. На втором рис пакет, где он добавлен, но wireshark вообще распознавать в нем опции не хочет. Пишет Malformed и все. При этом вычисленная wireshark-ом КС соответствует той, как если бы в пакете не было поля options вообще. Почему добавили одну опцию и пакет стал "does not contain full TCP header" и "Malformed" ???

Все уже перечитал, перепроверил, КС на калькуляторе просчитал - все вроде по науке. Подскажите что-нибудь!
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Jan 12 2013, 10:47
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Для начала рекомендую найти в опциях Ethernet-адаптера TCP/UDP offload checksum и выключить его. Это приведет к корректным контрольным суммам в WireShark. А уже потом дальше разбираться.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 12 2013, 12:45
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата
Для начала рекомендую найти в опциях Ethernet-адаптера TCP/UDP offload checksum и выключить его. Это приведет к корректным контрольным суммам в WireShark. А уже потом дальше разбираться.


Спасибо, ценный совет. Отключил (думал так нельзя, раз железно-значит железно), сейчас КС в порядке в нормальных соединениях.

Цитата
поле опции должны завершаться двумя нулями.
по сниферу у вас видно, что эти нули присутствуют.
Но у вас значения поля содержащее длину заголовка меньше как раз на те два байта, в которых нули.

У вас поле длины заголовка 24, а должно быть 26.

Вы какой стэк используете ?
Готовый или самописный ?


Вот выкладываю две картинки: первая - не ставлю опции, КС в порядке, соединение устанавливается. Вторая - добавляю опцию 0х2 - указание MSS, длина - 0x4 и размер MSS - 0x5b4. Добавил по Вашему совету еще 32-битное поле (видел где-то что опции должны по 32 бита выравниваться, да и размер TCP заголовка в словах по 32 бита) - 0x1 (NOP) 0x1(NOP) 0x0 0x0. Размер заголовка - 28. Видим, завершается двумя нулями, однако же тот же самый ворнинг "Short segment..." и malformed packet. Посчитал вручную КС - совпадает с моей, поставленной в пакете, wireshark хочет видеть КС без учета поля опций. При этом почему то опции вообще не распознает, хотя на компьютерном соединении можно в wireshark развернуть опции и посмотреть что есть что...
Пробовал последние 32 бита забивать нулями, пробовал числа 0x00010101, 0x01010100 - блин, ну не выходит каменный цветок. Ругается всегда одинаково, как на второй картинке, опции видеть не хочет, КС хочет видеть без опций.


Стек за образец взял готовый, микрочиповский, но каждую строчку уже там прочувствовал. IP, ICMP ECHO, UDP, ARP - все работает отлично, вот с TCP - засада какая-то непонятная...


PS Посмотрел пакет ACK SYN нормального TCP соединения компов - опции вообще нулями не заканчиваются (третья картинка), MSS указывается точно также, КС посчитал - все совпадает так как я считаю.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jan 13 2013, 20:06
Сообщение #4


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Вообще, с точки зрения расчета контрольной сумма, оции это просто данные.
Может быть, вы при расчете КС не верный размер данных для вычисления указываете.

RFC4413
Цитата
4.3. Опции

Опции размещаются в конце заголовка TCP и учитываются при вычислении контрольной суммы. Опция может начинаться на любой границе байта. Заголовок TCP должен дополняться нулями для выравнивания по 32-битовой границе.

Необязательные поля заголовка идентифицируются полем типа опции. Опции типа 0 и 1 занимают один октет. Все остальные опции имеют 1-октетное поле типа, за которым следует октет размера (length) и поле данных, размером length-2 октета.


http://rfc2.ru/4413.rfc#p4.3.1


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01416 секунд с 7
ELECTRONIX ©2004-2016