第三章:数据链路层
数据链路层使用的信道主要是:
- 点对点信道:使用一对一的点对点通信方式
- 广播信道:使用一对多的广播通信方式,过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。
链路:一条点到点的物理线路段,中间没有和网其他的交换节点。
- 一条链路只是一条通路的一个组成部分。
数据链路(data link):除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
- 现最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。
- 一般的适配器都包含了数据链路层和物理层这两层的功能。
帧:数据链路层传送的是帧
包括帧头、帧尾、物理层地址、校验值,而在物理层它叫做比特。
数据链路层的三个基本问题:
- 封装成帧
- 透明传输
- 差错控制
封装成帧(framing):在一段数据的前后分别添加首部和尾部,然后就构成了一个帧,确定帧的界限。
首部和尾部的一个重要作用就是进行帧定界。
举例:使用 控制字符 进行帧定界的方法
透明传输
若传输的数据是ASCII码中“ 可打印字符(共95个)”集时,一切正常。
若传输的数据不是仅由“可打印字符”组成时,就会出问题,如下图:
用字节填充法解决透明传输的问题:
发送端的数据链路层在数据中出现控制字符“SOH”或者“EOT”前面插入一个转义字符“ESC”(其十六进制编码是1B)。
字节填充(byte stuffing) 或 字符填充(character stuffing) – 接受端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现在数据中,那么应该在转义字符前插入一个转义字符。当接受端接受到连续的两个转义字符时,就删除其中前面的一个。
差错控制
传输过程中可能会产生 比特差错:1可能会变成0,而0也可能变成1。
在一段时间内,传输错误的比特占用所传输比特总数的比特率成为 误码率 BER(Bit Error Rate)。
误码率与信噪比有很大的关系。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
循环冗余检验CRC
末尾补零位数比除数少一位,相除的得到的余数作为FCS帧检验序列,这个算法就叫做CRC。
接收端如何检验?如上例,将传过来的101001 001 同样除以1101,余数为0,表示传输正确,如果发现余数不为0,则会丢弃该数据。
在数据后面添加上的冗余码称为 帧检验序列FCS(Frame Check Sequence) 。循环冗余检验CRC和帧检验序列FCS并不等同。
- CRC是一种常用的 检错方法,而FCS是添加在数据后面的 冗余码;
- FCS可以用CRC这种方法得出,但CRC并非用来获得FCS的唯一方法;
检验:
- 若得出的余数R = 0,则判定这个帧没有差错,就接受(accept);
- 若余数R !=0,则判定这个帧有差错,就丢弃;
特点:
- 这种检验方法并不能确定究竟是哪一个或哪几个比特出现了差错;
- 只要经过严格的挑选,并使用位数足够多的除数P,那么出现检测不到的差错的概率就很小很小;
小结:CRC差错检验技术
- “无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们能以非常接近1的概率认为这些帧在传输过程中没有产生差错”。也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)
- 要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
- 考虑:帧重复、帧丢失、帧乱序的情况;
- 可以说“CRC是一种 无比特差错 ,而不是 无传输差错 的检测机制;
- OSI/RM模型的观点:数据链路层要做成无传输差错的,但是这种理念目前不被接受。
接受的帧(即不包括丢弃的帧),我们能以非常接近1的概率认为这些帧在传输过程中没有产生差错”。也就是说:“凡是接收端数据链路层接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)
- 要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
- 考虑:帧重复、帧丢失、帧乱序的情况;
- 可以说“CRC是一种 无比特差错 ,而不是 无传输差错 的检测机制;
- OSI/RM模型的观点:数据链路层要做成无传输差错的,但是这种理念目前不被接受。
PPP协议
现在全世界使用地最多的数据链路层协议是 点对点协议PPP ,用户使用拨号电话线接入因特网时,一般都是使用PPP协议。
PPP协议应满足的要求:
- 简单— 首要的要求
- 封装成帧
- 透明性
- 多种网络层协议
- 多种类型链路
- 差错检测
- 检测连接状态
- 最大传送单元
- 网络层地址协商
- 数据压缩协商
PPP协议有三个组成部分:
- 数据链路层协议可以用于异步串行或同步串行介质
- 使用LCP(链路控制协议)建立维护数据链路连接
- 网络控制协议(NCP)允许在点到点连接上使用多种网络层协议
局域网的拓扑
共享通信媒体
- 静态划分信道:频分复用、时分复用、波分复用、码分复用
- 动态媒体接入控制(多点接入):
- 随机接入(主要被以太网采用)
- 受控接入,如多点线路探询(polling),或轮询。(已不采用)
认识以太网
正常情况下,总线上的每一个工作的计算机都能检测到B发送的数据信号。由于只有计算机D的地址与数据帧首部写入的地址一致,因此只有D才能接收这个数据帧,A、C、E检测到不是发送给他们的数据帧,是不接受来自B的数据的,但是在总线型情况下,存在可以用特殊方法在ACE端将来自B的数据获取到,造成信息不安全。具有广播特性的总线上实现了一对一的通信。
"多点接入"表示许多计算机以多点接入的方式连接在一根总线上。
"载波监听"表示每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。它是使用电子技术检测总线上有没有其他计算机发送的数据的信号。
CSMA/CD 表示 Carrier Sense Multiple Access with Collision Detection 携带冲突检测的载波监听多点接入。
“碰撞检测”:计算机边发送数据边检测信道上的信号电压大小。
- 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(相互叠加)
- 当一个站检测到的信号电压摆动值超过了一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了"碰撞"
- 所谓"碰撞"就是发生了冲突,所以"碰撞检测"也称为"冲突检测"
检测到碰撞后:
- 在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来
- 每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送
使用CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。这种 发送的不确定性 使整个以太网的平均通信量远小于以太网的最高数据率。
争用期:以太网的端到端往返时延2τ。通常取51.2μs为争用期的长度。
最先发送数据帧的站,在发送数据帧后最多经过时间2τ(两倍的端到端往返时延)就可以知道发送的数据帧是否遭受了碰撞。经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
- 对于10Mb/s以太网,在争用期内可发送512bit,即64字节
- 以太网在发送数据时,若前64字节未发生冲突,则后续的数据就不会发最短有效帧长
- 如果发生冲突,就一定是在发送的前64字节之内
- 由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于64字节
- 以太网规定了最短有效帧长为64字节,凡长度小于64字节的帧都是由于冲突而异常中止的无效帧
局域网,使用广播信道的数据链路层,采用“载波监听多点接入/碰撞检测”协议。
以太网
以太网的两个标准:
- DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约;
- IEEE的802.3标准;
以太网提供的服务是不可靠的交付,即最大努力的交付。
当接受站收到有差错的数据帧时就丢弃此帧,其他什么也不做,差错的纠正又高层来决定。如果高层发现丢失了一些数据而进行重传,但以太网并不知道这是一个重传的帧,而是当做一个新的数据帧来发送。
传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。不使用电缆使用无屏蔽双绞线。每个站需要用两对双绞线,分别用于发送和接受。这种以太网采用星型拓扑,在星型的中心增加了一种可靠性非常高的设备,叫做 集线器(hub)。
集线器是使用电子器件来模拟实际电缆的工作,因此整个系统任然像一个传统的以太网那样运行。集线器使用了大规模集成电路芯片,因此这样的硬件设备的可靠性已大大提高了。
使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是CSMA/CD协议,并共享逻辑上的总线。集线器很像是一个多接口的转发器,工作在物理层。
10BASE-T的通信距离稍短,每个站到集线器的距离不超过100m。这种10M/s速率的无屏蔽双绞线星型网的出现,降低了成本,又提高了可靠性。
10BASE-T双绞线以太网的出现,是局域网发展史上的一个非常重要的里程碑,它以以太网中的统治地位奠定了牢固的基础。
MAC层的硬件地址
在局域网中,硬件地址又称为物理地址,或MAC地址。
802标准所说的“地址”严格地讲应当是每一个站的“名字”或者“标识符”。
适配器从网络上每收到一个MAC帧就首先用硬件检查MAC帧中的MAC地址。
- 如果是发往本站的帧则收下,然后再进行其他的处理;
- 否则就将此帧丢弃,不在进行其他的处理。
“发往本站的帧”分为以下三种帧:
- 单播(unicast)帧(一对一)
- 广播(broadcast)帧(一对全体)
- 多播(multicast)帧(一对多)
常用的以太网MAC帧格式有两种标准:
-
DIX EthernetV2 标准(最常用)
-
IEEE 的802.3标准
无效的MAC帧:帧的长度不是整数个字节;用收到的帧检验序列FCS查出有差错;数据字段的长度不在461500字节之间(有效的MAC帧长度在641518之间;对于检查出的无效MAC帧就简单地丢弃,以太网不负责重传丢弃的帧。
帧间最小间隔: 9.6μs,相当于96bit的发送时间。一个站在检测到总线开始空闲后,还要等待9.6μs才能再次发送数据,为了是刚刚收到数据帧的站的接受缓存来得及清理,做好接受下一帧的准备。
在数据链路层扩展局域网是使用 网桥。
网桥工作在数据链路层,根据MAC帧的目的地址对收到的帧进行转发。
网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口。
567267787932)]
- IEEE 的802.3标准
无效的MAC帧:帧的长度不是整数个字节;用收到的帧检验序列FCS查出有差错;数据字段的长度不在461500字节之间(有效的MAC帧长度在641518之间;对于检查出的无效MAC帧就简单地丢弃,以太网不负责重传丢弃的帧。
帧间最小间隔: 9.6μs,相当于96bit的发送时间。一个站在检测到总线开始空闲后,还要等待9.6μs才能再次发送数据,为了是刚刚收到数据帧的站的接受缓存来得及清理,做好接受下一帧的准备。
在数据链路层扩展局域网是使用 网桥。
网桥工作在数据链路层,根据MAC帧的目的地址对收到的帧进行转发。
网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的MAC地址,然后再确定将该帧转发到哪一个接口。
后来网桥演变为交换机,端口带宽独享,安全性好,基于MAC地址转发数据,通过学习构建MAC地址表。