|
TCP ACK |
|
|
|
Aug 22 2013, 18:39
|

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

|
Насколько я знаю ACK должен отпраляться через 200 mS после приема одиночного пакета или после каждого второго пакета. На Win 7 x64 столкнулся с тем, что комп иногда отправляет ACK не после каждого второго, а после первого сразу. Вот поясняющая картинка строчка 1263
. Что это баг или фича ? Если у кого есть wireshark , то прикладываю сохраненый лог.
1_1263.rar ( 30.67 килобайт )
Кол-во скачиваний: 73
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 18)
|
Nov 6 2013, 09:48
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Приветствую, отдельную тему не стал создавать, поскольку тоже про ACKи вопрос у меня. Исходные условия. 1. Есть мой девайс, который работает по modbus/TCP, слейв 2. Запускаю коммуникацию под виндой, с пом. утилитки ModbusPoll. Тут всё хорошо 3. Запускаю коммуникацию под Убунтой. Вроде всё хорошо, почти... В Убунте, открыв wireshark, вижу что с компа идет почти с каждым поллингом дублирующий ACK. Как избавится от них ? Погуглил, выяснил, Dup ACK посылается в случае если нарушена очередность следования TCP сегментов или если сегмент утерян. Сегменты очевидно не теряются, иначе были бы ошибки коммуникации. Не правильный порядок сегментов ? А чё тогда под виндой правильный выходит ? В приложение загрузил архив с обоими логами, сделанные и под виндой и в убунте. Я не вижу в чем отличия, глазу не за что зацепиться, а в убунте DUP ACKи идут... Причем они есть не на каждом поллинге. Спасибо !
Прикрепленные файлы
logs.rar ( 9.36 килобайт )
Кол-во скачиваний: 15
|
|
|
|
|
Nov 6 2013, 11:44
|
Знающий
   
Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688

|
Цитата(berkl @ Nov 6 2013, 13:48)  Я не вижу в чем отличия, глазу не за что зацепиться, а в убунте DUP ACKи идут... Причем они есть не на каждом поллинге. Поле identification в IP пакете увеличилось на один, если нет никаких роутеров между устройствами, и iptables, есть смысл попробовать покопаться в опциях IP-TCP у убунты. попробовать на другом диструбутиве. возможно включена некая эксперементальная фича, которая не совсем нормально работает. В обще, конечно, стек должен такие вещи отрабатывать. попробуйте поглядеть сессия ubuntu-ubuntu и win-ubuntu.
|
|
|
|
|
Nov 6 2013, 12:16
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Цитата(SFx @ Nov 6 2013, 15:44)  Поле identification в IP пакете увеличилось на один, если нет никаких роутеров между устройствами, и iptables, есть смысл попробовать покопаться в опциях IP-TCP у убунты. попробовать на другом диструбутиве. возможно включена некая эксперементальная фича, которая не совсем нормально работает. В обще, конечно, стек должен такие вещи отрабатывать. попробуйте поглядеть сессия ubuntu-ubuntu и win-ubuntu. Есть пассивный свитч между девайсом и компом. Да я без него включал на прямки, всё одно. Похоже да, что-то со стеком Убунты, его настройками. Попалась консольная утилитка TCP мастера http://www.modbusdriver.com/modpoll.html, она и на винду и на Линукс. Решил для чистоты экперимента её попробовать. Получилось тоже самое только еще более выражено: под виндой всё тикает. Перезагружаюсь под Убунтой. Тот же долбанный ACK Dup появился, а modpoll вобще подавилась ею. Выдала сообщение "I/O Error!" и встала после первого же поллинга  . Такие дела. Буду думать, спасибо за ответ
|
|
|
|
|
Nov 6 2013, 14:40
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Цитата(Rst7 @ Nov 6 2013, 16:00)  Надо исправить ошибку в стеке Вашего прибора. Обратите внимание на лог с виндой - четвертый пакет (ACK от прибора) суть подтверждение самого первого пакета, а оно не должно посылаться. Разве ? На сколько я знаю, каждое устройство должно откликаться ACKом на каждый TCP сегмент, ему посланный. Да, действительно, 4-ая строка это АСК устройства на TCP сегмент посланный ему компом (первый пакет). И как видим, винда отнюдь не считает его лишним, судя по логу. Update. А может Вы и правы. АСК посылается в составе ТСР пакета. Просто его явно не видно, поскольку wireshark распознает данные на 502 порту как Модбас (и правильно делает), при этом скрывает служебную информацию. только этого не хватало мне
Сообщение отредактировал berkl - Nov 6 2013, 15:03
|
|
|
|
|
Nov 7 2013, 06:16
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 22-03-10
Пользователь №: 56 115

|
Уважаемый Rst7, Касяк я нашел, Вы были правы, он у меня в стеке. Я использую старый, всеми заброшенный openTCP http://sourceforge.net/projects/opentcp/ Может кому-то будет интересно, в файле tcp.c стека, надо строчки 1467 и 1465 местами поменять, тогда ошибка уйдет. Вероятно не было желающих юзать девайсы с openTCP, в связке с линуксовым компом, поэтому очевидный баг не пофиксен оказался. Благодарю Вас
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|