为什么TCP比HTTP更快?

15

我和我的经理讨论过,他说TCP比HTTP更快是因为TCP在比HTTP更低的层面上运行。

那么我想起我在大学里学过的OSI模型,所以我认为他的意思是因为HTTP在应用层工作,而TCP在传输层工作(比应用层低2层),所以更快...

所以我的问题是:

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

  2. 如果是这样,那么当我们使用TCP(例如WCF)时,通信将从传输层开始=>到物理层=>另一台计算机的物理层=>再次回到传输层? 但我认为数据仍然需要被应用程序理解,所以它仍然必须通过传输到达应用程序层?

提前感谢。


1
就我所理解的这个话题,实际上没有比较它们的真正意义,因为它们都在做完全不同的事情。我的意思是,即使你需要CPU才能使用程序,你也不会将CPU与程序进行比较。 - Sim
1
@Sim 我现在明白你的意思了,应用层中的协议是用于识别通信伙伴等,而传输层则用于数据传输。当HTTP进行数据传输时,它使用传输层,这就是为什么进行比较没有意义的原因。 - King Chan
3个回答

9

TCP协议总是有一个层次在其上面。实际问题是上面的内容增加了多少额外开销。HTTP协议相对来说较为笨重,因为每个传输请求和响应都需要很多头部信息。它也倾向于以无状态方式使用,即每个请求/响应使用一个单独的TCP会话。保持活动状态可以缓解每个请求一个会话的情况,但不能缓解头部信息的问题。


那就意味着无论我们使用什么类型的协议进行数据传输,我们仍然需要访问所有层次,从应用层到物理层再返回到另一侧的应用层?这是否意味着协议所在的层次无关紧要? - King Chan
1
“Always”?如果我直接使用套接字呢? - John Saunders
@KingChan 当两个应用程序进行通信时,总会有在应用程序内存中表示数据的对象(应用层),这些数据作为电信号通过电线传输(物理层)。所有的层都将被涉及。 - CodeCaster
无状态并不意味着分离的连接。HTTP实现会尽最大努力保留TCP连接。 - user207421
@Marcelo:哇!我真的不知道我在写第七层代码。 - John Saunders
显示剩余3条评论

5

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

然而,BasicHttpbinding使用HTTP进行传输,消息首先被封装在XML中(它相当冗长且数据贪婪),然后通过HTTP发送,这会使用大量头部数据。

相反,NetTcp使用一种专有协议,该协议的消息编码和头部专门设计用于减少带宽使用。

在常见情况下,您可能看不到任何区别,但是在处理大量请求或较大量的数据时(尤其是二进制数据,必须编码以适应增加其大小的XML),使用NetTcp可能会带来好处。


4
你说得对:TCP和HTTP是在不同层次上运作的协议。
一般来说,为了让应用程序使用网络,它们需要在应用层上运行。任何给定协议的速度取决于它所需的开销。HTTP通常在TCP上运行,因此它需要TCP的所有开销、TCP下面的所有层的开销以及HTTP本身需要的所有开销(它有一些相当大的头)。
你在比较TCP和HTTP的速度时,实际上是在比较苹果和橙子。更有意义的比较是TCP与UDP以及其他传输层协议之间的比较,以及HTTP与FTP以及其他应用层协议之间的比较。

现在我想知道,这意味着层与速度无关,基本上是协议操作方式影响速度的方式...所以要知道哪个协议比其他协议更快,我需要了解每个协议的工作原理? - King Chan
2
要不用汽车类比来解释一下?这就像说“本田元素比4缸发动机慢”。;-) - mpontillo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接