Як з'єднання SSH переживає перезапуск мережі?


63

З оболонки Linux SSH введіть /etc/init.d/network restartдля перезапуску послуги мережі.

Я очікую, що мій SSH-зв’язок загине, оскільки послуга мережі знижується. Але це не так. Дуже круто. Але як це досягає Linux? Як він підтримує моє SSH-з'єднання живим протягом перезавантаження служби?

Відповіді:


69

Це роблять, не роблячи нічого особливого. Мережа перезапускається за менший час, ніж потрібне тимчасове з'єднання TCP, тому з’єднання TCP переживає "відключення" так само, як і переживе будь-який перехідний відключення мережі.

Єдина причина, що Windows не робить того ж, це те, що Windows спеціально скидає з'єднання TCP, коли мережевий інтерфейс виходить з ладу. Це, принаймні, напевно, дуже непомітна справа, оскільки TCP був спеціально розроблений, щоб пережити тимчасові відключення мережі.


1
Девіде, це означає, що стек TCP / IP не перезапускається, правда? Бо якби це було, сервер втратив би сліди SSH-сокету і sshd дочірній процес (спасибі Nils) припинився б. Що викликає наступне питання: Яка служба керує сокетами? ТІА.
Серж Вотьє

@David Schwartz - які параметри можна використовувати, щоб змінити час очікування? Як дізнатись поточне значення очікування? І чи налаштовано це на стороні сервера чи клієнта?
Мартін Вегтер

@MartinVegter Ви дійсно не хочете змінювати параметри синхронізації TCP-з'єднання, оскільки вони повинні координуватись з обох сторін, і возитися з ними може вплинути на здатність TCP обробляти втрати пакетів. Вам краще розробити систему в цілому, щоб легко переносити втрати TCP-зв’язку шляхом відновлення з'єднання.
Девід Шварц

11

SSHD підключає дочірній процес під час з'єднання. Цей дочірній процес не загине, якщо перезапустити або SSHD, або всю мережу. З цієї причини ви можете оновити ssh та / або його конфігурацію, робити service sshd restartі все ще залишатися на зв’язку зі старим ssh-сеансом зі старими налаштуваннями. Крім цього, ssh добре відновлюється від невеликих відключень мережі.


2
SSH навіть не знає про "невеликі відключення мережі" з причини, яку вказав Девід Шварц. Зокрема, це не власність SSH.
користувач207421

Я не впевнений, чи немає ще й програми програмування на стороні ssh. В основному всі служби TCP повинні бути стійкими до відмов - багато з них не відповідають цим. У додатку повинен бути додатковий механізм повторної спроби - тоді служба може навіть пережити "середні" відключення.
Нілс

3
Як пояснив EJP, ваша відповідь правдива, але не має значення.
Жиль

3
Ця відповідь була корисною мені, оскільки вона додала розуміння того, що sshdробити, щоб уникнути подальшого розвитку service sshd restart. Якщо ви оновлюєтесь sshd( оновлення безпеки тощо), дочірні процеси все ще працюватимуть за вихідним кодом (попереднє оновлення), але надалі надаватимуть послуги, а не перериватимуться. Я думаю, наявність розетки для прослуховування для основного sshdпроцесу дуже коротко перервана, однак, коли перший дочірній процес закінчується і мережевий інтерфейс миттєво вказує порт як закритий.
allquixotic

1
@Nils Я знаю, що ти це написав. Але це змушує пересічного читача думати, що роздрібнення актуальне. Але те ж саме відбувається і з програмами, які не розщедрилися. Ваша відповідь виглядає приблизно так: "Оскільки сталь міцніше заліза, яблука червоні"
Даніель Олдер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.