上篇文章中介绍了网络协议中的OSI七层协议与TCP/IP四层协议,TCP/IP的实际应用更广泛。一个网络请求,经过这几层协议后,它长什么样呢?以一个HTTP请求为例,我们来看一下这个套娃式的包裹。
打包数据包裹
应用层打包。首先HTTP请求是应用层的一个请求,HTTP请求包含了请求首行,header,body等内容,我们将它统一叫做HTTP数据。
传输层打包。接着请求来到传输层,这一层定义了这条消息是本机的哪个端口与远程主机的哪个端口进行通信,端口对应的其实就是一个进程。
网络层打包。网络层会给这条消息加两个IP地址,来源IP(本机IP)与目标服务器IP。
网络接口层打包。网络接口层会将mac信息打包进消息,包含本机网卡的mac,和下一个目标地址的mac。
上图就是最终打包好的数据,在互联网中传输的东西就是它。具体为什么要打包成这样的包裹呢,这和网络协议每一层要干的事息息相关。
网络协议各层分工
网络接口层
网络接口层其实分为了物理层和数据链路层。
物理层就是将计算机连起来的手段,可以是网线,光纤,无线电等,主要就是来传输0和1的电信号
数据链路层就是基于物理层建立了计算机之间的沟通链路,这一层中一个很重要的概念就是MAC,每个网卡都有一个唯一的MAC地址,数据链路层接收到网络包后可以检查目标mac是不是自己,不是自己的话就忽略了。
网络层
网络层负责在不同网络之间路由数据。它的任务包括确定数据的最佳路径,实施路由算法,处理IP地址,并跨越不同网络传输数据。IPv4和IPv6协议位于这一层。路由器就是工作在这一层,它主要负责根据目标IP给网络包指明在互联网中正确的传输路径。
传输层
传输层的主要目的是建立端口到端口的通信,相比之下网络层是建立主机到主机的通信。网络层和传输层一起就能确定具体是哪两个应用程序(进程)在做交流。TCP和UDP协议就是工作在这一层。
应用层
应用层是应用程序之间定义的各种协议,如用于web通信的http,https。用于邮件通信的smtp等。是应用程序约定好的数据协议,利用这个协议可以正确的解读到想要的数据。
网络包的打包与拆包
通常来说,发送者要发送的一个请求,经过层层协议后打包成一个网络包,然后网卡将网络包发给局域网内的一台机器,或者互联网中的一台机器,接收者收到后,又是通过层层协议进行了一个拆包的过程,最终通过应用层的协议解读到应用程序想要的内容。接收者应答消息亦是如此。
这篇文章介绍了网络包的一个打包与拆包的过程,这都是计算机内部进行的一个操作。那么网络包在网络中是怎么传输的呢?下篇文章我们来分析下网络包从计算机出发后都经历了什么,如何到达目的地的。