Данные не передаются по сети для поддержания TCP-соединений. Вы можете отправить подтверждение активности сетевого уровня, просто отправив () пакет нулевого байта от одного из узлов или включив опции сокетов, чтобы операционная система периодически отправляла их вам. На мой взгляд, средства поддержки активности уровня приложения (ваш протокол приложения управляет им) обеспечивают лучшую конструкцию / надежность, чем машинный уровень транспортного уровня.
При разработке прикладных протоколов, наложенных поверх TCP для максимальной надежности, обычно требуется, чтобы вы включили какой-то тип неработоспособности (NOOP), ping, heartbeat в дизайн протокола.
Это очень важно, потому что, например, если ваш сервер прослушивает запрос от клиента и клиент отключен после установления соединения, сеанс TCP практически потерян, и ваш сервер может прослушивать вечно. Прерывание соединения не может быть обнаружено, если данные никогда не отправляются или не принимаются !!
Если сервер, по крайней мере, регулярно отправляет noop / ping / heartbeats, исходящий запрос вызовет повторную передачу / тайм-аут уровня TCP, и тогда сервер сможет обнаружить разорванное соединение. Если вместо этого ваше приложение отправляет прикладной уровень "ping" или "привет, как дела?" сообщение, которое вы можете пойти дальше и использовать его, чтобы узнать о состоянии вашего партнера, а не просто базовое соединение.
Например, если одноранговый узел застрял в бесконечном цикле или его дисководы сгорели, только сообщения поддержки TCP не помогают вам понять и снова обратиться к основной проблеме.