1. 程式人生 > >C# UDP NAT 打洞 程式碼示例

C# UDP NAT 打洞 程式碼示例

打洞原理:

名稱 IP Port
PC-A 192.168.1.217 8000
NAT-A 61.188.71.155 50020
PC-B 192.168.1.117 8000
NAT-B 61.188.71.105 60020
Server 115.29.97.221 6000
PC-A,PC-B的IP均為各自內網地址。

NAT-A,NAT-B,Server的IP均為公網IP地址。

打洞過程:

1.PC-A傳送資料到Server,Server接收到來自NAT-A,50020埠的資料

2.PC-B傳送資料到Server,Server接收到來自NAT-B,60020埠的資料

3.此時,Server知道了NAT-A和NAT-B的IPPort,於是將它們的IPPort分別發給對方

4.NAT-A收到來自Server的資料(包含NAT-B的IPPort),轉發給了內網的PC-A,PC-A獲知NAT-B的IPPort

5.NAT-B收到來自Server的資料(包含NAT-A的IPPort),轉發給了內網的PC-B,PC-B獲知NAT-A的IPPort

6.PC-A傳送資料到NAT-B的IPort,這個資料包,NATB收到後不會轉發給PC-B,而是丟棄,因為它認為這是來歷不明的包。

7.PC-B傳送資料到NAT-A的IPort,此時PC-A與PC-B可以進行雙向通訊,打洞成功。