SSH 터널은 양쪽에서 TCP RST를 어떻게 처리합니까?

SSH 터널은 양쪽에서 TCP RST를 어떻게 처리합니까?

로컬 컴퓨터에서 원격 서버의 데이터베이스로 연결되는 SSH 터널이 있다고 가정해 보겠습니다.

터널에 쿼리를 보내면 다른 쪽 끝으로 나오지만 쿼리를 보내거나 결과를 받는 중간에 데이터베이스가 TCP RST를 트리거합니다. SSH는 이를 어떻게 처리합니까?

할 수 있다:

  1. 끝점에서 ACK를 받을 때까지 어느 쪽에서든 ACK 패킷을 기다리시겠습니까?
  2. 애플리케이션 수준 데이터를 버퍼링하고 성공할 때까지 다시 보내시겠습니까?
  3. 다른?

내 관심사는 터널 ACK가 다른 쪽 끝 ACK보다 먼저 발생하고 다른 쪽 끝이 RST를 보내는 경우 해당 RST를 다시 전파할 수 없다는 것입니다. 양쪽이 매달릴 것입니다.

답변1

왜 "양쪽 모두 매달려" 있습니까? 정말 관찰하셨나요?

TCP/IP Illustrated, Volume 1, 2nd Edition의 14페이지에서 인용되었습니다. 628:

재설정 세그먼트에는 시퀀스 번호와 승인 번호가 포함됩니다. 또한 세그먼트를 재설정해도 상대방으로부터 아무런 응답이 발생하지 않으며 전혀 승인되지 않습니다. 재설정 수신기는 연결을 중단하고 연결이 재설정되었음을 애플리케이션에 알립니다. 이로 인해 일반적으로 "피어에 의한 연결 재설정" 또는 유사한 메시지를 나타내는 오류가 발생합니다.

이전 페이지에서:

연결 중단은 두 가지 기능을 제공합니다. 대기열에 있는 모든 데이터는 삭제되고 재설정 세그먼트가 즉시 전송됩니다. 재설정 수신자는 상대방이 정상적인 종료가 아닌 중단을 수행했음을 알 수 있습니다.

SO_LINGER( 애플리케이션의 청취 소켓이 사용할 수 있는 소켓 옵션을 검토할 수도 있습니다 .)

관련 정보