Ssh
ssh 埠轉發,在遠端和目標之間具有永久連接
我知道您可以使用 ssh 將本地或遠端埠轉發到另一個目的地和埠。例如,假設我有這個命令:
ssh -L *:8443:10.0.0.1:443 user@10.0.0.2
因此,這允許在發出命令的機器上打開一個監聽套接字(假設它的 ip 是
10.0.0.3
)在 port 上8443
。當某些客戶端連接到數據包時10.0.0.3:8443
,數據包流通過它們之間建立的 ssh 通道10.0.0.3
,10.0.0.2
然後 ssh 伺服器10.0.0.2
將數據包轉發到目的地,在本例中為 10.0.0.1:443。我想知道伺服器是否
10.0.0.2
可以建立永久連接,10.0.0.1:443
以便連接10.0.0.2:xxxxx -> 10.0.0.1:443
打開一次並且永遠不會斷開。來自連接到的客戶端的所有流量10.0.0.3:8443
都應使用此永久通道。所以基本上我不希望在建立新客戶端連接到
10.0.0.3:8443
新通道時出現這種10.0.0.2:xxxxx -> 10.0.0.1:443
情況。這可以防止我重用同一個會話並使另一個客戶端在第一個客戶端之後發送的請求無效。
SSH 無法做到這一點。無論如何,這種通用方法一開始就不是一個好主意。
TCP 是字節流而不是消息協議。這意味著如果多個客戶端並行發送消息,則消息可能會混淆。生成的數據可能從客戶端 A 的 msgA 的開頭開始,從客戶端 B 的 msgB 的部分繼續,從 msgA 的另一部分繼續,等等。
因此,實際上需要一個混合器來代替通用方法,該混合器可以理解所說的特定應用程序協議,並確保保留合併數據流中的消息語法,無論客戶端如何發送消息。
請注意,這與 UDP 不同,因為 UDP 是基於消息的。但是您的案例似乎是 TCP。