什么是开销,有效负载和标头

Pri*_*i16 15 networking overhead payload

有人可以解释一下什么是开销,有效负载,报头和数据包.据我所知,数据包是要传输的整个数据.该数据包由实际数据组成,我认为是有效载荷,数据包的源/目的地信息在标题中.因此,数据包由标头和有效负载组成.那么这个开销是多少?是头部的一部分.我从网上得到了这个"数据包偷听包括存储在数据包标头中的所有额外字节信息"标题已包含源/目标信息.这个数据包开销有多少额外的信息字节.我糊涂了.

UnT*_*aDe 19

像你说的那样的数据包,有"有效载荷",它需要传输的数据本身(通常是用户的数据),"标题"包含各种各样的东西取决于你正在使用的协议,例如UDP只包含简单的东西像目的地和源IP/PORT这样的标题,另一端的TCP包含更多的东西,比如数据包的序列号,以确保有序传递,很多标志确保数据包实际收到它的目的地和校验和的数据确定它没有被破坏并且在它的排序中正确接收.

现在,"开销"部分实际上是发送有效负载所需的附加数据.在我上面谈到的情况下,它是标题部分,因为您需要将它添加到您想通过互联网发送的每个有效负载.TCP具有比UDP更大的开销,因为它需要向您的有效负载添加更多数据,但您可以保证您的数据将按照您发送的顺序在其目的地中接收,而不会损坏.UDP没有此功能,因此无法保证.

有时您会根据要发送的数据阅读/听取有关使用哪种协议的讨论.例如,假设您有一个游戏,并且您希望每次移动时更新玩家的位置,它自己的有效负载将包含:

int playerID;
float posX;
float posY;
Run Code Online (Sandbox Code Playgroud)

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

-------------
TCP_HEADER
-------------
int playedID;
float posX;
float posY;
Run Code Online (Sandbox Code Playgroud)

现在整个数据包的大小是有效负载+ TCP_HEADER,它是12字节+(32字节到72字节),现在你的数据有32到72字节的开销.你可以在这里阅读TCP的标题.请注意,开销甚至比数据本身还要大!

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


S.R*_*ond 6

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

开销是可变的,因为您可以选择不同类型的数据包(或数据包协议)来传输数据。不同的数据包协议为您提供不同的功能。当今存在的两种关键类型的数据包协议是TCPUDP

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

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