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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> TCP ACK
dimka76
сообщение Aug 22 2013, 18:39
Сообщение #1


developer
****

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



Насколько я знаю ACK должен отпраляться через 200 mS после приема одиночного пакета или после каждого второго пакета.
На Win 7 x64 столкнулся с тем, что комп иногда отправляет ACK не после каждого второго, а после первого сразу.
Вот поясняющая картинка строчка 1263
Прикрепленное изображение
.

Что это баг или фича ?

Если у кого есть wireshark , то прикладываю сохраненый лог.
Прикрепленный файл  1_1263.rar ( 30.67 килобайт ) Кол-во скачиваний: 73


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 23 2013, 09:18
Сообщение #2


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

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



Ну, видимо, такое поведение у стека в Win7. Собственно говоря, ничем это не грозит, если, конечно, в Вашем стеке все правильно работает.


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


developer
****

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



Спасибо.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Aug 30 2013, 18:00
Сообщение #4


developer
****

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



Дабы не плодить схожие темы продолжу здесь.

Если я отправил подряд два пакета по 1000 байт каждый и перед отправкой очередной порции жду подтверждения, отправленных мною 2000 байт, а мне приходит подтверждение только 1000 байт вместо 2000 байт, что я должен делать в этом случае ?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
krux
сообщение Aug 30 2013, 18:15
Сообщение #5


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата(dimka76 @ Aug 30 2013, 22:00) *
а мне приходит подтверждение только 1000 байт вместо 2000 байт, что я должен делать в этом случае ?

по истечении таймаута на ACK, повторить передачу того пакета в 1000 байт, на который ACK не пришёл.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Aug 31 2013, 04:20
Сообщение #6


developer
****

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



Да, спасибо.

Вполне логично. Но у меня нет времени ждать.
Я думаю, что если не смотря на неподтвержтенные данные продолжать слать пакеты, то компьютер все равно рано или поздно все подтвердит.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 31 2013, 08:43
Сообщение #7


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

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



QUOTE
Но у меня нет времени ждать.
Я думаю, что если не смотря на неподтвержтенные данные продолжать слать пакеты, то компьютер все равно рано или поздно все подтвердит.


Естественно нет. Ибо неполученные пакеты не подтвердит. Их надо перепосылать, на что в простейшем случае тратится время. Однако рекомендую почитать про Fast Retransmit.


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


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



в заголовке TCP пакета есть sequence number и на стороне приема TCP-стек производит reassembly перед тем, как отдать данные в пользовательское приложение. т.е. приложение не получит данные пока не придет "пропавший" пакет. Сделано это для того чтобы пользовательское приложение получило данные по порядку, вне зависимости от того в каком порядке они были переданы по сети. Более того, если этот пакет не придет, то в зависимости от реализации TCP-стека он может решить разорвать соединение.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Aug 31 2013, 17:12
Сообщение #9


developer
****

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



Да нет.
В моем случае пакеты не теряются. Просто (см. первое сообщение топика) в строке 1264 комп отправляет "внеплановый" ACK. А мое устройство его реально получает ( иобрабатыват) только тогда, когда отправило пакет в строке 1265. И ожидает АСК пакета 1265, а на самом деле получает АСК пакета 1263.

И вот я думаю как правильнее сделать реакцию на такую ситуацию в стеке ТСР.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
krux
сообщение Aug 31 2013, 17:40
Сообщение #10


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



обычно хранят как сами отправляемые пакеты, так и их список в виде linked-list. Вновьотправленные пакеты добавляются в конец списка.
По приходу ACK на пакет, его SeqNum ищется в списке - если он есть то освобождается память занятая под пакет, и удаляется запись из списка.
При этом периодически в списке обновляется время относительно момента отправки (условно - TTL). Если значение превысило таймаут - пакет перепосылается.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 31 2013, 17:54
Сообщение #11


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

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



QUOTE
И вот я думаю как правильнее сделать реакцию на такую ситуацию в стеке ТСР.


Правильно - посылать данные дальше (которые новые). Однако, неподтвержденные данные надо сохранять, отбрасывать их только после подтверждения.


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


developer
****

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



Спасибо всем. Буду реализовывать.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
berkl
сообщение Nov 6 2013, 09:48
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 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
 
Go to the top of the page
 
+Quote Post
SFx
сообщение Nov 6 2013, 11:44
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



Цитата(berkl @ Nov 6 2013, 13:48) *
Я не вижу в чем отличия, глазу не за что зацепиться, а в убунте DUP ACKи идут... Причем они есть не на каждом поллинге.


Поле identification в IP пакете увеличилось на один, если нет никаких роутеров между устройствами, и iptables, есть смысл попробовать покопаться в опциях IP-TCP у убунты. попробовать на другом диструбутиве. возможно включена некая эксперементальная фича, которая не совсем нормально работает. В обще, конечно, стек должен такие вещи отрабатывать. попробуйте поглядеть сессия ubuntu-ubuntu и win-ubuntu.
Go to the top of the page
 
+Quote Post
berkl
сообщение Nov 6 2013, 12:16
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 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!" и встала после первого же поллинга smile3046.gif .

Такие дела. Буду думать, спасибо за ответ
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:00
Рейтинг@Mail.ru


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