从零开始学网络|一篇文章告诉你平时发送的消息是如何在网络中转发的
上一篇介绍了TCP/IP分层模型,从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了,那么网络中的数据是如何基于TCP/IP分层模型进行转发的呢?
正文
数据的转发是在TCP/IP分层模型下使用封装和解封装技术实现的。
如上图:PC1和PC2通过传输介质网线互联,这就组成一个小的网络,那么PC1和 PC2是如何基于TCP/IP分层模型进行通信的呢?
1
封装
PC1发送数据给PC2之前对报文至上而下逐层进行封装。
假设PC1应用软件QQ要发送一个消息给PC2,下面我们就看下数据是如何从PC1转发到PC2的?
首先,PC1的发送的消息经过应用层封装,这时的数据称为协议数据单元PDU;上一章提到了TCP/IP模型中每一层使用下层所提供的服务,因此,应用层封装好的数据传递给传输层处理;
传输层收到消息后添加UDP报文头或者TCP报文头,指定源端口号和目的端口号(后续会讲TCP/UDP报文头以及端口号),这时的数据称为数据段Segment,传输层封装好的数据传递给网络层处理;
网络层收到消息后添加IP报文头,指定源IP地址和目的IP地址(后续会讲IP报文头以及IP地址),这时的数据称为数据包Packet,网络层封装好的数据传递给数据链路层处理;
数据链路层收到消息后添加以太网数据帧报文头,指定源MAC地址和目MAC地址(后续会讲以太网报文头以及MAC地址),这时的数据称为数据帧Frame;数据链路层封装好的数据传递给物理层处理;
最后,帧被转换为比特流,通过网络介质传输到PC2。
我们可以看到,数据从PC1发送给PC2之前是需要经过层层封装的,这个封装就是基于TCP/IP四层模型至上而下封装的。
2
解封装
PC2收到PC1发送的数据后对报文至底而上逐层进行解封装。
PC2通过传输介质收到PC1发到的比特流。
首先,将比特流转换为数据帧,得到源MAC为PC1,目的MAC地址为PC2的数据帧,由于目的MAC是自己,因此接收该数据帧,并将以太数据帧头解封装,传递给网络层处理;
网络层收到源IP为PC1,目的IP为PC2的数据包,由于目的IP是自己,因此接收该数据包,并将IP报文头解封装,传递给传输层处理;
传输层收到源端口号为PC1,目的端口号为PC2的数据段,由于目的端口是自己,因此接收该数据段,并将UDP报文头解封装,传递给应用层处理;
应用层收到数据后解封装就可以得到PC1发来的具体QQ消息。
以上就是从PC1发送给PC2的数据转发过程,PC2发送给PC1类似,只是PC2对数据进行封装,PC1对数据进行解封装。
3
封装和解封装类比
这里的封装和解封装的概念可以使用寄快递和取快递类比,中间的传输介质就是物流公司。
寄快递的时候是不是需要将物品层层包装起来,其实就是数据包封装的过程;取快递的时候需要拆解包裹,这个其实就是数据包解封装的过程。
这里的源/目的端口号,源/目的IP地址,源/目的MAC地址可以类比成寄件人/收件人,寄件人的地址/收件人的地址。
后续会详细介绍每一层的报文头和对应的协议。
4
ENSP模拟器实验模拟数据转发
下面在华为ENSP模型器上去搭建下环境,之前介绍过ENSP模拟器的下载和使用 【必备软件】华为eNSP模拟器安装和介绍(内附下载链接),通过wireshark抓包的方式看下数据是如何封装的?网络工程师必备技能|如何在华为ENSP模拟器上通过wireshark抓包
拓扑如图所示:PC1和PC2互联。PC1的IP地址是192.168.1.2/24,MAC地址54-89-98-B0-52-A7;PC2的IP地址是192.168.1.3/24,MAC地址54-89-98-2D-4C-71。
PC1的地址配置为192.168.1.2/24;
PC2的地址配置为192.168.1.3/24;
通过UDP发包工具在将PC1作为源向PC2发送UDP报文,源和目的端口为518;
如图所示,在PC1和PC2的互联接口上进行抓包,获取发送的数据报文如下;
打开一个详细的报文,我们看下报文封装格式。
通过查看报文的详细格式,可以看到报文是严格按照TCP/IP的分层模型至上而下进行封装的。
总结
本章主要介绍了网络中的数据是如何基于TCP/IP分层模型根据封装和解封装进行转发的。大家有疑问可以评论区留言呀。