C# UDP NAT 打洞 代码示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yeqi3000/article/details/51841579

打洞原理:

名称 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可以进行双向通信,打洞成功。



猜你喜欢

转载自blog.csdn.net/yeqi3000/article/details/51841579