In che modo la connessione SSH sopravvive al riavvio della rete?


63

Da una shell SSH Linux, digitare /etc/init.d/network restartper riavviare il servizio di rete.

Mi aspetto che la mia connessione SSH muoia poiché il servizio di rete si interrompe. Ma non lo fa. Molto bello. Ma come fa Linux a raggiungere questo obiettivo? In che modo mantiene attiva la mia connessione SSH al riavvio del servizio?

Risposte:


69

Lo fa non facendo nulla di speciale. La rete si riavvia in meno tempo rispetto al timeout della connessione TCP, quindi la connessione TCP sopravvive all'interruzione nello stesso modo in cui sopravviverebbe a qualsiasi interruzione transitoria della rete.

L'unico motivo per cui Windows non fa la stessa cosa è perché Windows reimposta specificamente le connessioni TCP quando un'interfaccia di rete non funziona. Questo è, almeno discutibilmente, una cosa piuttosto complicata da fare perché TCP è stato specificamente progettato per sopravvivere a interruzioni transitorie della rete.


1
David, allora significa che lo stack TCP / IP non è stato riavviato, giusto? Perché se così fosse, il server avrebbe perso la traccia del socket SSH e il processo figlio sshd (grazie a Nils) sarebbe terminato. Il che porta alla domanda successiva: quale servizio gestisce i socket? TIA.
Serge Wautier,

@David Schwartz - quali parametri posso usare per modificare il timeout? Come faccio a scoprire il valore di timeout corrente? Ed è configurato sul lato server o lato client?
Martin Vegter,

@MartinVegter In realtà non si desidera modificare i parametri di temporizzazione della connessione TCP poiché devono coordinarsi su entrambi i lati e il loro danneggiamento potrebbe influire sulla capacità di TCP di gestire la perdita di pacchetti. È meglio progettare il sistema nel suo insieme per tollerare la perdita di connessione TCP senza problemi ripristinando la connessione.
David Schwartz,

11

SSHD esegue un processo figlio sulla connessione. Questo processo figlio non morirà se si riavvia SSHD o l'intera rete. Questo è il motivo per cui puoi aggiornare ssh e / o la sua configurazione, fare una service sshd restarte rimanere comunque connesso alla tua vecchia sessione ssh con le vecchie impostazioni. A parte questo, ssh si riprende bene da piccole interruzioni di rete.


2
SSH non è nemmeno a conoscenza di "piccole interruzioni di rete", per la ragione fornita da David Schwartz. Non è una proprietà di SSH in particolare.
user207421

Non sono sicuro che ci sia anche un po 'di programmazione sul lato SSH. Fondamentalmente tutti i servizi TCP dovrebbero essere tolleranti ai guasti - molti non lo sono. È necessario un ulteriore meccanismo di riprova nell'applicazione, quindi il servizio può anche sopravvivere a interruzioni "medie".
Nils,

3
Come spiegato da EJP, la tua risposta è vera ma irrilevante.
Gilles 'SO- smetti di essere malvagio' il

3
Questa risposta mi è stata utile perché ha aggiunto l'intuizione su cosa sshdfare per evitare di andare avanti service sshd restart. Se si aggiorna sshd( aggiornamento della protezione, ecc.), I processi figlio continuerebbero a essere eseguiti sul codice originale (pre-aggiornamento), ma continuerebbero a fornire assistenza, anziché essere interrotti. Immagino che la disponibilità della presa di ascolto per il sshdprocesso principale venga interrotta molto brevemente, tuttavia, quando termina il primo processo figlio e l'interfaccia di rete indica momentaneamente la porta come chiusa.
allquixotic,

1
@Nils So che l'hai scritto tu. Ma questo fa pensare al lettore medio che il fork sia rilevante. Ma la stessa cosa accade anche per i programmi che non si biforcano. La tua risposta è qualcosa del tipo: "Poiché l'acciaio è più forte del ferro, le mele sono rosse"
Daniel Alder,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.