C# UDP NAT 打洞 代码示例
|
admin
2021年2月2日 11:5
本文热度 2945
|
打洞原理:
名称 | 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可以进行双向通信,打洞成功。
C# UDP NAT代码示例下载
该文章在 2021/2/2 11:05:23 编辑过