Torrent 点对点连接
Posted
技术标签:
【中文标题】Torrent 点对点连接【英文标题】:Torrent peer-to-peer connection 【发布时间】:2012-01-24 20:38:34 【问题描述】:我曾经认为我对 TCP 和 UDP 协议的理解虽然有限,但是是正确的。虽然最近,当我意识到共享一个公共种子的对等方可以通过 TCP 或 UDP 协议相互连接而无需端口转发时,我感到困惑。路由器如何知道将数据包转发到本地网络中的哪台机器?任何有助于清除的帮助将不胜感激。 Internet 上的 torrent 协议图和文章已大大简化,因此不包含任何有用的信息。
【问题讨论】:
仅供参考:90% 的大多数路由器/防火墙阻止 UDP! 你从哪里得到这个统计数据?我的 UDP 应用程序(在家中的多个 SOHO、咖啡店或办公室)从来没有遇到过问题,无论是 tftp、游戏还是自定义的东西。 大多数路由器默认阻止UDP 广播。 @MartinJames 啊,是的,这可能就是 sh4nx0r 所说的。谢谢。另外 - 什么是“大多数路由器的 90%”?那是所有路线的80%吗?我猜它可能只是所有路由器的 50.1% 的 90%... 【参考方案1】:路由器(运行 NAT)跟踪所有传出数据包,然后允许传入数据包,这些数据包是对这些传出数据包的响应。
因此,如果您与 google.com:80 建立传出 TCP 连接,那么它将允许来自 google.com:80 的数据包返回(作为响应)。如果两个内部主机连接到同一个端口,它可以区分它们,因为本地端口不同,例如:
1) 主机 A 与 Google 建立连接,路由器使用自己的本地端口 10001 进行 TCP 连接
2) 主机 B 进行类似的连接,路由器使用自己的本地端口 10002 进行 TCP 连接
如果一个数据包来自 google.com:80 并且它的地址是路由器 WAN IP 上的端口 10001,那么路由器知道将它发送到主机 A。如果它的地址是端口 10002,路由器知道将它发送到主持人 B。
如果您在路由器后面有两台对等主机(两个 NAT),则无法建立连接,除非有东西可以传输有关彼此 IP 的信息(即它们都可以用来交换信息的服务器) ) 他们可以尝试猜测路由器将选择哪个端口作为本地端口,然后开始在该端口上相互发送数据到路由器的 WAN IP。因为两个路由器都看到数据流出,所以它们设置了一条规则以允许数据流入。如果端口猜对了,那么来自每一方的数据包都可以通过,因为两个路由器都设置了规则。这称为 UDP/TCP 打孔。
http://en.wikipedia.org/wiki/UDP_hole_punching
我相信 Skype 是一个使用 UDP 并进行打孔的应用示例。
【讨论】:
感谢您富有洞察力的回复!我相信我现在已经充分理解了这个主题,可以让我的思绪休息一下……暂时。顺便说一句,Skype 是一头聪明的野兽。我认为它可能会检测到您何时与本地网络中的人交谈(我曾经可以在路由器重启后仍连接到 Internet 时与我姐姐交谈)【参考方案2】:严格来说,由于您没有使用“NAT”来限定您的术语路由器,那么答案是路由器使用 ARP 来确定目标主机的 MAC 地址,然后以该 MAC 地址发送以太网帧作为目标地址。
但我认为这不是你的意思。
您的意思是 NATting 路由器如何知道将入站数据包转发到哪里?
答案是路由器维护一个活动“连接”列表,以使其能够进行地址转换。它使用外部端口号映射到内部主机地址和端口号。在 TCP 的情况下,“连接”的概念只是是否存在 TCP 连接(尽管通常有一个超时来阻止泄漏)。在 UDP 的情况下更难,因为没有 UDP 连接本身,所以通常只通过超时来跟踪它。
【讨论】:
以上是关于Torrent 点对点连接的主要内容,如果未能解决你的问题,请参考以下文章
视频Craig Wright|BSV+IPv6:“点对点”是为端到端通信而设计的