6460 字
32 分钟
网络原理: 数据链路层

Ch3: 数据链路层

主机H1H_1和主机H2H_2的通信可能会经过路由器,然而只有在H1H_1H2H_2处数据包会完整经过网络的所有层,而在路由器处一般只经过最后三层物理层、数据链路层、网络层物理层、数据链路层、网络层

单看某一层,可以当作这个传输过程只经过了该层。也就是可以只关心传输过程中协议栈水平方向上的数据链路层。

数据链路层使用的信道主要有:

  1. 点对点信道
  2. 广播信道

1. 点对点信道的数据链路层#

定义1.1.11.1.1 链路是一个节点到另一个相邻节点的物理数据通路数据通路则是在链路上添加实现协议的软件和硬件。其中实现数据传输层的软件和硬件设备一般使用网络适配器。一般网络适配器实现数据链路层和物理层这两层的功能。

规程协议在数据链路层是同义的。

数据链路层的主要功能是:

  1. 发送方把上一层网络层交下来的数据添加上首部和尾部构成,再交由物理层发送到相邻节点。
  2. 接收方把物理层递上来的数据包解包,提取出其中的报文,若无错误则交给上层网络层,否则就丢弃。

点对点信道传输要解决的有3个大问题:

  1. 如何封装IPIP数据包为
  2. 如何进行透明传输
  3. 如何进行差错检验

数据链路层的协议多样,但基本上都是为了解决如上三个大问题所设计的。

比较有代表性的是PPPPPP协议。

PPPPPP协议主要传送的数据分为三种:

  1. IPIP数据报文
  2. **链路控制协议LCP(Link Control Protocol)LCP(Link \ Control \ Protocol)**报文: 建立、配置和测试数据链路的连接。
  3. **网络控制协议NCP(NetworkControlProtocol)NCP(Network Control Protocol)**报文: 支持不同种类的网络层协议

其中LCPLCP可用来识别身份

1.1 封装成帧#

封装成帧(framing)指的是在要发送的数据的首部和尾部分别加上一些控制信息,比如帧定界

帧定界符包括SOH(Start of header)SOH(Start \ of \ header)EOT(End of Transmission)EOT(End \ of \ Transmission)

只有完整的拥有SOHSOHEOTEOT的帧才是完整的帧,其余不完整的帧一律丢弃。

每一种链路层协议都规定了帧能够传送的数据部分的最大长度最大传送单元MTU(Max Transfer Unit)


PPPPPP协议的格式如下:

首部有4个字段,5个字节,尾部2个字段,3个字节。

其中首部第一个和尾部最后一个是Flag标记字段,分别是SOHSOHEOTEOT,是00x7E7E

首部第二个字段A(0A(0xFF)FF)和第三个字段C(0C(0x03)03)是附加信息,至今未有含义,可自己定义。

首部第四个字段是协议字段

协议字段传输的报文种类
00x00210021普通IPIP报文
00xC021C021LCPLCP报文
00x80218021网络层控制信息

而尾部第一个字段是FCSFCS校验字段(CRCCRC校验序列)。

1.2 透明传输#

透明传输所做的是不管要传送的数据是如何形式,包含何种字符,都要能够正确地传输。

此处特指传送数据中如果包含定界标识符的情形。如果不加处理,则会把数据中本身要发送的数据认定为定界符,导致传输出错。

具体解决的办法是: 添加转义字符。比如在要传送数据的部分中出现定界符之前加入ESCESC表示转义字符,并且在传送数据部分的出现ESCESC之前也要再加入一个转义字符ESCESC


PPPPPP协议中为了保证透明传输,主要有两种做法:

  1. 添加转义字符0x7D7D:
字符处理
00x7E7E变为2字节,(0x7D,0x5E)(0x7D,0x5E)
00x7D7D变为2字节,(0x7D,0x5D)(0x7D,0x5D)
值小于00x2020的字符cc变为2字节,(0x7D,c+0x20)(0x7D,c+0x20)
其他字符不变
  1. 0比特填充

PPPPPP协议的帧定界符是00x7E7E01111110B01111110B其中出现连续的6个1。

