当前位置:   article > 正文

计算机网络——第3章 数据链路层_0x86dd

0x86dd

第 3 章 数据链路层

基本概念

  1. 链路:也称为物理链路,即从一个节点到相邻节点的一段物理线路(包括有线和无线)

    数据链路:也称为逻辑链路,在物理链路上加上一些必要的通信协议

  2. 网络适配器:包括硬件和软件,用于实现物理链路上的通信协议

  3. 对于点对点信道,发送节点的数据链路层会将网络层交付的IP数据报添加首部和尾部封装成帧;若接收节点的数据链路层收到的帧无差错,会从帧中取出IP数据报交付网络层,若发现有差错则丢弃该帧

  4. 数据链路层主要使用两种类型的信道

    • 点对点信道(例如PPP协议

    • 广播信道(例如CSMA/CD协议)

  5. 数据链路层要解决的问题

    • 封装成帧

      即将网络层的IP数据报作为帧的数据部分,加上首部和尾部,构成了整个帧。首部和尾部用于帧定界(即确定一个帧的界限),其中还包括了很多控制信息

      链路层协议会规定帧数据部分的大小上限,即最大传送单元MTU

    • 透明传输

      为了防止将要传输的数据当成帧界定符,要进行一定的处理,防止误认。会在控制字符前添加一个转义字符“ESC”,若是要传输转义字符本身,也要将其进行转义。这样的方式称为字节填充字符填充

      对于传输的数据来说,数据链路层不会对其有任何阻碍,因此称之为“透明”的

字节填充

  • 差错检测

    数据若在传输过程中产生差错,将0传成了1、1传成了0,这称为比特差错。误码率BER指的是传输错误的比特数占总传输比特数的比率

    循环冗余检验CRC可以用于差错检测,但不能用于纠错

    无比特差错指的是单纯比特上没有传错,无传输差错指的是不仅无比特差错,而且没有帧丢失、帧重复、帧失序

    可靠传输要求没有丢失、失序、重复,要实现之,需要加上帧编号、确认和重传机制

CRC循环冗余检验

  1. MAC地址

    MAC地址用在MAC帧中,用于唯一标识一台设备,值固化在设备的ROM中

点对点协议PPP

用户需要连接到ISP才能接入互联网,PPP协议作为用户计算机与ISP进行通信时的数据链路层协议

PPP协议需要的
  1. 简单

    PPP协议将简单作为首要要求,其执行逻辑非常简单,每收到一个帧就进行CRC检验,正确则收下,错误则丢弃

  2. 封装成帧

    必须规定特殊字符作为帧定界符

  3. 透明性

    必须保证数据传输的透明性

  4. 多种网络层协议

    必须能在同一条物理链路上同时支持多种网络层协议

  5. 多种类型链路

    必须能在多种类型的物理链路上运行,例如串行/并行、同步/异步、低速/高速等

  6. 差错检测

    必须能对接收端收到的帧进行检测

  7. 检测连接状态

    必须能及时自动检测链路是否处于正常状态

  8. 最大传送单元

    必须能对每种点对点链路设置最大传送单元的标准默认值(默认值1500B),即帧中数据部分(网络层的IP数据报)的最大长度

  9. 网络层地址协商

    必须使两个网络层的实体能通过协商知道或配置彼此的网络层地址

  10. 数据压缩协商

    必须提供一种方法来协商使用的数据压缩算法,但并不要求将此算法标准化

PPP协议不需要的
  1. 不使用序号和确认机制

  2. 不纠错、不进行流量控制

  3. 不支持多点线路(即主站与连接的从站轮流通信)

  4. 只支持全双工链路,不支持半双工与单工

PPP协议三大组成
  1. 将IP数据报封装到串行链路的方法(包括同步与异步链路)
  2. 用来建立、配置与测试数据链路连接的链路控制协议LCP
  3. 网络控制协议NCP,需要支持不同的网络层协议
PPP协议的帧格式

PPP帧格式

几个注意点

  • 显然,PPP协议的帧是以字节为单位的

  • 首部为4个字段,尾部为2个字段

  • 首部的第一个字段和尾部的最后一个字段为标志字段F,规定为0x7E,若收到连续两个标志字段,表示本帧是空的,接收端直接丢弃

  • 首部的字段A是“地址字段”,字段C是“控制字段”,值分别规定为0xFF0x03,事实上不发挥实际作用

  • 尾部的FCS为CRC的帧检验序列,信息数据部分长度是可变的,但不能超过1500字节

  • 首部的第四个“协议”字段,指出信息字段中是什么数据。例如0x0012表示IP数据报、0xC021表示PPP的链路控制协议LCP的数据、0x8021表示网络层的控制数据、0xC023表示PAP认证的鉴别数据、0xC223表示HAP认证的鉴别数据

PPP协议的透明传输
字节填充(用于异步传输)

PPP协议用在异步传输中时,转义字符定义为0x7D,RFC1662规定中规定:

  • 信息字段中的0x7E需要转义,变为0x7D 0x5E

  • 信息字段中的0x7D需要转义,变为0x7D 0x5D

  • 信息字段中ASCII码小于0x20的控制字符需要转义,将其本身加上0x20,再在前面添加0x7D。例如对于0x01,需转义为0x7D 0x21

零比特填充(用于同步传输)

PPP协议在SONET/SDH链路中使用同步传输。方法就是在信息字段中只要有5个连续的1,就在后面填入一个0,这样就可以保证信息字段中不会出现可以被误认为是标志字段的比特组合。若有连续的六个1,01111110,即0x7E,就是标志字段

如此,就可以保证若收到连续的六个1,一定是帧定界符标志,接收端收到标志字段后,对于后面的数据,若收到连续的五个1,就去掉一个0

PPP协议的工作流程

在下面的流程中,可以明显地感受到PPP协议不仅仅是数据链路层的协议,它已经包含了物理层与网络层的内容

  1. 用户拨号请求接入ISP,路由器接收到拨号,建立物理连接,PPP进入链路建立状态,物理链路建立

  2. 向路由器发送封装成PPP帧的LCP配置请求帧,特定的配置请求包含在信息字段中。配置中可以包括最大帧长、使用的鉴别协议,但不包括PPP帧中的地址与控制字段。

  3. 链路的另一端会响应配置确认帧、配置否认帧或配置拒绝帧,分别表示接受所有配置、理解所有配置但不接受、有些配置无法识别或不接受需要进一步协商。协商完成后,就进入到鉴别状态,此时LCP链路建立

  4. 在鉴别状态中,只允许传送LCP分组、鉴别协议的分组和检测链路质量的分组。若鉴别身份失败,转入链路终止状态;若鉴别成功,转入网络层协议状态,此时已鉴别的LCP链路建立

  5. 在网络层协议状态中,PPP链路两端的网络控制协议NCP会根据不同的网络层协议互相交换网络层特定的网络控制分组,这些NCP的分组也会被封装成PPP进行传输。PPP协议两端可以使用不同的网络层协议,但可以使用同一PPP协议通信

  6. 当网络层配置完成后(例如对于IP协议来说,给主机分配了IP地址),就进入链路打开状态,此时已鉴别的LCP链路和NCP链路建立。PPP两端可以互相发送分组。还可以发送回送请求/回送回答LCP分组以检查链路状态。

  7. 在链路打开状态中,链路一端可以发送终止请求LCP分组以请求终止链路连接,另一端发送终止确认LCP分组后,PPP转入链路终止状态。若链路出现故障,也会转入链路终止状态

  8. 在链路终止状态中,若拨号停止,LCP链路释放,则转入链路静止状态

PPP工作过程

局域网与以太网

基本概念
  1. 局域网通常为同一个单位拥有,且地理范围与站点数目都很有限,但也有很明显的优点:具有广播功能,便于扩展和演变,设备位置灵活,系统可靠性、可用性、残存性提高

  2. 按拓扑结构可以将局域网分为:星形网、环形网、总线网

局域网的拓扑结构

共享信道

显然在局域网中,需要共享信道,使得多用户合理方便共享通信媒体资源,有两种方法实现这一点

静态划分信道

之前提到过的频分复用、时分复用、波分复用、码分复用等技术,都属于静态划分信道。称其为”静态“是因为只要用户分配到了信道,就不会和其他用户发生冲突。这种方法代价较高,不适合局域网使用

动态媒体接入控制

也称为多点接入,用户分配到的信道不是固定的

  • 随机接入:所有用户可随机发送信息,但若是同一时刻有多个用户发送信息,会产生冲突/碰撞,要有相关协议解决这个问题

  • 受控接入:用户发送信息须服从一定控制,例如令牌环局域网、多点线路探询(即轮询)

以太网的标准
  1. 第一个局域网产品规约DIX Ethernet V2,以及第一个IEEE以太网标准IEEE 802.3

  2. IEEE 802委员会将局域网的数据链路层拆成逻辑链路控制LLC媒体接入控制MAC子层,使得数据链路层更能适应不同的局域网标准。将接入到传输媒体有关的内容放在MAC子层,不同标准协议对LLC子层透明

MAC地址与MAC帧

网络中的设备都有一个硬件地址来唯一标识自身,这个地址称为MAC地址,规定为6字节或2字节,但一般都使用6字节。一般来说,高24位是这个设备生产组织的标识符,低24位可由生产组织自行分配给生产的设备

IEEE规定MAC地址的最低位为I/G位,当I/G位为0时,表示这个地址是一个单播地址;当I/G位为1时,表示这个地址是一个多播地址;当MAC地址全为1时,表示这个地址是一个广播地址

IEEE还规定MAC地址的最低第二位为G/L位,当G/L为0时,表示这个地址是全球管理,可以保证全球没有重复;当G/L为1时,表示这个地址是本地管理的

DIX Ethernet V2标准的MAC帧

以太网V2标准下的MAC帧

网络层的整个PDU作为MAC帧的数据部分内容,尾部加上帧检验序列,首部加上目的MAC地址、源MAC地址和类型标志字段,类型字段指明了上一层(即网络层)用的是什么协议,例如0x0800表示IPv4协议、0x0809表示ARP协议、0x8100表示IEEE802.1q协议、0x86DD表示IPv6协议

在下面的碰撞部分,可以得知,以太网的最短数据帧长为64B,也就是说,MAC帧的数据部分至少需要46B,不足的需要填充补够

另外可以发现,对于异步传输在物理层传输媒体上传送的帧,前面还有7字节的前同步码以及帧开始定界符用于时钟的同步

出现以下任一种情况的,视为无效MAC帧,直接丢弃

  • 帧的长度不是整数个字节

  • 使用收到的帧中的FCS计算出来有差错

  • 收到的帧的数据字段的长度不再46~1500字节之间

适配器

适配器(网卡)用于计算机和外界局域网的连接,在它的ROM中有一个不能修改的硬件地址,也就是这个适配器的MAC地址。

计算机会将要发送的数据交给适配器,CPU与适配器之间是并行通信,但适配器发出去到局域网是串行通信。

适配器在收到一个MAC帧时,会检查其中的目的地址,以便判断是否要收下这个帧

适配器需要完成的功能

  • 进行数据串行传输和并行传输之间的转换

  • 对数据进行缓存

  • 能实现以太网协议

总线以太网
  1. 在总线结构中,当一台计算机发送数据时,总线上的所有计算机都能检测到,即以广播方式发送数据

  2. 为了实现一对一通信,在帧上标明接收端的MAC地址,收到不是发给自己MAC的直接丢弃,否则就收下

  3. 以太网采用灵活的无连接工作方式,不必在发送数据前先建立连接。适配器不对数据帧编号,也不要求对方发回确认。也就是说,以太网提供的是尽最大努力交付,是不可靠交付对差错帧的重传由更高层来决定和后面CSMA/CD中的碰撞重传不是同一个概念),更高层决定重发时,重新将相同的数据传递给以太网

  4. 以太网发送数据使用曼彻斯特编码

  5. 以太网采用随机接入,并使用CSMA/CD协议来避免冲突

