OSI 参考模型 是 ISO 公司提出的理论知识,并不具备实际应用。
在真实使用中真正得到认可的是 TCP/IP 协议,学习的时候会把【网络接口层】还原成【数据链路层】和【物理层】,因为这两层关乎通信原理,非常重要。
物理层
物理层定义了接口标准、线缆标准、传输速率、传输方式等,比如说网线。数据传输有两种方式,分别是模拟信号和数字信号。
- 模拟信号是连续的信号,适合长距离传输,抗干扰能力差,受到干扰时波形变形很难纠正
- 数字信号是离散的信号,不适合长距离传输,它抗干扰能力强,受到干扰时波形失真可以修复
而网线的传输距离最多不可超过100米,局域网通信可以只使用数字信号,因为距离短,而广域网中通信就需要数字信号+模拟信号组合使用。
另外,一条传输介质上(比如网线)上可以有多条信道(信息传输的通道),大致分为三类,单工通信、半双工通信、全双工通信。
-
单工通信:信号只能往一个方向传输,任何时候都不能改变信号的传输方向,比如无线电广播。
-
半双工通信:信号可以双向传输,但必须是交替进行,同一时间只能往一个方向传输,比如对讲机
-
全双工通信:信号可以双向传输,比如手机。
数据链路层
链路表示从1个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点(如交换机等)。比如下图中框住的部分就分别表示一条链路(集线器可看作网线,不算作交换节点)。
另外,数据链路层还有三个问题:封装成帧、透明传输和差错检测。
封装成帧
IP数据包来自网络层,MTU表示最大传输单元,以太网的MTU为1500字节。从网络层到数据链路层,会给数据左右两侧加上首部尾部组成帧。
透明传输
当SOH、EOT分别作为帧开始符和结束符时,如果数据部分出现了 EOT,可能截取错误,所以需要对其进行转义。
差错检测
那么如何检验传递过程中数据是否正确呢?
存在一个 FCS 的数据,是根据帧的数据部分和数据链路层首部计算得出,当接收数据时,网卡会对其进行校验。
在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输,不同类型的数据链路,所用的通信协议可能是不同的,主要有两种。
- 广播信道:CSMA/CD协议(比如同轴电缆、集线器等组成的网络)
- 点对点信道:PPP协议(比如2个路由器之间的信道)
CSMA/CD协议
具有载波侦听、多路访问、冲突检测的功能,使用了 CSMA/CD的网络为以太网(Ethernet),传输以太网帧。
- 载波侦听:计算机的端口检测该条信道上有没有数据传输,有的话不发送信号
- 多路访问:多个pc都可以发消息
- 冲突检测:当多个pc互相发送消息到集线器时,信号碰撞就会冲突然后回弹,pc自身要检测回来的消息是冲突弹回还是别的机器发送的有用消息
交换机支持全双工通信,具备上面的功能,所以用交换机组件的网络,不需要使用CSMA/CD协议,但它传输的帧依然是以太网帧,所以可以叫做以太网。
以太网帧使用得最多的是 Ethernet V2标准
以太网帧由首部(目标MAC地址、源MAC地址、网络类型) + 数据 + FCS 组成,而为了检测发送的数据是否有冲突,以太网帧的最小长度为64字节,而MTU为1500字节,所以计算得到数据长度范围为 46 ~ 1500 字节,如果数据长度小于 46 字节,数据链路层会自动填充一些数据,接收端再剔除。
PPP协议
路由器之间不使用CSMA/CD协议,而是 PPP 协议。
- Address字段:图中的值是0xFF,点到点信道不需要源MAC、目标MAC地址
- Control字段:图中的值是0x03,目前没有什么作用
- Protocol字段:PPP协议内部用到的协议类型
- 帧开始符、帧结束符:0x7E
当IP数据报中存在与帧开始符、帧结束符冲突的数据会进行替换。
以上就是 物理层和数据链路层的相关知识
, 更多有关 前端
、网络协议
的内容可以参考我其它的博文,持续更新中~