我曾经问过上传文件实际上是如何工作的。根据收到的回复,我确信上传文件总是包含一个从私有网络到外部的启动过程,就像下载时一样,但有一个区别。使用 POST 命令而不是 GET 命令。
但是,假设我已启动 torrent 客户端,并假设我已完成文件下载。我现在要为文件做种并与其他人共享。
1)这难道不意味着“上传”吗?这会使上述情况无效吗?
2) 如果这是“上传”,那么它难道不是“从外部到我的私有网络打开一个/多个连接,因此,torrent 客户端需要端口转发”,而不是我们提出的请求?
In short, who launches the connection during upload process?
答案1
播种种子不再需要转发端口。有许多先进的技术可以“绕过”NAT,例如NAT 打洞当然,其中大部分都需要一个完全连接的第三方来进行相互协商。
话虽如此,在最简单的情况下,通过转发端口,远端就会启动连接。
您还需要记住,上传和下载只是一个角度问题。这当然与 NAT 等完全无关。如果您从服务器下载某些内容,服务器也会向您上传某些内容。TCP 连接是双向工作的,本地端和远程端都会发送和接收数据。
答案2
无论使用何种技术,上传的工作方式如下。
首先,你有一个客户端和一个服务器。服务器只是监听任何传入信号。
客户端连接到服务器说:“嗨,我想使用你。”服务器响应:“当然,继续,并启动到该端口的连接”(客户端现在成为发送方部分,而不是服务器的初始工作)。
客户端向服务器发起一个命令,表明它想要上传任何内容,比如……一个文件。
服务器接受并准备接收文件。
客户端现在开始像 TCP/IP 那样发送文件:发送 1 个数据包,等待服务器响应已收到,然后发送接下来的 2 个数据包,等待响应,等等。此过程持续进行,直到文件传输完毕。从客户端的角度来看,此阶段为上传,从服务器的角度来看,此阶段为下载。
在 torrent 中,它的工作方式相同。您首先从不同的客户端下载文件,这些客户端会将数据上传给您,然后您开始将数据上传到其他客户端,然后他们再从您那里下载。
torrent 中的服务器是一台机器,它会跟踪谁拥有文件的哪些部分以及某人可以从哪里下载。它不会告诉客户端,你可以从我这里下载,而是说,你可以从客户端 x 下载,就像它会将其他客户端引荐到你的客户端一样。
请注意,使用 torrent 时,您不是在下载完成后才开始上传,而是在您有内容可以提供时立即开始上传。假设您下载了 10kb 的 1mb 文件,那么其他人已经可以从您那里下载这 10kb 了。