双方都是端口限制NAT能实现P2P打洞吗?-灵析社区

无心插柳柳成萌

如题,我在一个博客里面看到了下表,里面标定双方都是端口限制锥形NAT的时候依旧可以打通P2P。但是我没有想明白是怎么实现的。 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/eba78e24f272cb07ef518abaac94285e.png) 首先确认一下我的概念没有理解错误,`端口限制锥形NAT`在打通后,对应的`NAT公网IP:PORT`只有客户端请求的`服务器IP:PORT`才能访问,其他IP和该服务器的其他端口都不能访问该`NAT公网IP:PORT`。 假设A和B都是端口限制锥形NAT,为了简单起见我直接用客户端的名字来代指最后映射的NAT公网IP地址 1. A给S:80发送请求,建立映射 A:8000 - S:80 2. B给S:80发送请求,建立映射 B:9000 - S:80 3. 但是这两个NAT公网地址都只有S:80能发送请求,S没有办法让A和B直接和对方通信 所以双方都是端口限制锥形的NAT是以什么方式打通P2P的呢,还是说不能打通?求大佬解惑!

阅读量:121

点赞量:0

问AI
你说的第一步和第二步属于NAT探测阶段,还有打洞阶段。第一、二步之后,A 可以通过 S (我理解你指的是STUN服务器)拿到 B 的公网地址和公网端口。打洞阶段: 1. A 需要使用和访问S时同样的内网 IP 地址和端口发送打洞请求给 B, 请求到达 A 前面的 NAT 设备上时,生成一个 A 到 B 的表项,NAT 设备允许了 B 到 A 的请求。 2. A 到 B 的请求报文到达 B 前面的 NAT 设备时,由于 B 前面的NAT设备中没有A、B的会话表项,这个请求会被丢弃。 3. 所以需要 B 同时也用相同的方式给 A 发送打洞请求,在 B 前面的 NAT 设备中生成表项。等两边的 NAT 设备中都存在表项之后,链路就通了。 这是我的理解,希望对你有帮助。