【计算机网络】一天一个知识点之封装、复用

1,055 阅读2分钟

这是我参与8月更文挑战的第二天,活动详情查看:8月更文挑战

封装分用

封装分用是两个截然相反的过程,封装是指发送方将数据按照预定的不同层次的协议进行自上而下的层层封装,然后传输给接收方,而分用是指接收方将接收到的数据和协议的结合体进行自下而上的层层解封,最后获得数据的过程。

image-20210803193806145

封装过程,就是在数据的头部或者尾部加上协议头,然后传递给下一层。

image-20210803194811521

这是网上一张清一色的封装分用的图,确实好用,大家都用这张图来表达自己对封装过程的理解,那我就通过解析这张图片来表达我对封装过程的理解。

封装过程是自顶向下的,首先是应用层封装。应用层的封装遵循的是应用程序的协议。图中采用的封装方法是设置Appl首部,这个首部可以包含的内容,可以是发送数据的长度,然后接受方在获取到这个头部后根据这个数据长度来接受后面的数据;也还有另外的一种方法,就是类似http协议,在数据结尾加上结束标志,接受方读取到结束标志位时就说名数据的传输完成了!

接下来的每一层都是类似的,在上一层的协议之上,我们再加上本层的协议,传输层封装成一个TCP段(UDP段),交给网络层封装,一次类推。最终在数据链路层封装成以太网帧,至此封装完成。

image-20210803201815723

而分用的就是封装的逆过程,值得注意的是,这个逆过程并不是那么简单。

因为IP协议、ARP协议和RARP协议都使用帧传输数据,所以帧的头部需要提供某个字段(具体情况取决于帧的类型)来区分它们。

同样,ICMP协议、TCP协议和UDP协议都使用IP协议,所以IP数据报的头部采用16位的协议字段来区分它们。

TCP报文段和UDP数据报则通过其头部的16位端口号(port number)字段来区分上层应用程序。(例如:DNS协议对应的端口号是53,HTTP协议对应的端口是80). 通俗来讲,因为在封装的过程中,由于在同一层中有多种不同的协议,为了在分用的时候知道即将分用的下一层使用的是什么协议进行封装的,所以,需要在封装过程中的下一层的头部添加一个协议字段来标记区分他们。