10Base-T以太网

这是IEEE制定的一种星型以太网标准802.3i,使用非屏蔽双绞线

其中的10表示速率为10Mbit/s,Base表示传输的信号是基带信号,T表示使用的是双绞线(传统以太网最初用的是同轴电缆)

以太网的信道利用率

一个站点发送一个数据帧需要占用信道的时间为 T 0 + τ T_0+\tau T0+τ,其中 T 0 T_0 T0为发送帧的时间,假设在发送前检测到链路上有碰撞,需要等待n个争用期(即n个 2 τ 2\tau 2τ),则信道利用率S为

S = T 0 T 0 + ( 2 n + 1 ) τ = 1 1 + ( 2 n + 1 ) τ T 0 S=\frac{T_0}{T_0+(2n+1)\tau}=\frac{1}{1+(2n+1)\frac{\tau}{T_0}} S=T0+(2n+1)τT0=1+(2n+1)T0τ1

a = τ T 0 a=\frac{\tau}{T_0} a=T0τ,要提高信道利用率,就要减小a,也就是当数据率一定的时候,链路的长度不能太长,同时传输的帧长不能太短。

显然,当链路不需要碰撞等待时,即 n = 0 n=0 n=0时,信道利用率达到最大 S m a x = 1 1 + a S_{max}=\frac{1}{1+a} Smax=1+a1。需要了解的是,当以太网的利用率达到30%时,就已经处于高负载的状态中了。

