Привет.
Теоретический вопрос.
Есть сервер и клиент. Клиент установил TCP сессию с сервером, сессия "простаивает" и через какое-то время оборудование между клиентом и сервером "обрывает" TCP сессию не уведомляя об этом ни клиента ни сервер. И когда клиент или сервер думая что соединение установлено отправляет данные они не доходят адресату.
Такое возможно? если возможно, приведите пример, пожалуйста.
Легко.
Например между клиентом и сервером фаервол (stateful-девайс).
При переполнении таблицы соединений сатрое соединение будет сброшено из памяти.На роутере с pat/nat трансляциями может переполниться таблица трансляций с тем же эффектом.
Этим страдали например старые циски с маленьким объёмом оперативной памяти, которых сейчас уже вряд ли встретятся, и недавно ещё этим страдали длинковские роутеры при использовании в домашней сети торент-клиента.
Еще пример: из сети с домашним роутером и НАТом зашли по SSH на удаленный сервер, и так и оставили консоль.
Через некоторое время соединение между роутером и провайдером рвется, поднимается заново, но с другим адресом. Соответственно, все старые НАТ-трансляции становятся недействительными.
Итог тот же: если что-то в ссш-консоль напиать, оно не дойдет до сервера (а если и дойдет, то сервер не примет их, т.к. они с другого адреса, о котором сервер ни сном ни духом) и клиент ACK не получит, из-за чего после нескольких ретрансмитов сделает connection timed out
Спасибо за Ваши ответы!
> Спасибо за Ваши ответы!У ната и у динамических правил фаервола есть таймауты.
Лечение:
- на стороне роутера - увеличить таймауты
- на стороне клиентов - использовать механизмы KEEPALIVE, как на уровне приложения так и на уровне сокетов - шлются пакеты с пустыми блоками полезной нагрузки.
> - на стороне клиентов - использовать механизмы KEEPALIVE, как на уровне приложения
> так и на уровне сокетов - шлются пакеты с пустыми блоками
> полезной нагрузки.зачем на уровне приложения-то ?
просто KEEPALIVE опции сокета - недостаточно ?
>> - на стороне клиентов - использовать механизмы KEEPALIVE, как на уровне приложения
>> так и на уровне сокетов - шлются пакеты с пустыми блоками
>> полезной нагрузки.
> зачем на уровне приложения-то ?
> просто KEEPALIVE опции сокета - недостаточно ?Неисповедимы пути в голове софтопейсателя. Или например протокол UDP.
Я просто примеры привел.