SSH 연결은 네트워크를 다시 시작한 후에 어떻게 유지됩니까?


63

Linux SSH 쉘에서 입력 /etc/init.d/network restart하여 네트워크 서비스를 다시 시작하십시오.

네트워크 서비스가 다운 된 후 SSH 연결이 종료 될 것으로 예상합니다. 그러나 그렇지 않습니다. 매우 시원합니다. 그러나 리눅스는 어떻게 이것을 달성합니까? 서비스가 다시 시작될 때 SSH 연결이 어떻게 유지됩니까?

답변:


69

특별한 작업을 수행하지 않습니다. TCP 연결 시간이 초과되는 것보다 짧은 시간 내에 네트워크가 다시 시작되므로 TCP 연결은 일시적인 네트워크 중단에도 불구하고 "정지"상태에서 유지됩니다.

Windows가 똑같이하지 않는 유일한 이유는 네트워크 인터페이스가 다운 될 때 Windows가 TCP 연결을 특별히 재설정하기 때문입니다. TCP는 특히 일시적인 네트워크 중단에도 견딜 수 있도록 특별히 설계 되었기 때문에 이것은 아마도 논란의 여지가 있습니다.


1
David, 그렇다면 TCP / IP 스택이 다시 시작되지 않았 음을 의미합니까? 서버 인 경우 서버가 SSH 소켓을 추적하지 못하고 sshd 하위 프로세스 (Thanks 덕분에)가 종료되기 때문입니다. 다음 질문은 소켓을 관리하는 서비스입니다. 티아.
Serge Wautier

@David Schwartz-타임 아웃을 변경하기 위해 어떤 파라미터를 사용할 수 있습니까? 현재 시간 초과 값을 어떻게 알 수 있습니까? 그리고 서버 쪽 또는 클라이언트쪽에 구성되어 있습니까?
Martin Vegter

@MartinVegter TCP 연결의 타이밍 매개 변수는 양쪽에서 조정해야하며이를 엉망으로 만들면 TCP의 패킷 손실 처리 능력에 영향을 줄 수 있으므로 TCP 연결의 타이밍 매개 변수를 변경하고 싶지 않습니다. 연결을 복구하여 TCP 연결 손실을 완벽하게 허용하도록 시스템 전체를 설계하는 것이 좋습니다.
David Schwartz

11

SSHD는 연결시 하위 프로세스를 분기합니다. SSHD 또는 전체 네트워크가 다시 시작되면이 하위 프로세스는 종료되지 않습니다. 이것이 ssh 및 / 또는 구성을 업데이트 service sshd restart하고 이전 설정으로 이전 ssh 세션에 계속 연결되어 있는 이유 입니다. 그 외에도 ssh는 소규모 네트워크 중단에서 잘 복구됩니다.


2
SSH는 David Schwartz가 제공 한 '소규모 네트워크 중단'에 대해서도 알지 못합니다 . 특별히 SSH의 속성이 아닙니다.
user207421

ssh 측에 약간의 프로그래밍이 포함되어 있지 않은지 확실하지 않습니다. 기본적으로 모든 TCP 서비스는 내결함성이 있어야합니다. 대부분은 그렇지 않습니다. 응용 프로그램과 관련된 추가 재시도 메커니즘이 필요합니다. 서비스는 "중간"중단에도 견딜 수 있습니다.
Nils

3
EJP에서 설명했듯이 귀하의 답변은 사실이지만 관련이 없습니다.
Gilles

3
이 답변은 sshd계속 진행되는 것을 피하는 방법에 대한 통찰력을 추가했기 때문에 나에게 유용 했습니다 service sshd restart. 업데이트 sshd(보안 업데이트 등)를해도 하위 프로세스는 여전히 원래 코드 (사전 업데이트)에서 실행되지만 중단되지 않고 계속 서비스를 제공합니다. sshd첫 번째 자식 프로세스가 종료되고 네트워크 인터페이스가 일시적으로 포트를 닫은 것으로 표시하면 주 프로세스 의 청취 소켓 가용성 이 매우 잠시 중단 된 것 같습니다.
allquixotic

1
@ Nils 나는 당신이 그것을 썼다는 것을 알고 있습니다. 그러나 이것은 일반적인 독자가 포크와 관련이 있다고 생각하게합니다. 그러나 포크하지 않는 프로그램에서도 마찬가지입니다. 당신의 대답은 다음과 같습니다 : "철은 철보다 강하기 때문에 사과는 ​​붉습니다"
Daniel Alder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.