15

我和我的经理讨论过,他说 tcp 比 http 快,因为 tcp 在低于 http 的层上工作。

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

所以我的问题是

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

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

提前致谢。

4

3 回答 3

9

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

于 2011-10-25T22:17:12.973 回答
5

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

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

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

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

于 2011-10-25T22:24:55.840 回答
4

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

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

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

于 2011-10-25T22:23:29.490 回答