我注意到查看托管在美国服务器(Im in europe)上的图像或网站的速度要慢得多。主要原因是由于距离的延迟。
但是如果1个数据包需要接收n毫秒,那么通过同时发送更多数据包不能缓解这个问题吗?
这是实际发生的还是逐个发送的数据包?如果是的话,是什么决定了可以同时发送多少个数据包(我猜测与电缆有关)?
答案 0 :(得分:3)
但是如果1个数据包需要n毫秒 要收到,不能这样 通过发送更多数据包来缓解 同时?
通过TCP / IP标准不是无限制的,因为有一些算法可以确定可以飞行多少但尚未确认以避免整个网络过载。
这实际发生了吗? 数据包逐个发送?
TCP可以并且确实在“飞行中”保持一定数量的数据包和数据。
如果是,那么决定了多少 数据包可以同时发送 (与电缆有关i 猜)?
什么电缆?无论您使用的是有线,无线还是混合连接序列,都可以使用相同的标准(请记住,您的数据包在通往目的地的路上经过许多路由器,并且路由器的顺序可能会在数据包之间发生变化)。
您可以开始研究TCP,例如wikipedia。您的具体问题涉及congestion control算法和标准,维基百科将为您提供所有相关算法和RFC的指示,但如果您尝试在那个地方开始学习而不需要很多,那么整个图片对您没有多大帮助。对TCP的其他理解(例如,其流控制概念)。
维基百科和类似的百科全书/教程网站只能为您提供摘要摘要,而不会对非专家的可读性或可理解的RFC进行研究。如果你关心TCP,我建议你开始学习Stevens'不朽的三部曲书籍(虽然还有许多其他有效的书,史蒂文斯是我个人最喜欢的。)
答案 1 :(得分:1)
问题在于并行性。
延迟不会直接影响管道的吞吐量。例如,全国各地的自卸卡车具有可怕的延迟,但如果你装满了2TB磁带,那么它的吞吐量非常高。
问题是您的网络浏览器在知道要求的内容之前无法开始询问。因此,当您加载包含十个图像的网页时,您必须等到img
标记到达,然后才能发送请求。所以一切都明显变慢,不是因为你的连接已经饱和,而是因为在发出一个请求和下一个请求之间存在停机时间。
预取器有助于缓解此问题。
就“一次多个数据包”而言,单个TCP连接将同时传输许多数据包,这是由端点正在使用的窗口缩放算法所指定的。但这只能帮助一次建立一个连接......
答案 2 :(得分:1)
TCP使用所谓的滑动窗口。基本上缓冲空间量X,接收器必须重新组装无序数据包。发送方可以发送超过最后一个确认字节的X字节,序列号为N.这样,您可以在假设数据包可能到达的情况下使用X未确认的字节填充发送方和接收方之间的管道,如果不是,接收方将通过不确认丢失的数据包让您知道。在每个响应数据包上,接收器发送一个累积确认,说“我已经将所有字节都放到字节X”。这允许它一次确认多个数据包。
想象一下,客户端从序列号N开始发送3个数据包X,Y和Z.由于路由Y首先到达,然后是Z,然后是X.Y和Z将在目的地堆栈缓冲,当X到达接收器将确认N +(X,Y和Z的累积长度)。这将阻止滑动窗口的开始,允许客户端发送其他数据包。
可以通过选择性确认来确定滑动窗口的某些部分,并要求发送方仅重新传输丢失的部分。在经典方案中,Y丢失了,发送者必须重新发送Y和Z.选择性确认意味着发送者可以重新发送Y.看看wikipedia page。
关于速度,可能减慢你速度的一件事是DNS。如果IP没有被缓存,那么在您甚至可以请求相关图像之前,这会增加额外的往返。如果它不是一个常见的网站,情况可能就是这样。
如果您想了解更多信息,TCP Illustrated volume 1, by Richard Stevens是非常棒的。标题听起来很有趣但是从一个主机到另一个主机的数据包图表和带注释的箭头确实使这些东西更容易理解。这是你可以学习的书之一,然后最终作为参考。这是我关于网络项目的3本书之一。 alt text http://ecx.images-amazon.com/images/I/21NraFSkMOL._SL500_AA300_.jpg
答案 3 :(得分:0)
TCP协议将尝试一次发送越来越多的数据包(我认为),直到它开始注意到它们正在丢弃(数据包在其时间到达时死在路由器/交换机中实时到期)然后它会限制回来。这样它就可以确定它可以使用的窗口大小(带宽)。如果发送主机从其端部注意到大量丢弃的数据包,则接收主机只会将其视为慢速连接。它很可能是用数据爆炸你,你只是没有看到它。
答案 4 :(得分:-1)
我想并行数据包传输也是可能的(ya ..一次发送的数据包数量可能有限制。)U将从主题::>获得有关数据包传输的更多信息。消息交换,分组交换,电路交换&虚电路分组交换......