CSMA/CD协议

载波侦听多路访问/冲突检测(Carrier Sense Multiple Access with Collision Detection)CSMA/CD

CSMA/CD协议包含三个要点:多点接入、载波监听、碰撞检测

多点接入

表示这是总线型网络,多台计算机多点接入到一条总线

载波监听

即边发送边监听,无论是发送数据前还是发送数据过程中,每个站都必须不停地检测信道

碰撞检测

在发送数据前,若适配器检测到信道上有数据在传送,就暂时先不发送;在发送数据过程中,若适配器检测到信道上的电压超过一定阈值,就认为有多个站在同时发送数据,此时立即中断本站的发送

由于存在传播时延,即数据在链路上传播需要一定时间,在数据还在链路上传播的过程中,端点无法检测到目前链路正在使用,此时若发送数据,相向而行的两组数据就会发生碰撞。碰撞的两个帧都是无法使用的

一般来说,把端到端的单程传播时延记为 τ \tau τ。很显然,一个端点在发送数据后,要想知道自己发送的帧是否发生了碰撞,在发出数据后需要等待 2 τ 2\tau 2τ,这个 2 τ 2\tau 2τ往往也称为争用期/碰撞窗口,经过争用期还没有检测到碰撞,就可以肯定本次发送不会发生碰撞

