数据链路层的信道类型:
点到点信道:这种信道使用一对一的点到点通信方式。
广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
链路(link)是一条点到点的物理线路段,中间没有任何其他的交换节点。一条链路只是一条通路的一个组成部分。
数据链路(data link)。除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层功能。
帧是在数据包上加上帧头、帧尾、物理层地址、校验值。
数据链路层有三个基本问题:封装成帧、透明传输、差错校验。
封装成帧:是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。首部和尾部的一个重要作用就是进行帧定界。
用控制字符进行帧定界的方法举例:
透明传输(加转义字符与不加效果一样,就像透明一样):
用字节填充法解决透明传输问题:
发送端的数据链路层在数据中出现字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码为1B)
字节填充(byte staffing)或字符填充(character staffing)
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。如果转义字符也出现在数据当中,那么应在转义字符前插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
差错检验:
传输过程中可能产生比特差错:1可能会变成0,而0也可能变成1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。误码率和信噪比有很大关系。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检验措施。(不纠错,错误就扔掉。可靠传输是传输层实现的,数据链路层只负责无差错接收。)
使用循环冗余校验CRC,CRC使用的是模2除法,与二进制除法不同。二进制的乘除法都是带进位和借位的,模二乘除都是不带进位和借位的,模二除的本质就是做异或运算。
例如:参考博客点击打开链接
帧检验序列FCS
在数据后面添加上的冗余码称为帧检验序列FCS。循环冗余检验CRC和帧检验序列FCS并不等同。
CRC是一种常用的检错方法,而FCS是添加在数据后面的冗余码。FCS可以用CRC这种方法得出,但CRC并非用来获得FCS的唯一方法。
检验:若得到的余数R=0,则判定这个帧没有错,就接受。若余数R不等于0,则判定这个帧有差错,就丢弃。
特点:但这种检查方法并不能确定究竟是哪一个或哪几个bit出现了差错。 只要经过严格的挑选,并使用位数足够多的除数P,那么出现检测不到的差错的概率就很小很小。
PPP协议不使用序号和确认机制的原因:1、在数据链路层出现差错的概率不大时,使用比较简单的PPP协议较为合理。2、在因特网环境下,PPP的信息字段放入的数据是IP数据报。数据链路层的可靠传输并不能够保证网络层传输也是可靠的。3、帧检验序列FCS字段可保证无差错接收。
广播:所有的计算机都能接收到的信号。目标MAC地址全1的是广播帧。
当数据帧被接收后,FCS就被删除了。
帧间最小距离:帧间最小间隔为9.6us,相当于96bit的发送时间。一个站在检测到总线开始空闲后,还要等待9.6us才能再次发送数据。这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。