问题 为什么Tcp比http更快?


我与我的经理进行了讨论,他说tcp比http更快,因为tcp在低于http的层上工作。

然后我记得那个 OSI模型 我在大学里学到的,所以我认为他的意思是因为http在应用层工作,但tcp在传输层工作(下面是2层)所以更快......

所以我的问题是

  1. 较低层的工作速度是否比上层更快是因为在两台计算机之间进行数据传输时需要访问的层数较少?

  2. 如果是这样,那就意味着当我们使用tcp(即使用WCF)时,通信将从传输层开始=>向下到物理层=>另一台计算机的物理层=>直到传输层?但是我的数据仍然需要通过应用程序来理解,所以仍然需要进入应用层?

提前致谢。


7600
2017-10-25 22:11


起源

至于你理解这个话题,在比较它们时没有真正的意义,因为它们都做了完全不同的事情。我的意思是你不要将CPU与程序进行比较,即使你需要它来使用该程序。 - Sim
@Sim我想我现在明白你的意思了,Application层中的协议用于识别comminucation partner等,但是Transport层用于数据传输。当HTTP使用传输层进行数据传输时,这就是比较没有意义的原因。 - King Chan


答案:


TCP上面总是有一层。问题是关于TCP上面的东西增加了多少开销。 HTTP相对较粗,因为每次传输都需要请求和响应中的一堆标头。它还倾向于在无状态模式下使用,其中每个请求/响应使用单独的TCP会话。 Keep-alives可以改进每个请求的会话,但不能改进标题。


8
2017-10-25 22:17



所以这意味着无论我们使用什么类型的协议进行数据传输,我们仍然需要访问所有层应用层到物理层并返回到另一侧的应用层?这是否意味着protocal所在的层没有任何关系? - King Chan
“总是”?如果我直接使用套接字怎么办? - John Saunders
@KingChan当两个应用程序通信时,应用程序存储器中总会有对象表示通过线(物理层)作为电信号接收的数据(应用层)。将触摸所有图层。 - CodeCaster
@JohnSaunders:我认为Marcelo意味着你出于某种原因使用套接字,这个原因是TCP之上的一层 - Andriy Tylychko
无国籍并不意味着单独的联系。 HTTP实现竭尽全力保存TCP连接。 - user207421


我注意到了WCF标签,所以我猜你正在将NetTcp与例如BasicHttp进行比较。正如@Marcelo Cantos指出的那样,两者都驱动了TCP协议。

BasicHttpbinding使用HTTP进行传输,而消息首先封装在XML中(非常冗长且数据急切)然后通过HTTP发送,使用大量数据作为标头。

相反,NetTcp使用(专有?)协议,其中消息编码和报头专门设计用于减少带宽使用。

在常见的情况下,您不会看到任何差异,但在处理大量请求或大量数据(特别是二进制数据,必须进行编码以适应XML,从而增加其大小)时,您可能会通过使用获得好处NetTcp。


4
2017-10-25 22:24



+1让我更好地了解WCF,thx - King Chan


你是对的:TCP和HTTP是在不同层上运行的协议。

通常:为了使应用程序能够利用网络,他们需要在应用程序层进行操作。任何给定协议的速度取决于它所需的开销。 HTTP通常通过TCP运行,因此它需要TCP的所有开销,TCP下所有层的开销,以及HTTP自身所需的所有开销(它有一些相当大的标头)。

在比较TCP和HTTP的速度时,您实际上是在比较苹果和橙子。将TCP与UDP与其他传输层协议(以及HTTP与FTP与其他应用层协议)进行比较更有意义。


3
2017-10-25 22:23



现在我想知道,所以它的平均层数与速度无关,基本上是速度如何影响协议的运作方式......那么要知道哪个协议工作比其他工作更快,我需要知道每个协议工作? - King Chan
+1现在我知道我为你困惑的提示lol - King Chan
汽车类比怎么样?这就像是说“本田元素比4缸发动机慢”。 ;-) - mpontillo