【问题标题】:Torrent peer-to-peer connectionTorrent 点对点连接
【发布时间】: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%...

标签: tcp udp forwarding


【解决方案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 连接本身,所以通常只通过超时来跟踪它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    相关资源
    最近更新 更多