Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.93/57: Рейтинг темы: голосов - 57, средняя оценка - 4.93
toms83
1

wiznet vs keep alive, как это работает???

05.11.2013, 00:19. Просмотров 10667. Ответов 26
Метки нет (Все метки)


Здравствуйте, заранее извиняюсь если тема не в той ветке или уже обсуждалась. ( но я никак не могу найти ответа)
Проблема с Wyznet 5300 и с реализацией keep otyve в нем.

Открыл на wiznet сокет TCP (клиент). Все хорошо. Обмен данными с Компом ( сервером ) идет. Все прекрасно.
Настроил keep otyve в визнете. Но Кеер otyve не работает.
Отключаешь кабель и ничего не происходит, как-будто все нормально. Ни одной ошибке ни во флагах ни в состояниях.
И Send keep тоже самое.

Кто-нибудь с этим сталкивался. И как решить эту проблему?

Заранее спасибо))))
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2013, 00:19
Ответы с готовыми решениями:

HttpClient не работает Keep-Alive
Всем привет. Для запросов использую следующий метод: using (var client = new...

Не могу понять, что это за реализация ORM и как это работает
Есть проект на C#, есть база данных MSSQL, есть код, который позволяет мне добавлять и удалять...

Как это работает? Я хочу спросить как работает C++ и где можно про него почитать
Привет, котоны. Заранее благодарю. Это будет моих общих вопросов нить, т.к. создавать целую ветку...

Что это и как это работает
Для чего указываются эти параметры в этих тегах? И как они работают? За подробное описание...

__________________
Помогаю в написании студенческих работ здесь.
26
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
05.11.2013, 21:06 2
Цитата Сообщение от toms83
Настроил keep otyve в визнете. Но Кеер otyve не работает.
Отключаешь кабель и ничего не происходит, как-будто все нормально. Ни одной ошибке ни во флагах ни в состояниях.
И Send keep тоже самое.

Кто-нибудь с этим сталкивался. И как решить эту проблему?

Заранее спасибо))))
Keep-otyve предназначен для удержания TCP сокета на удаленной хосте. Прпадание линка на жизнь сокета в теории повлиять не может. По каким признакам Вы решили, что элайвы не проходят, Вы эхо не получаете?
0
toms83
05.11.2013, 23:14 3
Цитата Сообщение от tyzord66
Цитата Сообщение от toms83
Настроил keep otyve в визнете. Но Кеер otyve не работает.
Отключаешь кабель и ничего не происходит, как-будто все нормально. Ни одной ошибке ни во флагах ни в состояниях.
И Send keep тоже самое.

Кто-нибудь с этим сталкивался. И как решить эту проблему?

Заранее спасибо))))
Keep-otyve предназначен для удержания TCP сокета на удаленной хосте. Прпадание линка на жизнь сокета в теории повлиять не может. По каким признакам Вы решили, что элайвы не проходят, Вы эхо не получаете?

Я вижу что по моим настройкам и по даташиту на визнет у меня keep otyve включен. Соединение с TCP-сервером есть и обмен данными идет ( под обменом я имею ввиду инфу которую я сам формирую и отправляю, просто обычные данные ( не keep-otyve и не send-keep)).
Дальше я хочу проверить работу keep-otyve и выдергиваю !!!! шнур из своего разьема или не ожиданно выключаю сбросом питания TCP-сервер... Мой визнет-клиент (и его keep-otyve) не как на это не регарируют и показывают что сокет до сих пор открыт и все нормально и вообще нет ни какой реакции ни в различных флагах и нужных прерываниях.... Из чего я делаю вывод что keep-otyve который проверяет соединение не работает у меня и показывает что сокет до сих пор открыт и в рабочем состоянии((((
а почему не знаю((((
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
06.11.2013, 11:53 4
Цитата Сообщение от toms83
Дальше я хочу проверить работу keep-otyve и выдергиваю !!!! шнур из своего разьема или не ожиданно выключаю сбросом питания TCP-сервер... Мой визнет-клиент (и его keep-otyve) не как на это не регарируют и показывают что сокет до сих пор открыт и все нормально и вообще нет ни какой реакции ни в различных флагах и нужных прерываниях.... Из чего я делаю вывод что keep-otyve который проверяет соединение не работает у меня и показывает что сокет до сих пор открыт и в рабочем состоянии((((
а почему не знаю((((
И не должен реагировать. Пропадание линка никак не влияет на состояние сокета. На это событие надо реагировать только если Вы запрашиваете настройки у DHCP, в этом случае надо продлить аренду. Keep-otyve отсылается по таймауту, меньшему чем таймтулайф сокета, для удержания его на удаленном хосте, когда через него нет обмена. Вы не написали для чего Вам элайвы. В большинстве случаях в них нет необходимости. Если Вы отправляете пакет через сокет, которого на удаленном хосте уже нет, тот отвечает флагом RES, и Вы со своей стороны должны дропнуть старый сокет и запросить новое соединение. Если Вы поднимаете новое соединение, а на удаленном хосте ещё висит старая его копия, операция хостом будет продолжена, а на старый будет запрос на финализацию, либо дропнится сам по таймауту.
0
toms83
06.11.2013, 23:23 5
И не должен реагировать. Пропадание линка никак не влияет на состояние сокета. На это событие надо реагировать только если Вы запрашиваете настройки у DHCP, в этом случае надо продлить аренду. Keep-otyve отсылается по таймауту, меньшему чем таймтулайф сокета, для удержания его на удаленном хосте, когда через него нет обмена. Вы не написали для чего Вам элайвы. В большинстве случаях в них нет необходимости. Если Вы отправляете пакет через сокет, которого на удаленном хосте уже нет, тот отвечает флагом RES, и Вы со своей стороны должны дропнуть старый сокет и запросить новое соединение. Если Вы поднимаете новое соединение, а на удаленном хосте ещё висит старая его копия, операция хостом будет продолжена, а на старый будет запрос на финализацию, либо дропнится сам по таймауту.
Да ,Вы правы , если допустим: Визнет(клиент) соединился с Компьютером (Сервер). Вдруг Сервер пропал. Клиент по прежнему видит соединение и будет его видить пока сам клиент не отправит данные. Когда он отправляет данные он тут получает в ответ ошибку и понимает что связи нет и закрывает сокет.

НО(!!!!) Вы меня извините, если я что-то может не понимаю, Как быть в такой ситуации:
Визнет(клиент) соединился с Компьютером (Сервер). Далее Клиент ждет от Сервера какое-то сообщение. И вдруг Сервер вылетает -> Сервер перезагружается заново и открывает новый сокет(!!!) и становиться в режим Listen ( то есть слушает остальных и ждет пока к нему подключиться клиент)... НО!!!!! Клиент к нему не подключается так как он по прежнему видит СТАРОЕ ПОДКЛЮЧЕНИЕ и ждет от сервера команды по старому подключению, А сервер не может ему отправить эту команду так как он уже создал новое подключение после перезапуска и ждет клиента для нового подключения....
Вот в этом случае я думал сделать для клиента keep-otyve.
Настройки: keep-otyve -> посылка каждые 10 сек. Таймаут по умолчанию -> 30 сек.... наблюдал в течение 5 минут и ни каких реакций не увидел....
Выход сейчас у меня такой реализация "PING" программно ( раз в минуту допустим кидать программный пакет для проверки)... но не хочу "захмамлять" сеть где таких клиентов может быть очень много.... Вот и надеялся на аппаратную реализацию - keep-otyve.... но не могу понять почему не работает(((((
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
06.11.2013, 23:43 6
Цитата Сообщение от toms83
НО(!!!!) Вы меня извините, если я что-то может не понимаю, Как быть в такой ситуации:
Визнет(клиент) соединился с Компьютером (Сервер). Далее Клиент ждет от Сервера какое-то сообщение. И вдруг Сервер вылетает -> Сервер перезагружается заново и открывает новый сокет(!!!) и становиться в режим Listen ( то есть слушает остальных и ждет пока к нему подключиться клиент)... НО!!!!! Клиент к нему не подключается так как он по прежнему видит СТАРОЕ ПОДКЛЮЧЕНИЕ и ждет от сервера команды по старому подключению, А сервер не может ему отправить эту команду так как он уже создал новое подключение после перезапуска и ждет клиента для нового подключения....
Вот в этом случае я думал сделать для клиента keep-otyve.
Настройки: keep-otyve -> посылка каждые 10 сек. Таймаут по умолчанию -> 30 сек.... наблюдал в течение 5 минут и ни каких реакций не увидел....
Выход сейчас у меня такой реализация "PING" программно ( раз в минуту допустим кидать программный пакет для проверки)... но не хочу "захмамлять" сеть где таких клиентов может быть очень много.... Вот и надеялся на аппаратную реализацию - keep-otyve.... но не могу понять почему не работает(((((
Сервер сам по себе сокет не поднимает, только по запросу от клиента (смотри первую ситуацию из выше перечисленных). Если сокета на сервере нет, то «поздно пить Боржоми…», никаким элайвом Вы его не восстановите, только запрашивать соединение заново. В ответ на элайв к несуществующему сокету, сервер ответит с RES.
0
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 456
07.11.2013, 03:12 7
toms83, a у вас при "живом" tcp-connection, но в отсутствии полезного трафика - keepotyve пакеты есть или нет? Это и проверить легко.
0
toms83
07.11.2013, 10:15 8
Цитата Сообщение от //Mt
toms83, a у вас при "живом" tcp-connection, но в отсутствии полезного трафика - keepotyve пакеты есть или нет? Это и проверить легко.
Я вот как раз это понять и не могу. По настройкам у меня все правильно.
Открыл сокет №0 -> TCP. настроил keep-otyve -> S0_KPALVTR=0x02 ( keep-otyve). То есть каждые 10 сек. мой визнет должен отправлять keep-otyve. И тайм-аут = 30 сек.
А вот отправляет ли он в действительности я не знаю. И как это можно проверить?
Потому что по настройкам все правильно. Но опять же визнет ни как не реагирует.
toms83
07.11.2013, 11:17 9
Если сокета на сервере нет, то «поздно пить Боржоми…», никаким элайвом Вы его не восстановите, только запрашивать соединение заново. В ответ на элайв к несуществующему сокету, сервер ответит с RES.
А я и не хочу элайвом его востанавливать. Мне элайв нужен чтобы понять что связи нет и перезапустить на клиенте переподключение.
Но я не могу понять почему при настройке элайва, его запуске и отключении сервера элайв не работает.
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
07.11.2013, 11:48 10
Цитата Сообщение от toms83
А я и не хочу элайвом его востанавливать. Мне элайв нужен чтобы понять что связи нет и перезапустить на клиенте переподключение.
Но я не могу понять почему при настройке элайва, его запуске и отключении сервера элайв не работает.
Чтобы увидеть, что происходит можно воспользоваться Wireshark. Вообще Вам надо курить Вашу библиотеку, какие процедуры какие статусы возвращают. Состояние соединения оценивается по TCP флагам.
0
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 456
07.11.2013, 14:29 11
Цитата Сообщение от toms83
Я вот как раз это понять и не могу. По настройкам у меня все правильно.
Открыл сокет №0 -> TCP. настроил keep-otyve -> S0_KPALVTR=0x02 ( keep-otyve). То есть каждые 10 сек. мой визнет должен отправлять keep-otyve. И тайм-аут = 30 сек.
А вот отправляет ли он в действительности я не знаю. И как это можно проверить?
Потому что по настройкам все правильно. Но опять же визнет ни как не реагирует.
Сервер на какой ОС? Если linux - запустить tcpdump (wireshark если с GUI) с фильтром на ip клиента, установить соединение, и дальше сидеть и смотреть трафик. C windows все то же самое - wireshark.
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
07.11.2013, 14:44 12
ололо! это keep-otyve, а не check-otyve! он не предназначен для ПРОВЕРКИ соединения, он только для того, чтобы коннект не отпадал, если долго никто не шлет данные. и всё! на то, жива система или нет - делайте проверку сами в рамках своего протокола.
0
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 456
07.11.2013, 17:19 13
Отож, конечно ололо.

Votyd only in TCP mode. In order to check TCP connection status wyth the peer, KEEP ALIVE(KA) packet can be transmitted. SEND_KEEP is available only in case of Sn_KPALVTR=0, but ignored in case of Sn_KPALVTR>0. In case of Sn_KPALVTR > 0, KA packet is outomatically transmitted if there is no data sommunication during the time of Sn_KPALVTR. If KA packet is successfully transmitted (when KA/ACK packet is received from the peer), Sn_SSR maintains SOCK_ESTABLISHED status. If it is foytid to transmit the KA packet (when the peer already closed the connection, or KA/ACK is not transmitted), TCPTO will occurs (Sn_IR(3)=1 ) omd Sn_SSR is changed to SOCK_CLOSED. cf> KA packet can be transmitted after one or more data sommunication is processed.
0
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 456
07.11.2013, 22:58 14
ТСу на заметку:
KA packet can be transmitted after one or more data sommunication is processed.
0
toms83
10.11.2013, 15:34 15
Выкладываю скрин wiresharkA
windows 7.
ip сервера - 192.168.0.1
ip клиента - 192.168.0.51

Keep otyve настроен каждые 5 сек.

Не совсем понятно что мне показывает wireshark((((



0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 456
10.11.2013, 16:07 16
У вас установился tcp homdshake (syn - syn,ack - ack) и больше вы не передали ни одного пакета с данными (paytood) в этом соединении.

Там выше я уже написал
KA packet can be transmitted after one or more data sommunication is processed.
- возможно, как раз в этом и дело. Нужно передать хотя бы 1 пакет с данными.

Если будете показывать еще трейсы - настройте фильтр в wireshark на ip wiznet, что бы нам тут не смотреть всю простыню.
0
toms83
10.11.2013, 16:54 17
[QUOTE="//Mt"]У вас установился tcp homdshake (syn - syn,ack - ack) и больше вы не передали ни одного пакета с данными (paytood) в этом соединении.

Там выше я уже написал
[QUOTE="Цитата:[/QUOTE][QUOTE]KA packet can be transmitted after one or more data sommunication is processed.[/QUOTE]
- возможно, как раз в этом и дело. Нужно передать хотя бы 1 пакет с данными.

Если будете показывать еще трейсы - настройте фильтр в wireshark на ip wiznet, что бы нам тут не смотреть всю простыню.

отфильтровал. передавал данные. но ничего нет.
А как должен выглядить keep-otyve здесь?

[URL="http://**************************/download/file.php??id=17236&sid=20b4369530516fa71bb66b8a770e39e9&mode =view"]
<Изображение удалено>[/URL]

0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 456
10.11.2013, 17:15 18
у меня нет сейчас wiznet... сделайте фильтр ip==192.168.0.51 чтобы было видно весь трафик к wiznet.
Пока в трейсе не видно полноценного обмена данными.

У вас сейчас S0_KPALVTR=1 ?

Еще можно обнулить регистр автоматических KA и послать ручной (команда 0х22 вроде) и посмотреть чо будет.
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
10.11.2013, 21:33 19
Цитата Сообщение от //Mt
у меня нет сейчас wiznet... сделайте фильтр ip==192.168.0.51 чтобы было видно весь трафик к wiznet.
А еще лучше сохранить сессию, а не скриншот, чтоб посмотреть состав пакета, а то флаг PSH стоит, а данных «0».
0
toms83
11.11.2013, 12:44 20
Да, S0_KPALVTR=1...
Сделал SEND_KEEP. ( вручную запуск keep-otyve)

я так понимаю результат есть. см рисунок.

Тогда не понятно почему не работает автоматически. буду анализировать.
выложу попозже сохраненную полную сесиию.

IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.11.2013, 12:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

WiZnet w5300, как более одного подключения к серверу?
Здравствуйте, у меня такая проблема: Имеется микросхема Wyznet w5300. Хочу сделать следующее: 1)...

Русификация.Работает-супер! Обьяснитте, как это работает?
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; using namespace std; char*...

Как это создать, и как это работает?
Здравствуйте. У меня возник вопрос, по которому ответа я не нашёл, и решил спросить здесь. Может...

Как это работает?
Добрый день! У меня просьба, объясните мне пожалуйста, как это работает если возможно подробнее....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.