C# UDP NAT 打洞 程式碼示例
阿新 • • 發佈:2019-02-11
打洞原理:
名稱 | 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 |
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可以進行雙向通訊,打洞成功。