Ответ 1
Когда
Если вы хотите предотвратить сброс соединения.
Как
Отправляя что-то после периода бездействия, отправляя TCP/IP KeepAlives или отправляя что-то самостоятельно (рекомендуется с момента установки периода, в течение которого TCP/IP KeepAlives отправляется, будет применяться на системном уровне ко всем подключенным сокетам вместо уровень приложения).
Сколько
Как долго длится строка? Сначала вы должны понять, почему соединение отключено:
Причина, по которой удаляется соединение, следующая:
Домашние/коммерческие "маршрутизаторы" и брандмауэры, которые являются "stateful" и осведомлены о соединении, как правило, теряют внешние TCP-соединения после некоторого периода бездействия
Таким образом, это не имеет ничего общего с вашим приложением или TCP/IP как таковым, а связано с аппаратным или программным обеспечением, с которым проходит ваше соединение. Вы могли бы провести некоторое исследование типичных периодов бездействия, при которых домашние/коммерческие устройства/программное обеспечение, с которыми вы можете столкнуться, могут отказаться от соединения (см. Список ниже). Однако, если партнер может быть потенциально любым пользователем в Интернете:
В конечном счете, если вы не можете знать, какое оборудование/программное обеспечение они проходят: позвольте клиенту установить свой период бездействия (для чего нужно что-то отправить, чтобы поддерживать соединение в сети).
Или отправьте KeepAlives (или ваш эквивалент) через короткие промежутки времени (бездействия) для размещения всех случаев (хотя ненужный трафик - это плохая вещь, когда дополнительный пакет каждые несколько секунд бездействия - это падение океан, за исключением мобильных сетей). Но будьте осторожны в соответствии со спецификацией TCP/IP, которая, как предполагается, переживает временные отключения, поэтому ее слишком низкая может привести к нежелательному влиянию на то, что вы не пережили временный перерыв, от http://aplawrence.com/Bofcusm/2426.html:
Нижняя сторона затягивания параметров keepalive заключается в том, что вы также резко ограничивают устойчивость ПТС в условиях перебоев в работе кабеля. Сессия оба конца которых живы и готовы к нормальной эксплуатации, даже если промежуточный кабель или маршрутизатор отключается в течение нескольких минут. Если вы сказали серверу отчаянно отправить keepalives, он заметит сеансы разрыва кабеля и отключения, которые в противном случае сохранились бы красиво.
Но у вас был бы перерыв, если бы вы все-таки делали какие-то коммиты, поэтому вам нужно справиться с этим, и я думаю, что эта проблема устарела, поскольку у вас нет временных отключений (они, скорее всего, будут постоянными - кабель отключен от сети) с сегодняшними постоянные соединения (в отличие от изворотливого набора). Если у вас есть отключение, вы можете восстановить соединение (например, RDP) или нет (например, Telnet).
Некоторые исследования, которые используют общие приложения:
App | KeepAlive sent after | configurable | ref
--------------------------------------------------------------
Telnet | 600 seconds | Y | http://www-01.ibm.com/support/docview.wss?uid=nas14adccb91a24d9ed28625694900513857
MS RDP | ?
И некоторые исследования того, какие устройства/программное обеспечение отказывают в неактивных соединениях и когда:
Device/SW | dropped after | configurable | ref
--------------------------------------------------------------
Windows 2003 Firewall | 24 hours | ? | http://technet.microsoft.com/en-us/library/cc755604(WS.10).aspx
SonicWall TZ100/200 | 5 mins | Y | http://www.sonicwall.com/downloads/SonicWALL_TZ_100_200_Series_Getting_Started_Guide.pdf
Netgear FR114P | 5 mins | N | http://www.broadbandreports.com/forum/remark,4182300
Cisco ASA | 1 hour | Y | http://www.cisco.com/c/en/us/td/docs/security/asa/asa91/configuration/firewall/asa_91_firewall_config/conns_connlimits.html
Пожалуйста, отредактируйте/уточните эти списки в интересах всех.