使用NAT穿越以被動方式連接用戶

本文是其中一篇文章的免費翻譯 DC++ 開發者博客.

經作者許可(以及為了清晰和興趣),我用連結對其進行了著色,並補充了一些個人研究。

介紹

此時,連線對中至少有一個使用者必須處於活動模式。 當任何一方都沒有配置主動模式時,NAT 穿越機制將很有用。 這通常是由於防火牆或 NAT 裝置阻止傳入連線所造成的。

如果兩個客戶端都處於活動模式

發起客戶端發送包含自己的 IP 位址和連接埠的命令 $連接到我 給另一個客戶。 使用此數據,接收命令的用戶端與發起者建立連線。

如果其中一個客戶端處於被動模式

透過集線器,被動客戶端 A 發送命令 $RevConnectToMe 活躍客戶 B然後用指令 $ConnectToMe 回應。

使用NAT穿越以被動方式連接用戶
作為伺服器 S 在上面的情況下有一個直流集線器

如果兩個客戶端都處於被動模式 ADC 中心

不同 NAT 後面的客戶端 A и B 加入了樞紐 S.

使用NAT穿越以被動方式連接用戶
這是從客戶端看與集線器的連接的樣子 A

集線器接受連接埠 1511 上的連線。客戶端 A 透過連接埠 50758 從其專用網路建立傳出連線。集線器反過來查看 NAT 裝置的位址,與其協作並根據客戶端的識別碼將其廣播到客戶端。

顧客 A 發送到伺服器 S 請求協助與客戶建立聯繫的消息 B.

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991

同樣在被動模式下,客戶端 B收到此命令後,必須報告其用於透過 NAT 連接到集線器的專用連接埠。

Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991

客戶收到此訊息後 A 立即嘗試與客戶端建立連接 B 並報告其自己的私有端口。

Hub:		[Outgoing][178.79.159.147:1511]	 	D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991

有什麼興趣? 興趣在於透過已使用的專用連接埠建立到公共位址的新連線來轉移相同連線的端點。

使用NAT穿越以被動方式連接用戶
答對了!

當然,本例中客戶端NAT B 完全有權拒絕客戶端的第一個連線請求 A,但是他自己的請求衝進了這個連接所創建的“洞”中,並且連接建立了。

使用NAT穿越以被動方式連接用戶
適用於整個過程的插圖,但需要注意的是 協議 不使用會話開啟的公共端口 NAT- S,以及私人地址。

尾聲

在撰寫(原始)文章時,大約一半的 DC 用戶端正在被動模式下工作。 這意味著所有可能的連接中有四分之一無法建立。

在未來 DC++將能夠繞過NAT使用現有連接 A- S и B- S 建立直接的客戶端-客戶端連接,即使 A и B 均處於被動模式。

來源: www.habr.com

添加評論