则规定: 在要传送的数据中每当出现连续的5个1,就加入一个00。就能保证要传送的数据中的字符不可能和00x7E7E弄混。

1.3 差错检测#

定义1.3.11.3.1 由于通信链路本身存在不可靠性,会把传输的0/10/1变为1/01/0,这种差错叫做比特差错

定义1.3.21.3.2 传输错误的比特数占所有传输比特总数的比叫做误码率(Bit Error Rate)

一般用循环冗余校验CRC(Cyclic Redundancy Check)来进行检错:

选定一个(k+1)(k+1)位的除数PP来模22除要发送的数据DD,得到kk位的余数RR,最后发送DRD\cdot R

接收端收到数据DD'后也用PP模2除,余数为0则说明只有很小很小的概率出错,则接受它。否则就丢弃。

可以用一句话来描述这个过程: 凡是接受的帧,都几乎没有差错。[PPPPPP协议也采用CRCCRC校验]

不过要注意的是,PPPPPP协议只保证了比特差错几乎消失,并不包含帧丢失,帧重复,帧乱序这种差错,即传输差错。

因此现在的主流做法是:

通信质量不好的线路,在数据链路层上添加重传、帧编号和确认机制,而通信质量好的线路则不添加这部分协议。

1.4 PPP协议的工作状态#

PPPPPP​协议的最大特点在于简单支持多种网络层协议

其工作状态主要是:

连接:

连接物理链路LCP配置鉴别NCP配置连接物理链路\to LCP配置 \to 鉴别 \to NCP配置

断开:

NCP释放网络层连接LCP释放数据链路层连接释放物理层连接NCP释放网络层连接 \to LCP释放数据链路层连接 \to 释放物理层连接

其中LCPLCP配置以LCPLCP配置请求帧的形式传输,配置选项包括: 最大帧长鉴别协议是否使用PPP协议首部的第二、三字段A和C

对于被请求方收到LCPLCP配置请求后可以回答:

  1. 配置确认帧:听懂并接受
  2. 配置否认帧:听懂但拒绝
  3. 配置拒绝帧:没听懂

当被请求方回复确认帧后则进入鉴别状态,使用配置阶段所选择的PAP或者更加复杂安全的CHAP协议进行鉴别。

鉴别成功后则进入网路层协议配置即NCP配置状态,此时主要是配置双方各自使用哪一种网络层协议PPPPPP协议能够支持通信两端的

网络协议不一样!

配置完毕后则链路配置完毕,可以相互传送数据!

当某一方发送终止请求LCP分组,而对方回复确认终止LCP分组后,则进入链路终止状态。当调制解调器的载波消失后,也就进入链路静止状态。

PPPPPP协议不仅涵盖了数据链路层,也包含了物理层和网络层


2. 使用广播信道的数据链路层#

广播信道最大的特点是进行一对多的通信。

局域网使用的信道就是广播信道

利用广播信道通信时同一时间只允许一台机器发送数据,因此是半双工通信方式。

2.1 局域网的数据链路层#

2.1.1 局域网的优势#

局域网的特点是网络为一个单位所拥有,且地理范围和站点数目均有限

局域网的主要优势是:

  1. 具有广播功能
  2. 便于系统的扩展和逐渐演变,各设备位置可以灵活改变
  3. 提高系统的可靠性、可用性、生存性。

2.1.2局域网的分类#

局域网可以按照网络拓扑结构分为:

  1. 星形网
  2. 环形网
  3. 总线网

局域网一般在速率不高时采用双绞线(10Mbps10Mbps~10Gbps10Gbps),而更高速的局域网要使用光纤作为媒介。

2.1.3 以太网与局域网#

由于以太网技术在局域网市场中大获成功,因此以太网几乎成了局域网的同义词。

以太网一般使用曼彻斯特编码的信号。

局域网内用户要合理共享信道,方式有2中:

  1. 使用信道共享技术,比如时分复用(TDM)、频分复用(FDM)、波分复用(WDM)和码分复用(CDM)。但此种方法代价太高,不适合局域网
  2. 使用动态媒体接入控制: 信道并非在用户通信时固定分配给用户,而是时刻都在用户手中
    • 随机接入: 用户在信道上可以随机发送信息,会产生碰撞,于是需要解决碰撞的协议。
    • 受控接入: 主要有令牌形式控制和集中控制的多路探寻(polling),或称轮询。

