0%

七层和网络传输通讯的理解

简介

之前项目使用Netty构建TCP请求来构建应用,在项目上线后项目有很多问题,而之前对网络七层方面的了解只停留在口头和表面,导致排查问题的时候没有这方面的知识走了很多弯路,在排查问题时顺便复习了这块的知识,并且写下自己的理解

网络七层模型图

按钮

以上 从网上搜索出来的七层模型图,我这里举例说明

  • 物理层:物理层(Physical Layer)在局部局域网上发送数据帧(Data Frame),它负责管理电脑通信设备和网络媒体之间的互通,我们知道现在网络中传输的大多数都是数字型号,就是0和1,那么我们就可以用电信号(高电平和低电平)或者光的强弱(光纤)等来代表0或者1,来传输信号,这部分我们统一的称作物理层。

  • 数据链路层:数据链路层负责网络寻址、错误侦测和改错,具体理解我我们物理层发的数据01在通讯中会可能会存在干扰或者丢失,物理层可以辅助纠错,并且其一个重要的功能就是进行寻址,二层交换机或者HUB就是在这一层,每台计算机都有一个网卡,这个网卡都有独一无二的MAC地址,数据在经过物理层,在经过数据链路层处理后会在包中带上要传输目标的MAC地址,这样就能知道数据是发给其它那台计算机的了

  • 网络层(Network Layer)决定数据的路径选择和转寄,在实际传输中,如果只使用MAC地址去传输,那么将会非常不方便,因为MAC地址一长串,于是为了方便寻址抽象出了网络层,我们使用的IP和路由器就是在这一层,数据在经过网络层后,网络层会将数据链路层的数据加入IP的信息,比如目标IP和端口,在数据传输到对于的路由器,路由器再将IP解压提取对于的MAC地址,然后再交给交换机分发到对于MAC地址的电脑上。

  • 传输层:网络层只是负责转发数据,并没有实现如何传输数据。比如TCP是在IP上是为了解决可靠传输而生的,在发送数据是通过序列号码和应答标志位ACK来确认数据是否送达,其保证了数据只要发出那么数据就能送达。

  • 会话层:其表示数据传输何时建立连接,比如软件的开启就建立连接,这部分属于会话层的范畴.

  • 表示层:数据如何展示,比如HTML页面就是表示层,他将来HTTP请求返回的数据包解析了也页面

  • 应用层:就是我们定义的具体的协议,比如HTTP就是基于TCP协议而实现的应用层协议.

那么他们之间具体的关系是咋样的呢?我们从2个角度来看

发送端

应用层->表示层->会话层->网络层->数据链路层->物理层

接收端

物理层->数据链路层->网络层->会话层->表示层->应用层

我们可以看到发送端是由上而下发的数据,接收端是由下往上接收数据,在发送端,每经过一层都会将对应一层的协议的信息加入到数据包中,然后再传给下一层,而接收端每进过一层就会将那一层的协议信息解析完后给去掉,然后返回给上一层

数据是如何在网络中传输的

590b0d2c13aefbc5a0f867cb66e7271

如图中所示了电脑发送的数据是如何传输的,我们以发送数据为例结合上问提到的7层来详细说明

  • 应用层,表示层,会话层,传输层,这部分都在我们电脑中实现,应用层,表示层,会话层,都由我们开发的应用去实现,传输层(如TCP,UDP)这部分由操作系统去实现(比如我们运行操作系统的命令能查看到我们应用具体的端口,所以这些应用的传输都是依托操作系统),首先我们在我们的应用中如通讯软件发起一条消息,这个通讯软件就是应用层,而通讯软件展示出的节目就是表示层,而当我点击发送按钮这时候触发发送消息,则我们这里点击按钮才发送消息的这个机制就是会话层。

  • 传输层,接上面,我们发送TCP消息后,应用调用Sock方法将数据发送给操作系统,让操作系统进行TCP传输,这时数据包里除了我们应用层那边规定传输的数据协议外(如JSON),系统实现的会自动加上TCP协议的协议头。

  • 网络层,接上,现在传输层已经将数据打包好,系统判断这个数据包的目标地址是否在同一个网段,如果是,字节将数据下发到数据链路层,现在我们需要将我们的数据发送到对应的收消息IP地址上,所以操作系统又将TCP包加上IP的数据包头接着往下发送到数据链路层,注意同网段数据传输其实不需要真正的用到IP,因位其通过同网段内广播就能获取到目标MAC地址。

  • 数据链路层,这一层由网卡和网卡驱动实现,系统将IP包和MAC地址等下信息进行包装后,发送给网卡,由网卡去发送消息,那这里我们是如何知道目标电脑的MAC地址的?答案是还是操作系统,本地系统中会存在一张静态ARP路由表,如果我们要查询的目标IP是和发送端在相同网段内,如果ARP路由表中没有,则操作系统将通过交换机发送一条地址MAC地址FF:FF:FF:FF的的广播,询问该IP是是属于哪个MAC的,在得到MAC地址后,将MAC地址信息添加到包中,封装成数据链路层的包,再经过网卡驱动和网卡将数据变成01发出去,如果在ARP中找不到路由,且不是同网段,那么将会使用默认路由(一般是路由器的地址)交由路由器去一层层的去寻找目标MAC,获取到MAC地址后,再回操作系统组成数据链路层的包再发给物理层。

  • 物理层:现在数据变成了01的电信号或者光信号往外传输

  • 现在数据经过双绞线发送给交换机(同网段)或者路由器(不同网段),交换机由于实现了2层(也有3层交换机),交换机在收到物理层传来的数据后,根据目标的MAC转发给对应的MAC地址设备,如果是同网段,直接转发,如果不是则发送给目标网关让它进行转发。同样目标地址的数据链路层收到数据后在往上一步步解析,最终变成应用层的协议