碰撞过程

以上图为例

  1. t = 0 t=0 t=0时,A端开始发送数据

  2. 在数据还没有到达B端的 t = τ − δ t=\tau -\delta t=τδ时,B端开始发送数据。显然,此时两段数据之间的距离为 δ \delta δ的传播时间

  3. 可以和相遇问题进行类比,在相向而行 δ / 2 \delta/2 δ/2时间后,碰撞发生,此时为 t = ( τ − δ ) + δ / 2 = τ − δ / 2 t=(\tau-\delta)+\delta/2=\tau-\delta/2 t=(τδ)+δ/2=τδ/2

  4. t = τ t=\tau t=τ时,A端发送的数据到达B端,此时B正在发送数据,检测到链路有被占用,立即停止发送数据

  5. t = ( τ − δ ) + τ = 2 τ − δ t=(\tau-\delta)+\tau=2\tau-\delta t=(τδ)+τ=2τδ时,B发出的一小段数据到达A端,A在此时检测到了链路的占用,也立即停止发送数据

碰撞后的重传

以太网使用截断二进制指数退避算法确定发生碰撞后重传的时机,实际上就是让某个站在链路空闲后再等待一段随机的时间,从而防止在重传时再次发生碰撞

以太网规定争用期的具体时间为51.2μs。那么对于10Mbit/s的以太网,这就是发送512bit,即64B的时间,可以表达为10Mbit/s以太网在争用期是512比特时间

51.2μs的来源

现实中,以太网端到端距离一定不会超过5km(便于计算可以取5120m),电磁波在双绞线中的传播速度为 2 × 1 0 8 2\times 10^8 2×108m/s。因此, τ = 5120 2 × 1 0 8 = 25.6 μ s \tau=\frac{5120}{2\times 10^8}=25.6\mu s τ=2×1085120=25.6μs 2 τ = 51.2 μ s 2\tau=51.2\mu s 2τ=51.2μs

显然,若某站点发送的帧非常短,小于64B,这个帧若在链路上发生碰撞,该站点由于发送时间不足争用期,无法检测到这个帧碰撞了,也就无法重传这个帧。因此,对于10Mbit/s的以太网,最短帧长为64B

换个角度来看,某个帧若发生了碰撞,发送站点必然会在发送前64字节的时间内检测到,此时会停止发送。也就是说,此时已经发送出去的帧长度必然小于64B。因此对于接收站点来说,可以得出结论:长度小于64B的帧都是由于冲突而异常中止的无效帧

退避等待的时间遵循以下规则

  • 基本退避时间为 2 τ 2\tau 2τ

  • 从集合 { 0 , 1 , ⋯   , ( 2 k − 1 ) } \left\{0,1,\cdots,(2^k-1)\right\} {0,1,,(2k1)}中选择一个,记为 r r r,退避时间为 r × 2 τ r\times2\tau r×2τ,其中的 k = min ⁡ { 重 传 次 数 , 10 } k=\min {\left\{重传次数,10\right\}} k=min{,10}

  • 当重传16次仍不成功时,认为链路太忙,同一时间想要发送数据的站点过多,直接丢弃该帧

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/170717
推荐阅读
相关标签