我对P2P中UDP穿越NAT的理解供参考
今天晚上和SPP讨论了下这个问题,于是把问题给想明白了!
其实就是把服务器放在公网,A和B在局网中,A和B 登录服务器后,服务器记录了A和B NAT后的的IP和端口,此时无论是A向B还是B向A发信息,都不会成功。只有当A或B通过服务器知道对方的IP和端口后,就可以先向对方的IP和端口发送信息,虽然不成功,但实际是通知本地防火墙允许接收来处对方IP和端口的数据报,这就是打洞或穿越的过程,这步结束后,A和B就可以相互发送信息,而不再需要通过服务器中转了。
PS:A发信息给B虽然会被拒绝, 但是对于一般的锥形Nat的路由器来说,A已经打了一个洞给B了,所以下次B发信息给A就可以经由那个洞直接进入了!
示例代码:
