当前位置:网站首页>网络基础 —— 报头、封装和解包

网络基础 —— 报头、封装和解包

2022-07-07 02:18:00 abs(ln(1+NaN))

目录

一、理解"报头"

1、什么是报头?

2、为什么需要报头?

3、报头包含了哪些信息?

二、理解"封装"

三、理解"解包"

1、如何解包

 2、要传给上层的谁


下面以快递的派发为例,来理解报头、封装和解包。

假设你在网上买了一瓶洗发水,卖家帮你装到了盒子里,盒子上注明了这个产品的质量(多少克)等信息,然后交给了快递站,快递站贴上快递单就把这个快递发出去了。

一、理解"报头"

1、什么是报头?

上面有提到两个东西,这里的快递单或者盒子上的产品信息、卖家地址就类似于报头所包含的信息。

站在网络的角度,这个产品就是数据,应用层把这个数据给传输层之前,需要加一个报头,报头包含了数据的有效长度、上层协议是什么等信息。

2、为什么需要报头?

可以举一个反例,如果没有报头,也就是说没有快递单和产品盒子,我们根本不知道这个东西从哪来,也不知道要发到哪里去,这样的话就无法进行数据传输。

3、报头包含了哪些信息?

从应用层到数据链路层,每一层都有自己的协议,而且几乎每一层都会添加一层报头,而这个报头包含的两个重要信息如下,这两个信息将会解包过程派上大用场!

- 当前层报头的长度

- 当前层使用的协议

因为不同主机要实现通信,对应层使用的协议必须相同,好比你顺丰发货,对方在圆通等快递,这显然不合理。

二、理解"封装"

那什么又是封装呢??我们把洗发水装进盒子,给盒子贴上快递单,这个过程就是封装!!

上图蓝色的方块就代表应用层添加的报头 —— 包含了有效载荷的长度(后面统一把数据称为载荷)

上图橙色的方块就代表传输层添加的"报头" —— 包含了上层协议是谁(即从哪来的)、当前层添加的"报头"长度。

网络传输中,每向下传一层就会在最前面添加一层内容。

三、理解"解包"

假设卖家收到快递了,外面的层层包装、快递单、还有产品盒子对于卖家而言,都是不需要的,卖家拆快递,把包装拆下来的过程就叫做解包!

每一层只解开与当前层对应的报头,现在报头里的两个重要内容就可以派上用场了

- 当前层报头的长度(用于解包)

- 上一层协议(要传给上一层的哪个协议)

1、如何解包

站在OS内核角度,我们只让一个指针指向数据包最开始的位置,现在已经知道了当前层报头的长度,我们只需要让指针向右移动相应的位置即可。

 2、要传给上层的谁

现在解包解完了,那要继续向上传递,应该给谁呢?你可能会问,这不是直接就给上一层"传输层"吗? 

准确来说是要给上层哪个协议,比如卖家是顺丰发货,而你却在圆通快递站等着,这肯定不合理。

站在网络角度,对方使用UDP协议,报头就包含了这个信息,你就应该传给传输层的UDP

原网站

版权声明
本文为[abs(ln(1+NaN))]所创,转载请带上原文链接,感谢
https://blog.csdn.net/challenglistic/article/details/125643881