2

我正在尝试更多地了解 Gniutella P2P 协议的工作原理。我已经阅读了 GnuFU 和我能找到的最新协议规范 (0.4),但我对 PUSH 如何通过防火墙或 NAT 框工作有一些疑问。

案例 1:Alice 通过 NAT 框或防火墙连接到 Internet。她看到 Bob 有一个她想要下载的文件。Bob 没有防火墙。所以 Alice 的客户端打开一个到 Bob 机器的 TCP 连接并下载文件。没问题。

情况 2:与 #1 相同,只是 Bob 想从 Alice 那里得到一个文件。Bob 的客户端无法打开与 Alice 计算机的 TCP 连接,因为它位于防火墙后面。根据我的阅读,Bob 的客户端需要向 Alice 的机器发送一个 PUSH 命令。Alice 的机器收到 PUSH,打开与 Bob 机器的 TCP 连接,并将文件发送给 Bob。我说的对吗?

我的问题: 1) PUSH 数据包如何从 Bob 发送到 Alice?Bob 不能直接发送它,因为他无法打开到 Alice 的 TCP 连接,因为她在防火墙后面。它是否被缓存在某个地方?如果是这样,爱丽丝怎么会知道去寻找它?

2) 这是否仅在 Alice 的 NAT 盒支持 uPNP 和/或端口转发时才有效?如果是这样,如果 Alice 和 Carol 位于同一个 NAT 盒子后面怎么办——路由器如何知道 Bob 试图将 PUSH 发送到哪台计算机?

3) 假设 Alice 试图将一个文件推送到 Bob 的机器上,但 Bob 没有请求该文件。Bob 机器上的服务端是否仍然收到它?还是它拒绝传入的文件?

谢谢,迈克

4

0 回答 0