数据链路层(第二层)
1.概述
数据链路层使用的信道主要有两种形式:
- 点对点信道,使用一对一的点对点通信方式,最常用的是 PPP(Point-toPoint Protocol)点对点协议
- 广播信道,使用一对多的广播通信方式,需要使用专门的共享信道协议来协调连接到信道上的主机的数据发送
链路层相关术语:
- 运行链路层协议的任何设备均成为节点(node),节点包括主机、路由器、交换机和 WiFi 接入点
- 链路(link):是从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点
- 数据链路(data link)把实现了通信协议(规程)的硬件和软件加到链路上,就构成了数据链路,最常用的方法是使用网络适配器(软件硬件皆有)来实现这些协议
- 帧是数据链路层与网络层进行数据交互的一种数据流(对IP数据包进行封装)
- 链路层协议都规定了帧能传送的 数据部分长度上限——最大传送单元 MTU (Maximum Transfer Unit)
1.1. 封装成帧
互联网上传送的数据都以分组(即 IP 数据包)为传送单位,在网络层传送到数据链路层的数据添加首部和尾部,就构成了一个完整的帧
首部和尾部可以方便帧定界,即确定帧的界限,帧使用特殊的帧定界符放于帧的开始与结束用于定界:
SOH
(Start Of Header),表示帧的开始;EOT
(End Of Transmission),表示帧的结束;ESC
表示转义,当帧的数据部分中出现了数据流(01、04)时需要进行转义,否则帧会错误的找到帧的边界;由于 EOT、SOH、ESC 本身也是一个数据流,当帧的数据部分中本来就有这部分数据时,需要使用 ESC 进行转义;该部分可类比高级语言中字符串转义,\\
代表\
,\d
代表整数等。
注意:SOH、EOT、ESC均表示一串数据,而并非字符串,在数据传输过程中一般是以二进制传输,他们对应的二进制数据分别为:
- SOH:
0000 0001
,十六进制编码为:01- EOT:
0000 0100
,十六进制编码为:04- ESC:
0001 1011
,十六进制编码为:1B
当数据出现差错时,帧定界符的作用就是使得接收端可以确认收到的数据不完整,从而选择丢弃掉。(只收到了首部开始符SOH而没有收到传输结束符号 EOT)
1.2. 透明传输
假如需要传输一段数据 XX00000100X
,经过数据链路层封装成帧后,数据变为 00000001XX00000100X00000100
,在传输到第二个 X 时接收端发现数据 00000100 是传输结束的数据流,就会错误的认为此时数据已经传输结束了,会把后面的数据 X00000100
当作无效帧舍弃掉,解决这个问题可以使用转义字符ESC(0001 1011
,为了直观显示,下面直接使用该字符代替)
使用转义字符封装后的帧的数据为:SOH XX ESC EOT X EOT