NAT和UDP回复端口


2

扩展 NAT和UDP源端口 / NAT和UDP回复

说爱丽丝和鲍勃在nats后面(两个可以用somhow沟通而不是奇怪的锥形情况,我可以解决这个问题)。

两者都在0.0.0.0上打开本地udp套接字,使用torrent dht发现它们的传出ip:端口( http://www.bittorrent.org/beps/bep_0042.html / bootstrapping)。

这是否足以以两种方式发送udp数据包?说打开一个utp会话。

或者是否仍然需要尝试从Alice到Bob和Bob到Alice的连接以打击可能存在的方式(fw / nats)?

Answers:


1

大多数P2P程序使用的方法是 打孔 , 其中中央服务器用于在双方之间传递信息 关于使用的端口。 使用该信息,各方可以建立直接连接 有效的端口号,以便防火墙或路由器接受 并将传入的数据包转发到开放端口。

我相信你的问题更多地涉及UDP over NAT而没有干预 常见的服务器,这是一般的问题 NAT遍历 。 这里的问题是NAT设备没有自动确定方法 自发起以来,传入数据包所指向的内部主机 party不知道对方正在收听的端口号。

为解决这个问题,开发了几种算法 UDP打孔 。 一些UDP打孔算法依赖于使用相同端口的双方。 其他算法使用临时TCP连接来传递信息 建立UDP连接所需的。

其他 UDP打孔 技术不需要任何端口信息,而是使用其中的算法 双方将开始使用多次尝试相互发送, 并接受至少第一个数据包将丢失的事实。 在第一次尝试失败后,NAT设备有了 已经将数据包发送到另一台机器的记录,因此将通过 来自此IP地址和端口号的任何数据包。 该算法在上面链接的维基百科文章中有详细说明。

这是基于如果从地址接收分组的事实 以前曾尝试过连接,然后即使它在a上 与当地政党试图建立的港口不同的港口 连接,然后它将它切换到正确的端口。这让UDP 数据包通过NAT,因为它的NAT映射已经建立 由当地方试图发送。

所有这些方法的问题在于NAT地址转换技术 没有标准化。因此,用于NAT遍历的方法通常是专有的并且记录不良,以及它们是否有效会有所不同 不同品牌和型号的路由器之间。

IETF有一个完整的工作组,定义NAT设备应该做什么,以减少混乱: 表现 有几种通过NAT设备获取数据的方法,其中一些在BEHAVE页面上列出。还有 STUN 通用即插即用 NAT-PMP ,和 Teredo的


非常全面。充满了链接。真棒!只是为了确保,说我们有爱丽丝,鲍勃和弗雷德。爱丽丝写信给bob(在nat上设置一个会话(lan(ip:port)=> wan(端口),对吗?),bob获取消息,回复给Alice(使用他在其中了解到她的原始地址)然后,Bob将该地址发送给Fred.Fred向Alice发送问候消息,Alice会收到吗?
mh-cbon

1
理论上,是的(NAT设备和防火墙允许)。知道了Alice的IP地址和端口号,Fred可以发送一个将要传送的数据包。这是所有分散式P2P产品背后的原理,其中源发现是通过在由IP地址+端口组成的已知源的成员列表之间传递来完成的。
harrymc

棒极了!
mh-cbon

4

通常,动态NAT通过更改原始连接的源端口来映射连接。通常,映射也受到目标IP地址的限制,并且仅映射回来自相同目的地的分组。 NAT甚至可以将不同的源端口多次映射到不同的目标地址。

使用此类NAT,Alice或Bob需要配置其NAT(手动或使用其他方式,如UPnP)将特定NAT端口映射到其客户端,以便另一方能够使用指定端口启动连接。在连接(或用UDP接收第一个数据包)之后,建立其余的数据包照常流动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.