簡體   English   中英

重定向打開的TCP連接

[英]Redirect opened TCP connection

是否可以將打開的TCP連接重定向到第三台設備?

例如,我有兩個都連接到中央服務器的客戶端。 雙方都開始了溝通。 他們不能接受來自Internet外部的任何連接,因為路由器的防火牆阻止了它們。

如果他們想彼此連接怎么辦:是否可以將與服務器的兩個連接重定向為客戶端之間的一個對等連接? (我感覺這是不可能的)我的程序允許兩個設備都可以用作TCP服務器,只是防火牆阻止了它們。

目前,我正在使用兩種解決方案在兩個客戶端之間進行通信。 一種是使用UPnP端口映射,另一種是重復發送到服務器的消息並傳輸到客戶端。

還有其他解決方案嗎? 我對使用C ++,Qt和Linux的方法特別感興趣。

您無法將已經打開的TCP連接重定向到另一個設備,因為在這種情況下,連接的端點需要更改-但是端點(ip + port)是連接的重要組成部分。 因此,您只能將在服務器上接收到的數據從一個連接傳輸到另一個連接,然后再傳輸回去,或者您可以嘗試從TCP穿孔開始,使兩方直接相互連接,就像已經在注釋中提到的那樣。 但這僅適用於簡單的NAT設置。

服務器上的簡單端口轉發不適用於已建立的連接,因為您不僅必須重寫所有數據包的發送方和接收方(例如NAT),而且還必須重寫序列號等,以便它們與其他已建立的連接匹配。 因此,您需要使用套接字拼接之類的技術在用戶空間或內核內部進行連接級別的轉發,而不是在數據包級別進行轉發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM