3.1 数据链路层的基本概念
数据链路层使用的两种信道类型:
- 点对点信道这种信道使用一对一的点对点通信方式。
- 广播信道这种信道使用一对多的广播通信方式,因此过程比较复杂。 广播信道上连接的主机很多, 因此必须使用专用的共享信道协议来协调这些主机的数据发送。
3.1.1 数据链路和帧
- 链路(link)就是从一个节点到相邻节点的一段物理线路,而中间没有任何其他的交换节点。
- 一条链路只是一条通路的一个组成部分。
- 数据链路(data link)除了物理线路,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
- 现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。
- 一般的适配器都包括了数据链路层和物理层这两层的功能。
3.1.2 三个基本问题
⑴封装成帧
- 封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。
- 首部和尾部的一个重要作用就是进行帧定界。接收方必须正确识别每个帧的开始和结束。
- 每一种链路层协议都规定了帧的数据部分长度的上限,即最大传送单元MTU(Maximum Transfer Unit, MTU).
⑵透明传输
我们希望数据链路层提供的是一种“透明传输” 的服务,即对上层交给的传输数据没有任何限制, 就好像数据链路层不存在一样。
- 字节填充法
- 对于面向字符的物理链路,使用字节填充(byte stuffing)或字符填充(character stuffing)方法。
- 发送端的数据链路层在数据中出现的标记字符前面插入一个转义字符(例如,也用一种特殊的控制字符“ESC")。
- 在接收端的数据链路层对转义字符后面出现的标记字符不再被解释为帧定界符,并且在将数据送往网络层之前删除这个插入的转义字符。
- 如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。
- 当接收端收到连续的两个转义字符时,就删除前面的一个。
- 零比特填充法
- 当物理链路提供的是面向比特的传输服务时(物理链路传送连续的比特流), 帧定界标志可以使用某个特殊的比特组合,例如,后面将要介绍的PPP协议所使用的"01111110”。
- 由于帧的长度不再要求必须是整数个字节,可以采用开销更小的比特填充(Bit Stuffing)来实现透明传输。
- 在发送端,只要发现有5个连续1,则立即填入一个0。接收端对帧中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个O删除。
⑶差错控制
- 在传输过程中可能会产生比特差错:1可能会变成0而0也可能变成1。
- 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。
- 误码率与信噪比有很大的关系。
- 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
- 差错检测不是100%可靠! 可能漏掉某些差错,但是非常少,较长的EDC字段通常有更好的检测性能
循环冗余校验CRC:
- 在数据链路层传送的帧中,广泛使用循环冗余校验CRC的检错技术。
- 设原始数据D为d位二进制数
- 如果要产生r位CRC校验码R,事先选定一个r+1位二进制位模式G(称为生成多项式,收发双方提前商定),G的最高和最低位为1
- 将原始数据D乘以2ʳ(相当于在D后面添加r个0),产生d+r位二进制位模式,用G对该位模式做模2除法,得到余数R(r位,不足r位前面用0补齐)即为CRC校验码。
- 在接收端把接收到的数据除以同样的除数生成式G(模2运算),然后检查得到的余数,即进行CRC检验。
- 若得出的余数R=0,则判定这个帧没有差错,就接受。
- 若余数R≠0,则判定这个帧有差错,就丢弃。
- 只要经过严格的挑选,并使用位数足够多的除数G,那么出现检测不到的差错的概率就很小很小。
- 在数据后面添加上的冗余码称为帧检验序列FCS(Frame Check Sequence)。
- 循环冗余校验CRC和帧检验序列FCS并不等同。
- CRC是一种常用的检错方法,而FCS是添加在数据后面的冗余码。
- FCS可以用CRC这种方法得出,但CRC并非用来获得FCS的唯一方法。
- ❶要发送的数据为1101011011。采用CRC的生成多项式P(X)=X⁴+X+1。试求应添加在数据后面的余数。❷若要发送的数据在传输过程中最后一个1变成了0,即变成了1101011010,问接收端能否发现? ❸若要发送的数据在传输过程中最后两个1都变成了0,即变成了1101011000,问接收端能否发现? ❹采用CRC检验后,数据链路层的传输是否就变成了可靠的传输?
- (4)不是可靠传输。CRC仅能实现差错检测,无法纠正错误;同时CRC 无法检测出所有错误,当错误位的组合恰好是生成多项式的倍数时,无法检测,概率极低;此外, CRC不具备帧序号、确认重传等机制,无法解决丢帧、重复帧的问题,因此不能实现可靠传输。可靠传输需要结合差错纠正、确认重传、流量控制等机制共同实现。
- 使用CRC这样的差错检测技术,只能检测出帧在传输中出现了差错,并不能纠正错误。
- 虽然任何差错检测技术都无法做到检测出所有差错,但通常我们认为:凡是接收端数据链路层通过差错检测并接受的帧,我们都认为这些帧在传输过程中产生差错的概率几乎为零。
- 要想纠正传输中的差错可以使用冗余信息更多的纠错码进行前向纠错。通过纠错码能检测数据中出现差错的具体位置,从而纠正错误。这种方法开销非常大。
- 通常采用接下来可靠传输的确认重传机制来纠正传输中的差错,或者仅仅是丢弃检测到差错的帧,由上层协议去解决数据丢失的问题。
3.1.3 流量控制与可靠传输机制
⑴停止等待协议
- 普通流程(有差错检验)
❶超时重传
❷确认丢失
❸确认迟到/提前超时
比特交替协议发送方流程:
比特交替协议接收方流程:
停等协议的信道利用率:
可靠传输的机制:
⑵滑动窗口协议
Go-back-N(回退N帧)协议:
选择重传协议:
3.2 点对点协议PPP
- 在通信线路质量较差的年代,能实现可靠传输的高级数据链路控制(High-level Data Link Control,HDLC)成为了当时比较流行的数据链路层协议。HDLC是一个比较复杂的协议,实现了滑动窗口协议,并可支持点对点和点对多点两种连接方式。
- 对于现在误码率已非常低的点对点有线链路,HDLC已很少使用了, 而简单得多的点对点协议(Point-to-Point Protocol,PPP)则是目前使用最广泛的点对点数据链路层协议。
3.2.1 PPP协议的特点
3.2.2 PPP协议的帧格式
⑴ 各字段意义:
- PPP有一个2个字节的协议字段
- 当协议字段为0×0021时,PPP帧的信息字段就是IP数据报。
- 若为0×C021,则信息字段是PPP链路控制协议(LCP)数据。
- 若为0x8021,则表示这是网络控制协议(NCP)数据。
⑵透明传输问题:
- 当PPP用在SDH等面向比特的同步传输链路时,协议规定采用硬件来完成比特填充。
- 当PPP用在面向字符的异步传输时,使用一种特殊的字符填充法, 其转义符定义为0×7D。
3.2.3 PPP协议的工作状态
3.3 使用广播信道的数据链路层
- 广播信道可以进行一对多的通信,能很方便且廉价地连接多个邻近的计算机,因此曾经被广泛应用于局域网之中。
- 由于用广播信道连接的计算机共享同一传输媒体,因此使用广播信道的局域网被称为共享式局域网。
- 虽然交换式局域网在有线领域已完全取代了共享式局域网,但无线局域网仍然使用的是共享媒体技术。
- 用广播信道连接多个站点(可以是主机或路由器) 一个站点可以方便地给任何其他站点发送数据,但必须解决如果同时有两个以上的站点在发送数据时共享信道上信号冲突的问题。
- 因此共享信道要着重考虑的一个问题就是如何协调多个发送站点对一个共享传输媒体的占用,即媒体接入控制(Medium Access Control,MAC)或多址接入(Multiple Access)问题
3.3.1 局域网的数据链路层
- 网络为一个单位所拥有,且地理范围和站点数目均有限。(局域网最主要特点)
- 最初,主要用来连接一个单位内部的计算机,方便地共享所有连接在局域网上的各种硬件、软件和数据资源。
- 现在,局域网将各种企业、机构、校园中的大量用户接入到互联网中,网络中大部分的信息资源都集中在这些局域网中。
- LLC子层可以为不同类型的网络层协议提供不同类型的数据传输服务,例如,无确认无连接服务、面向连接的可靠传输服务或带确认的无连接服务。
- 由于以太网在有线局域网市场中已取得了垄断地位,因此目前逻辑链路控制子层LLC(即802.2标准)在有线局域网中的作用并不大。
- 很多厂商生产的适配器(网卡)上就仅装有MAC协议而没有LLC协议。
- 适配器的一个重要功能就是要进行数据串行传输和并行传输的转换。
- 在适配器中必须装有对数据进行缓存的存储芯片。
- 在计算机的操作系统安装设备驱动程序。
- 适配器实现局域网数据链路层和物理层的协议。
- 适配器接收和发送各种帧时不使用计算机的CPU,这时CPU可以处理其他任务。
- 当适配器收到有差错的帧时,就把这个帧丢弃而不必通知计算机。当适配器收到正确的帧时,它就使用中断来通知该计算机并交付给协议栈中的网络层。
- 发送IP数据报时,由协议栈把IP数据报向下交给适配器,组装成帧后发送到局域网。
MAC地址:
- 当多个站点连接在同一个广播信道上要想实现两个站点的通信,则每个站点都必须有一个唯一的标识,即一个数据链路层地址。在每个发送的帧中必须携带标识接收站点和发送站点的地址。由于该地址用于媒体接入控制,因此被称为MAC地址。
- MAC(Media Access Control)地址是网络设备的唯一硬件标识符,通常由48位二进制数(12位十六进制)组成,用于在局域网(LAN)中识别设备。它由IEEE分配,固化在网卡或网络接口中,分为前24位(厂商代码)和后24位(设备序列号)。
- 802.3标准为局域网规定了一种48位的全球地址,固化在适配器(网卡)的ROM中(因此又被称为硬件地址)。实际上这个地址仅仅是一个适配器的标识符,它并不能告诉我们这个计算机所在的位置。
- MAC地址与IP地址的区别:MAC是物理层标识,IP是网络层逻辑地址;MAC全局唯一,IP可动态分配(互联网中全球唯一)。
- 所有的适配器都至少应当能够识别单播和广播地址
- 有的适配器可用编程方法识别组地址(多播地址)。当操作系统启动时,它就把适配器初始化,使适配器能够识别某些组地址(多播地址)。
- 只有目的地址才能使用广播地址和组地址(多播地址)。
3.3.2 共享式以太网
- 以太网采用较为灵活的无连接的工作方式,即不必先建立连接就可以直接发送数据。
- 适配器对发送的数据帧不进行编号,也不要求对方发回确认。这样做的理由是局域网信道的质量很好,因通信质量不好产生差错的概率是很小的。
- 当目的站收到有差错的数据帧时,就把帧丢弃,其他什么也不做。对有差错帧是否需要重传则由高层来决定。但以太网并不知道这是重传帧,而是当作新的数据帧来发送。
- 总线上只要有一个站点在发送数据,总线的传输资源就被占用。
- 因此,在同一时间只能允许一个站点发送数据,否则各站点之间就会互相干扰,结果大家都无法正常发送数据。
- 共享式以太网使用CSMA/CD媒体接入控制协议来协调总线上各站点的工作。
3.3.3 CSMA/CD协议
冲突(碰撞)检验:
退避重传:
3.3.4 以太网的信道利用率
- 成功发送一个帧需要占用信道的时间是T₀+τ,比这个帧的发送时间要多一个单程端到端时延τ。
- 这是因为当一个站发送完最后一个比特时,这个比特还要在以太网上传播。
- 在最极端的情况下,发送站在传输媒体的一端,而比特在媒体上传输到另一端所需的时间就是τ。
- 要提高以太网的信道利用率,就必须减小τ与T₀之比。
- 在以太网中定义了参数a,它是以太网单程端到端时延τ与帧的发送时间T₀之比:a=τ/T₀
- a越大,表明争用期所占的比例增大,每发生一次碰撞就浪费许多信道资源, 使得信道利用率明显降低。
- 参数a的值应当尽可能小些
3.3.5 使用集线器的星形拓扑
- 10BASE-T的通信距离稍短,每个站到集线器的距离不超过100m。
- 这种10Mb/s速率的无屏蔽双绞线星形网的出现,既降低了成本,又提高了可靠性。
- 10BASE-T双绞线以太网的出现,是局域网发展史上的一个非常重要的里程碑,它为以太网在局域网中的统治地位奠定了牢固的基础。
3.3.6 以太网的帧格式
⑴以太网V2的MAC帧格式:
- 第四个字段是数据字段,其长度在46~1500字节(46字节是这样得出的: 最小长度64字节减去18字节的首部和尾部就得出数据字段的最小长度)。
- 当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面加入一个整数字节的填充字段,以保证以太网的MAC帧长不小于64字节。
⑵帧间最短字节:
- 帧间最小间隔为9.6 μs ,相当于96 bit 的发送时间。一个站在检测到总线开始空闲后,还要等待9.6 μs 才能再次发送数据。
- 以太网不需要使用帧结束定界符,也不需要使用字节填充或比特填充技术来保证透明传输。
- 帧间间隔用于接收方检测一个帧的结束,同时也使得所有其它站点都能有机会平等竞争信道并发送数据。
⑶IEEE 802.3标准规定的MAC帧格式:
3.4 扩展的以太网
3.4.1 在物理层扩展以太网
使用的是共享式集线器(工作在物理层)
3.4.2 在数据链路层扩展以太网
⑴网桥
- 用网桥仍是n个碰撞域,用集线器则变为一个
⑵透明网桥
⑶以太网交换机