随机接入在局域网中使用的非常普遍,而受控接入却很少被使用。

2.1.3.1 以太网的标准#

以太网的由来是曾被认为是传播电磁波介质的以太(Ether)

一开始的以太网权威标准是DIX Ether V2DIX \ Ether \ V2,之后IEEEIEEE制定了一个和其差别非常小的IEEE 802.3IEEE \ 802.3标准。

IEEE 802.3IEEE \ 802.3协议中将数据链路层分为逻辑链路控制层LLC逻辑链路控制层LLC(Logical Link Control)和媒体接入控制层MAC(Media Access Control)媒体接入控制层MAC(Media \ Access \ Control)

和物理层相关的部分被放入MAC,对于LLCLLC透明。

然而DIX Ether V2DIX \ Ether \ V2中却没有这样划分。

2.1.3.2 适配器#

适配器自身带有存储器处理器(包括ROM和RAM)

适配器是计算机和外部通信的接口

作用主要有:

  1. 串并行转换: 适配器和外部电缆/线路传输主要以串行传输的方式进行,而适配器和计算机传输数据主要是以并行传输。
  2. 缓存传输的数据: 计算机的速度和外部网络的速度往往不一致,因此建立一个缓冲区。
  3. 安装驱动程序: 即插即用的硬性条件:操作系统可以从适配器上找到驱动程序来操作适配器。
  4. 能够实现以太网协议。

显然适配器囊括数据链路层的协议之外,也包含了物理层的协议。

并且,适配器的ROM上就存放了该适配器的物理地址。而计算机的**IPIP**地址则处在计算机自己的存储器上。

2.1.4 CSMA/CDCSMA/CD协议#

2.1.4.1 争用期、发送时延、传播时延之间的关系#

由于同一时间只允许一台计算机发送数据,为了处理碰撞,引入载波监听多点接入/碰撞检测协议CSMA/CDCSMA/CD(Carrier Sense Multiple Access With Collision Detection)

  • 多点接入 : 指明是多台机器以多点接入的方式相连接在一根总线上。
  • 载波监听:即检测信道。 不管是发送之前还是发送时,都需要不断检测信道。发送前检测是为了获取发送权,而发送时检测是为了检测碰撞。
  • 碰撞检测“边发送边监听”。当有多个计算机同时发送数据时,信号的波形叠加,变化幅度变大,超过一定阈值时就可判断不止一台机器在发送数据。此时就发生了碰撞。也成为冲突检测

由于发送时延导致即便是发送前没有其他机器在发送数据,也有可能产生碰撞。

一般认为电磁波在介质传输中的速率是2105km/s2*10^5km/s。因此电磁波在1km1km的信道上产生的传播时延是5μs5\mu s

一般认为以太网点到点传输的最大距离是5km5km

一般认为以太网的传输速率是10Mbit/s10 Mbit/s​。

规定帧和帧之间的最小间隔是9.6μs9.6\mu s,即发送一帧后要先等待9.6μs9.6 \mu s才进入到发送下一帧的阶段。目的是使得刚刚收到的数据帧的站点有时间可以接收该缓存,有时间清理。以便接收下一帧。

每一个站最多经过2τ2\tau​时间就可以确定是否发生了碰撞。把站能够检测是否发生碰撞的最长时间叫做争用期(碰撞窗口)

所以一个以太网中所有站点的发送时延都必须大于争用期。争用期要保证能够检测是否发生碰撞,因此争用期2τ\ge 2 \tau即两倍最大传播时延。

所以:

发送时延争用期2倍传播时延bitsbpsdistancev发送时延\ge 争用期 \ge 2倍传播时延 \\ \frac{bits}{bps}\ge\frac{distance}{v}

一般认为以太网的2倍传播时延是2τ=2×(5/2e5)s=50μs2\tau = 2 \times (5/2e5)s = 50\mu s,传播速率为1Mbit/s1Mbit/s

