数据链路层使用的信道主要有两种类型:
点对点信道:这种信道使用一对一的点对点通信方式
广播通信:这种信道使用一对多的广播通信。广播信道上连接的主机比较多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
链路就是从一个站点到相邻站点的一条物理线路.
数据链路就是两个站点上的硬件或者软件(如协议等)加上链路。
网络适配器是实现这些硬件和软件的设备,通常一般的适配器已经实现了数据链路层和物理层。
帧是点对点信道的数据链路层的协议数据单元。
数据链路层的三个基本问题
1.封装成帧
帧的数据部分最大长度就是MTU(Maximum Transfer Unit),
数据帧的长度=首部+数据(IP数据报)+尾部
首部就是01(00000001) 简称SOH(Start of header)
尾部就是04(00000100) 简称EOT(End of Transmission)
2.透明传输
如果传输的是文本文件,那么文本文件是不会出现01或者04的类似字符。
然后当我们传输的是图像文件或者EXE程序,就很有可能在数据部分出现01或者04字符。
解决方案:
在发送端的链路层,如果在数据部分发现SOH(01)或者EOT(04),那么就在该字符前面插入一个转义字符ESC(十六进制就是1B),
在接收端数据链路层然后去掉转义字符,这种方法叫做字符填充或字节填充。
如果转义字符也出现在数据部分,那么再插入一个转义字符即可。
3.差错检测
因为在传输过程中,会有噪声干扰,自然会造成比特差错(传输过程0变1,1变0),
循环冗余检错是数据链路层最广泛使用的数据检错技术。
就是在要发送的数据之后加上几位冗余码(n位)
现在假设数据M=101001,事先商定好长度为n+1的除数P,得到商是Q而余数是R(n位,比P少一位)。
现在假定P=1101 (n=3) 那么被除数就是2^n * M =101001000 (相当于在M后面添加了n个0)
用101001000除以1101 获得
Q =110101
R =001
所以要传给物理层的二进制数据就是101001001
这种为了检错而添加的冗余码叫做帧检验序列(Frame Chec Sequence)
在接收端把接收到的数据除以事先商量好的P,得到余数R.如果R为0则表示传输过程中,没有出现差错。
在数据链路层,FCS和CRC检验都是由硬件完成的,速度非常快。
用这种检验方法只能做到"无比特差错",而不能做到“无传输差错”