1. 协议分层
在网络通信中,需要约定的协议,其实是非常复杂的!面对复杂的环境,就需要复杂的协议,但是太复杂也不好。
协议是拆分很多的,那么就针对有些小的协议,作用或者定位类似的进行分类,同时针对这些不同的类别,进行分层(相当于约定了层级和层级的关系,要求上层协议调用下层,下层给上层提供支持,不能跨层调用)
简单的画个图来描述下,上层调用下层,下层给上层提供支持的含义
只有两个相邻的层级才可以交互,不可以跨级进行交互。
分层的好处:
- 分层之后就可以做到,层次之间,耦合程度比较低,上层协议不必了解下层的细节,下层也不必了解上层的细节
- 方便的对某一层的协议进行替换
2. 具体如何分层
有两种模型:
-
OSI 七层网络模型(仅仅存在教科书上的)
-
TCP/IP 五层网路模型(当下最广泛的网络模型)
本文我们主要介绍 TCP/IP 五层网络模型!
2.1 应用层
关注传输的数据的用途,应用层就是程序猿写的应用层序
2.2 传输层
不考虑中间路径,只关注起点和终点
2.3 网络层
主要负责两个遥远的节点之间,路径规划
2.4 数据链路层
主要关注两个相邻节点之间的传输,是通过网线/光纤/无线哪一种方式连接
2.5 物理层
网络通信的基础设施,网线,光纤,网线接口,类似于网络上的高速公路
3. 在协议分层的背景下,数据如何通过网络传输?
首先需要了解两个概念:封装 & 分用
- 封装:发送方发送数据,要把数据从上到下,依次交给对应的层次的协议,进行封装
- 分用:接收方收到数据,要把数据从下到上,依次交给对应的层次的协议,进行解析
为了能够大家可以更加详细了解,整个过程,我们以一个 发送QQ 消息为例子,大概来介绍下这个过程!
在一个月黑风高的夜晚,张三决定向女神表白,此时他打开了QQ,在输入输入的一行文字:我喜欢你!并点击发送按钮
那么这一句话到底是怎么发送过去的呢? 此处只是模拟,真实的数据包可能更复杂的多
-
- 应用层(QQ应用程序)拿到上述用户数据,进行封装,封装成应用成数据包
-
- 传输层拿到上述数据,应用层通过调用传输层提供的API,来处理这个数据(传输层有很多协议,此处以UDP为例)
此处,UDP协议再给应用数据包加上一个UDP报头,就是为了再贴一层标签,从而再标签上填写必要的属性。传输层协议,最关键的属性,就是源端口和目的端口
- 传输层拿到上述数据,应用层通过调用传输层提供的API,来处理这个数据(传输层有很多协议,此处以UDP为例)
-
- 网络层拿到上述数据后(此处采用IP协议)
-
- 数据链路层(最典型的协议以太网)
mac 地址是物理地址,也是描述一个主机的位置,但是IP是用来进行路径规划的,而当下的mac是描述数据链路层,两个即将传输的相邻节点。
- 数据链路层(最典型的协议以太网)
-
- 物理层接收上述数据,将上述本质上是 0101 的二进制数据转换成光信号/电信号/电磁波信号,进行传输了!
那接收方又如何解析的呢?
接收的过程正好和上述过程相反,
发送,从上到下,依次封装,新增报头
接收,从下到上,依次分用,去掉报头
-
- 物理层,网卡,收到高低电平信号,然后解析还原成二进制数据
-
- 数据链路层,此时就把上述二进制数据 当作一个以太网数据,进行去掉帧头,帧尾,取出中间的载荷,交给上方的网络层
-
- 网络层,去掉IP报头
- 4.传输层,去掉UDP报头
-
- 应用层,此时由QQ程序来解析应用层数据包,取出字段,放到程序界面
4. 模拟经典真实的转发过程
- 中间的交换机:只需要封装分用到 数据链路层(只需要改源mac和目的mac)
- 中间的路由器:则需要封装分用到 网络层(也需要改mac,同时还需要根据目的ip进行下一阶段的路径规划)
- 通常来说,交换机是进行“二层转发”,路由器进行“三层转发”