bitsmin10Mbps2τ=50μsbitsmin500bit\frac{bits_{min}}{10Mbps} \ge 2\tau = 50\mu s \Rightarrow bits_{min} \ge 500bit

由于这个最小比特数最好是2的幂次,所以一般取最小比特数(最小帧长)为29=512bit2^9=512bit​,64字节。

所以取以太网的一般争用期为51.2μs51.2\mu s

2.1.4.2 处理碰撞措施和截断2进制指数退避算法#

当站点发现信号发生碰撞后:

  1. 停止发送数据
  2. 继续发送32/48bit32/48bit人为干扰信号: 让其他所有机器都知道信号发生了碰撞。
  3. 执行截断二进制指数退避算法: 推迟随机的一段时间再发送数据,而不是等信道空闲了就立刻发送

截断二进制指数退避算法(truncated binary exponential backoff):

  1. 截断二进制指数退避算法常数就为以太网的争用期2τ2\tau
  2. 假设这是第kk重新发送该信号,如果k>16k>16,则放弃传输该帧,向上层报告。
  3. k=min(k,10)k'=min(k,10)
  4. [0,2k1][0,2^{k'}-1]中随机选择一个数ll,并将l2τl*2\tau作为等待时长。

要等待的平均时长会随着发送次数kk增大而不断增大,也能够减小发生碰撞的概率。

存在某一种情况,类似于操作系统中的饥饿:

有一已经重传很多次的帧和很多重传次数不那么多的帧,有可能重传次数不那么多的帧的等待时长小,一直传,而重传很多次的帧因为一直等待,而发生饥饿

2.1.5 使用广播信道和CSMA/CD协议CSMA/CD协议发送数据的流程#

另外,每当一帧被完全发送以后,一定要把已经发送的一帧保存一下。如果在争用期发生碰撞,还要推迟一段时间再发送该保存的帧。

2.2 以太网信道的利用率#

以太网中收发数据时的等待时间几乎都是2τ2\tau或者是τ\tau的整数倍,并且发送一段发送时延为T0T_0的数据占用信道的时间是T0+τT_0+\tau,所以比值aa很重要:

a=τT0a = \frac{\tau}{T_0}

以太网将aa作为参数,aa越小说明以太网越优秀。当发送数据时延T0T_0一定时,端到端的距离的传播时延τ\tau不能太大,当端到端的传播时延τ\tau一定时,T0T_0不能太小。

考虑信道一直空闲的极限情况,即发送从来不需要等待,那么以太网信道的最大理想利用率就是:

Smax=T0T0+τ=11+aS_{max}=\frac{T_0}{T_0+\tau}=\frac{1}{1+a}

如果SmaxS_{max}的值都很不理想,那么一般情况下肯定更加糟糕。

一般以太网的实际利用率为30%30\%时就已经处于重载的情况了。

2.3 数据链路层的物理地址: MAC地址#

2.3.1 MAC地址和通信方式#

MACMAC地址是固化在适配器ROM中的物理地址,用来标识一台计算机,是计算机的”名字”。

MACMAC地址占66个字节,48bit48bit。其中前33个字节是组织唯一标识符OUI组织唯一标识符OUI,需要向IEEEIEEE购买。后33个字节可以自由分配。

MACMAC地址第一个字节的最低位是I/GI/G位,用来表示该MACMAC地址是单播(只给一个站点发送)I/G=0I/G=0,还是多播(给一个组发送)I/G=1I/G=1.

另外,还考虑到了不向IEEEIEEE购买OUIOUI​的情况:

MACMAC地址第一个字节的最低第二位是G/LG/L位,用来表示该MACMAC是否是全球管辖(购买)G/L=0G/L=0,还是个人任意分配G/L=1G/L=1

个人任意分配则不能保证该MACMAC是全球唯一的。

使用MACMAC通信时主要有3种形式:

  1. 单播(一对一)
  2. 广播(一对全体)
  3. 多播(一对多),一部分站点

所有适配器至少要能识别前两种通信方式。

当信道上传播的数据的MACMAC目的地址和自己适配器地址不相符的时候,大多都直接丢弃丢弃,但是如果是工作在混杂模式下,也可以取到这部分发送给其他主机的消息。这种工作方式有好也有坏的地方,hackerhacker可以窃听,也可以由网络管理员监听网络流量,管理该局域以太网。

2.3.2 MAC帧的格式#

在以太网中传播的帧的格式有两种: DIXEtherDIX Ether V2和IEEE802.3IEEE 802.3,对应两种以太网协议。

但是它们非常相似,都是如下格式:

5(6)个字段:

  1. 前同步码: 用来时钟同步,前7个字节全是010101010101\cdots,最后一个字节是1010101010101111

  2. 目的MACMAC地址

  3. MACMAC地址

  4. 类型类型: 为了兼容不同种上层的网络层协议: 00x08000800 表示是IPIP数据报,而00x81378137表示是NovellIPXNovell IPX数据报。

  5. 数据字段: 461500Byte46-1500Byte

  6. FCSFCS检测字段: 一般使用CRCCRC循环冗余校验码(当传输媒体的误码率是1e81e-8左右时,MACMAC子层可以使得没检测到错误的概率小于1e141e-14)。

由于规定了以太网中帧的长度不能小于512bit(64Byte)512bit(64Byte),因此数据部分内容不能小于6418=46Byte64-18=46Byte,整个帧长度的范围是[64,1518]Byte[64,1518]Byte

无效帧的可能形式有:

  1. 帧长都不是整数个字节
  2. FCSFCS字段检测出错
  3. 帧长不在[64,1518][64,1518]之间。

遇见无效帧,直接丢弃

为什么不需要帧长度呢?以太网传输使用是曼彻斯特编码,具有自同步特性。所以根据每次时钟周期中间部分的阶跃变化可以区分出每一个比特。只需要从最后一个比特[区分最后一个比特的办法是,最后一个比特后不再发送任何比特流]开始数44​个字节就能找到数据的末尾。因此不需要帧长度这一字段。

帧和帧之间存在一定的空隙,9696比特时间。

但是当数据部分有填充字符时这一办法会失效,这就要求数据链路层上层的网络层要有自己的识别数据长度的手段。

IEEE 802.3IEEE \ 802.3DIX V2DIX \ V2帧的区别只在类型字段:

DIX V2DIX \ V2帧的类型字段始终是类型

IEEE 802.3IEEE \ 802.3类型字段小于00x06000600时,就表示数据字段的长度。且数据字段必须装入上层的逻辑链路控制层LLC逻辑链路控制层LLC的帧LLCLLC帧

2.4 在物理层扩展以太网: 使用集线器的以太网#

集线器是一种工作在物理层的,每个接口只是简单转发比特的器件。主机通过集线器星形连接在一起。

使用集线器的以太网本质上仍然是总线网。因此一段时间还是只允许一台主机发送数据,通过集线器连接在一起的主机仍然要采用CSMA/CD协议。

集线器往往多个(4~8个)堆叠在一起使用。功能都以模块的形式叠加在一起。增加功能模块或者是减少功能模块都可以热插拔

通过光纤把集线器和站点相连接可以让以太网的范围变大很多很多,这就是在物理层上扩展以太网。然而这种方式的缺点是扩大了冲突域(碰撞域)

增大碰撞域的原因就在于集线器只会不断转发比特流,因此在一台主机发送数据时,数据会被转发到所有线路中。

如果每台机器,每条线路的吞吐量都是100Mbit/s100Mbit/s,那么上面的集线器群的吞吐量也是100Mbit/s100Mbit/s,尽管3个系分开后的吞吐量是3100Mbit/s=300Mbit/s3*100Mbit/s = 300Mbit/s

另外由于集线器只能转发而没有缓存机制,如果有的线路的吞吐量是10Mbit/s10Mbit/s,而有的是100Mbit/s100Mbit/s,整个系统也只能工作在10Mbit/s10Mbit/s。因为没有处理速度不匹配的机制。

2.5 在数据链路层扩展以太网: 使用交换机的以太网#

最初在数据链路层扩展以太网的是网桥(Bridge),网桥根据数据帧的MAC地址,查找网桥内部的MAC地址表,进行数据帧的转发或者丢弃(找不到)。

后来**以太网交换机(交换式集线器、第二层交换机)**出现了。

2.5.1 以太网交换机的基本特点#

以太网交换机也有许多不同的种类,有具有第三层特性的第二层交换机,拥有部分网络层的功能,可以对数据报文进行分片和对多播通信量的管理。有多层交换机,可以根据第三层的IP地址对分组进行过滤。

2.5.1.1 并行性、独占传输媒体#

以太网交换机具有多个接口,每个接口和一台主机或者是另一个交换机相连接。以太网交换机具有并行性,因此大多工作在全双工模式

另外以太网交换机在两台主机进行通信时都是独占传输媒体,完全不碰撞地传输。

独占传输媒体并行传输的好处是带宽变得很大:

每个接口的带宽是10Mbit/s10M bit/s,一共有1010个接口,则整个以太网交换机系统的带宽是10*10Mbit/s

而普通集线器仍然是10Mbit/s10M bit/s

2.5.1.2 自学习性#

以太网交换机内部的**MACMAC地址表是通过自主学习算法自动地逐渐建立起来的。因此是一种即插即用**的设备。

每当帧信息传给交换机以后,交换机查找地址表,查找目标地址是否在表中,如果在则单独转发,如果不在则广播接着源地址和对应的端口号写入地址表中。

一般地址表会设置一定的有效时长,过期的项目会被自动地删除,来应对某个端口的主机网卡适配器MAC改变的情况。

但是在有环路的拓扑网络中,自学习性可能会带来兜圈子的问题,因此对于交换机还制定了生成树协议STP,即切断某些线路,使得从一台主机到其他的主机是无环的树形结构

2.5.1.3 缓存与直通#

交换机一般有缓存帧的功能,即暂时保存帧。当帧的接收方端口非常繁忙时,交换机会保存该帧,等到空闲时再转发。

也有的交换机有直通的功能,不在转发前先把帧全缓存,而是直接查找转发表立即转发到目的MACMAC地址对应端口。此种交换方式基于硬件的交叉矩阵传播时延非常小。不过,此种方式不进行帧校验,可能会发送错误的帧。

2.5.2 从总线网到星型网#

随着总线上主机设备逐渐变多,总线网的性能逐渐下降。但是基于交换机的星形网效率非常好。因此如今大多数以太网是星型结构。

使用交换机的以太网不会产生冲突,也就不使用CSMA/CDCSMA/CD协议。不像总线网那样工作在半双工模式,以太交换网工作在全双工模式。但是帧的结构没有改变。

2.6 虚拟局域网VLAN(Virtual Local Area Network)(Virtual \ Local \ Area\ Network)#

利用交换机可以很简单地做到VLAN

定义2.6.12.6.1 虚拟局域网VLAN是由一些局域网网段构成的与物理位置无关的**逻辑组。**这些网段往往有某些共同的特性或者需求。每一个VLAN的帧都有标识符,标识该帧来自于何处。

虚拟局域网只是局域网提供的一种服务,而不是真正的新型网络。

虚拟局域网中的每一个成员都可以听到来自该虚拟局域网中另一台主机的广播。但是非该虚拟局域网中的成员听不到。通过限制广播的范围,能够网络不会因为传播过多的广播信息而造成广播风暴

支持虚拟局域网的方式是在数据帧中插入4个字节的VLANVLAN标志

前两个字节一定是00x81008100,当接收方检测到00x81008100时就知晓该帧是VLAN帧

接着前33位是用户优先级标识符,接着是规范格式指示符(Canonical Format Indicator),最后的1212位是VLANVLAN标识符,标识该虚拟局域网的VID,唯一标识该以太网帧属于哪一个虚拟局域网。

加入该44字节后,以太网帧的最大帧长变为18+1500+4=152218 + 1500 + 4 = 1522字节。

2.7 高速以太网#

100BASET100BASE-T指的是100Mbit/s100Mbit/sBase表示传输的是基带信号T表示传输的介质是双绞线(F表示是光纤)

100BASEF100BASE-F

网络原理: 数据链路层
http://blog.fragments.work/posts/computernetwork/ch3/
作者
Lixin WANG
发布于
2024-04-05
许可协议
CC BY-NC-SA 4.0