通过在网络中处理数据包来减少存储空间?
Reduce Storage, By Juggling Packets in Network?
我想先说一句,我觉得这个想法不会像我想象的那样奏效,但我不确定为什么。我可能对互联网的工作方式做出了某种错误的假设。
假设服务器 A 有一个大小为 1024 kb 的文件。该文件被分成 1024 个数据包以通过网络发送。服务器A将这1024个数据包通过TCP发送给服务器B。一旦 B 收到一个数据包,它就会将其发送回 A,反之亦然。如果任何第 3 方 C 向 A 请求数据,它会复制从 B 收到的每个数据包并发送给 C 和 B。
在此方案中,服务器 A 可以在将所有数据包发送到 B 后删除其文件,从而释放磁盘 space。服务器 A 和 B 只需要在任何给定时间存储一个数据包,其余数据包将在网络中“杂耍”。
真的可以通过网络“变戏法”来存储数据吗?我是否低估了接收和发送数据包的开销?
编辑:这是假设 100% 的网络可靠性,这可能是一个完全不现实的假设。
网络确实有某种“存储”能力,通常用“Bandwidth-delay product”来衡量。 (将网络视为管道,那么它的存储容量,管道可以容纳的数据(水)量就是该管道的体积,面积长度的乘积。)如果您使用 UDP 等不可靠的协议来执行“循环发送”,超出容量的多余数据会干脆丢掉。如果使用TCP来做,填满“管道”后,发送会填满OS上的内部发送缓冲区,然后阻塞。
我想先说一句,我觉得这个想法不会像我想象的那样奏效,但我不确定为什么。我可能对互联网的工作方式做出了某种错误的假设。
假设服务器 A 有一个大小为 1024 kb 的文件。该文件被分成 1024 个数据包以通过网络发送。服务器A将这1024个数据包通过TCP发送给服务器B。一旦 B 收到一个数据包,它就会将其发送回 A,反之亦然。如果任何第 3 方 C 向 A 请求数据,它会复制从 B 收到的每个数据包并发送给 C 和 B。
在此方案中,服务器 A 可以在将所有数据包发送到 B 后删除其文件,从而释放磁盘 space。服务器 A 和 B 只需要在任何给定时间存储一个数据包,其余数据包将在网络中“杂耍”。
真的可以通过网络“变戏法”来存储数据吗?我是否低估了接收和发送数据包的开销?
编辑:这是假设 100% 的网络可靠性,这可能是一个完全不现实的假设。
网络确实有某种“存储”能力,通常用“Bandwidth-delay product”来衡量。 (将网络视为管道,那么它的存储容量,管道可以容纳的数据(水)量就是该管道的体积,面积长度的乘积。)如果您使用 UDP 等不可靠的协议来执行“循环发送”,超出容量的多余数据会干脆丢掉。如果使用TCP来做,填满“管道”后,发送会填满OS上的内部发送缓冲区,然后阻塞。