什么是开销、有效负载和标头 [关闭]

Posted

技术标签:

【中文标题】什么是开销、有效负载和标头 [关闭]【英文标题】:what is overhead, payload, and header [closed] 【发布时间】:2014-09-12 20:03:19 【问题描述】:

谁能解释一下什么是开销、有效负载、标头和数据包。据我所知,数据包是要传输的全部数据。这个数据包由我认为是有效载荷的实际数据组成,数据包的源/目标信息在标头中。所以一个数据包由头部和有效载荷组成。那么这个开销是多少呢?开销是标题的一部分吗?我从互联网上得到这个“偷听的数据包包括存储在数据包头中的所有额外信息字节”。 标头已经包含源/目标信息。这个数据包开销有哪些额外的信息字节?我很困惑。

【问题讨论】:

标头是开销。 在网络社区,这个问题不是太宽泛;第一个答案是对该问题普遍接受的答案的简单陈述。并没有真正看到要求区分几个艺术术语是多么的宽泛。 【参考方案1】:

像你说的数据包,有“有效载荷”,它是它需要传输的数据本身(通常是用户的数据),“头”包含各种东西,取决于你使用的协议,例如UDP标头中仅包含简单的内容,例如 Destination 和 Source IP/PORT,另一端的 TCP 包含更多内容,例如数据包的序列号以确保有序交付,许多标志以确保数据包实际在其目的地收到并对数据进行校验和,以确保它没有被损坏并在其确定中正确接收。

现在,“开销”部分实际上是发送有效负载所需的额外数据。在我上面谈到的情况下,它是标头部分,因为您需要将其添加到要通过 Internet 发送的每个有效负载中。 TCP 比 UDP 具有更大的开销,因为它需要向您的有效负载添加更多数据,但您可以保证您的数据将按照您发送它的顺序在其目的地被接收并且不会损坏。 UDP没有这个特性,所以不能保证。

有时您会阅读/听到关于根据您要发送的数据使用什么协议的讨论。例如,假设您有一个游戏,并且您想在玩家每次移动时更新其位置,它自身的有效载荷将包含以下内容:

int playerID;
float posX;
float posY;

payload 的大小为 12 字节,假设我们使用 TCP 发送它,现在整个数据包将如下所示:

-------------
TCP_HEADER
-------------
int playedID;
float posX;
float posY;

现在整个数据包的大小是有效负载 + TCP_HEADER,即 12 字节 +(32 字节到 72 字节),您现在有 32 到 72 字节的数据开销。您可以阅读有关 TCP 标头 here 的信息。请注意,开销甚至比数据本身还要大!

现在您需要确定它是否是您要用于游戏的协议,如果您不需要 TCP 为您提供更好的使用 UDP 的功能,因为它的开销较小,因此要发送的数据较少。

【讨论】:

【参考方案2】:

您是正确的,数据包通常由标头和有效负载组成。数据包类型的开销是传输有效负载所需的浪费带宽量。数据包标头是放置在数据包有效负载之上的额外信息,以确保它到达目的地。

开销是可变的,因为您可以选择不同类型的数据包(或数据包协议)来传输数据。不同的数据包协议为您提供不同的功能。目前存在的两种主要数据包协议类型是TCP 和UDP。

可以说 UDP 的开销低于 TCP,因为它的数据包具有更小的标头,因此发送有效负载(数据)所需的带宽更少。

其原因是一个深刻的主题,但足以说明 TCP 提供了许多 UDP 没有的非常有用的功能,例如确保数据包的传递和损坏检测。两者都是非常有用的协议,并根据应用程序需要的特性(速度或可靠性)进行选择。

【讨论】:

通常在 OSI 模型中,考虑应用标头、表示标头和 upto 数据链路标头,它们是一一添加的。这个标头是否也 overhead

以上是关于什么是开销、有效负载和标头 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从标头确定有效负载大小?

在 java 中创建带有标头、有效负载和签名的 JWT

如何在scrapy中发送带有标头和有效负载的Post请求

http中的净荷 payload(有效载荷有效负载)是什么?

jsonwebtoken:啥是有效载荷

标头/有效负载中的ruby rest-client内容