注:内容参考湖科大教书匠《深入浅出计算机网络》
数据链路层概述
数据链路层的主要任务是实现帧在一段链路上或一个网络中进行传输。
数据链路层使用的信道主要有两种:
- 点对点信道,使用一对一的通信方式。PPP协议则是目前使用最广泛的点对点协议。
- 广播信道,这种信道上连接的主机很多,使用一对多的广播通信方式。采用共享广播信道的有线局域网普遍使用CSMA/CD协议,而无线局域网则使用CSMA/CA协议。
数据链路层的分为MAC子层和LLC子层
主要区别是:实现不同、依赖体不同、主要功能不同。
- 实现不同
MAC子层:MAC子层是由网络接口卡(网卡)来实现。LLC子层:LLC子层是由传输驱动程序实现的。
- 依赖体不同
MAC子层:MAC子层依赖于各自的物理层。LLC子层:LLC子层在IEEE802.2标准中定义,为802标准系列共用。
- 主要功能不同
MAC子层:MAC子层的的主要功能为数据帧的封装/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差错控制。
LLC子层:LLC子层的主要功能为传输可靠性保障和控制,数据包的分段与重组,数据包的顺序传输。
数据链路层在网络体系结构中所处的地位
主机都有完整的五层协议栈,而路由器在转发时仅使用协议栈的下三层。
为了简单起见,当学习数据链路层的相关问题时,我们可以只关注数据链路层本身,而忽略网络体系结构中的其他各层。
即数据是在各相关设备的数据链路层之间沿水平方向传送,如示例中,主机H1到H2的通信由三段不同的数据链路层通信组成:H1->R1、R1->R2以及R2->H2。
注:这三段不同的数据链路层可能采用不同的数据链路层协议。
链路、数据链路和帧
链路(Link)式指从一个节点到相邻节点的一段物理链路(有线/无线),而中间没有任何的交换节点。
数据链路(Data link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
如,网络适配器(网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。
帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU。
数据链路层的三个重要问题
封装成帧和透明传输
封装成帧
封装成帧是指数据链路层给上层交付下来的PDU添加一个首部和一个尾部,构成帧。
帧的首部和尾部中包含有一些重要的控制信息。
帧首部中往往包含帧开始符、帧的源地址和目的地址,而帧尾部中往往包含顿校验序列和帧结束符。接收方的数据链路层根据帧首部中的帧开始符和帧尾部中的帧结束符进行帧定界。
注:以太网帧的首部和尾部并没有帧定界符,通过物理层在帧前添加8字节的前导码(见下文)来进行帧定界。
为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。
考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(MTU),例如以太网的MTU为1500个字节。
透明传输
透明传输是指数据链路层对上层交付下来的PDU没有任何限制,就好像数据链层不存在一样。
即,需要解决帧的数据载荷部分恰好也出现了帧定界符的问题:
- 面向字节的物理链路使用字节填充的方法实现透明传输。
- 面向比特的物理链路使用比特填充的方法实现透明传输。
字节填充
发送方的数据链路层在数据载荷中出现帧定界符的前面,插入一个转义字符ESC
(其十六进制编码是1B)。如果转义字符自身也出现在数据载荷中,则在转义字符的前面也插入一个转义字符
比特填充
假设8个比特构成的特定位串01111110
作为帧定界符。
发送方的数据链路层扫描数据载荷,只要出现5个连续的比特1,就在其后填入一个比特0。
接收方的数据链路层对数据载荷进行扫描,每当发现5个连续的比特1时,就把其后的一个比特0删除。
违规编码法
在物理层进行比特编码时,常采用违规编码法。
例如,曼彻斯特编码方法将数据比特“1”编码成“高一低”电平对,将数据比特“0”编码成“低-高”电平对,而“高-高”电平对和“低-低”电平对在数据比特中是违规的(即没有采用),因此可借用这些违规编码序列来定界帧的起始和终止。
局域网IEEE802标准就采用了这种方法。违规编码法不采用任何填充技术便能实现数据的透明传输,但只适用于采用冗余编码的特殊编码环境。
注:冗余编码是一种所用符号数或信号码元数比表示信息所必需的数目多。
差错检测
误码
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错)。如:比特1变成比特0,或比特0变成比特1。
传输错误的比特数量占所传输比特总数的比率称为误码率(BER)。
提高链路的信噪比,可以降低误码率,但在实际的通信链路上,不可能使误码率下降为零。
发送方的数据链路层采用某种检错技术,根据帧的内容计算出一个检错码,将检错码填入帧尾部。接收方的数据链路层从帧尾部取出检错码,采用与发送方相同的检错技术,就可以通过检错码检测出帧在传输过程中是否出现了误码。
帧尾部中用来存放检错码的字段称为帧检验序列(FCS)。
奇偶校验
奇校验是在待发送的数据后面添加1个校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数。
偶校验是在待发送的数据后面添加1个校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为偶数。
如果有奇数个位发生误码,则所包含“1”的数量的奇偶性会发生变化,可以检测出误码;如果有偶数个位发生误码,则所包含“1”的数量的奇偶性不会发生变化,不能检测出误码。
循环冗余校验
循环余校验CRC的基本思想如下:
- 收发双方约定好一个生成多项式G(X)。
- 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码,即余码,将余码添加到待发送数据的后面一起传输。
- 接收方收到数据和余码后,通过生成多项式G(X)来计算收到的数据和余码是否产生了误码。
发送发CRC操作
二进制模2除法采用模2减法(不带借位的二进制减法)。
按照模2 除法运算法则,那么余数首位是1就商1,是0就商0。
注:模2运算加法不进位,减法不借位,只对对应比特做逻辑异或运算。
接收方CRC操作
循环冗余校验CRC具有很好的检错能力(漏检率极低),可以检测所有的单比特错误,虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
注:循环冗余码是有纠错能力的,数据链路层只使用了它的检错功能。接收方检测到出错直接丢弃。
海明码
海明码可以纠正一位差错。
流量控制
在数据链路层中,流量控制机制和可靠传输机制是交织在一起的。
流量控制是指由接收方控制发送方的发送速率,使接收方有足够的缓冲空间来接收每个帧。
常见的流量控制方法有两种:停止-等待协议和滑动窗口协议。数据链路层和传输层均有流量控制的功能,它们都用到了滑动窗口协议,但也有所区别,主要体现如下:
- 数据链路层控制的是相邻结点之间的流量,而传输层控制的是端到端的流量。
- 数据链路层的控制手段是接收方收不下就不返回确认。传输层的控制手段是接收方通过确认报文段中的窗口值来调整发送方的发送窗口。
可靠传输
可靠传输的基本概念
使用差错检测技术检测出了误码,那么接下来的处理取决于数据链路层向其上层提供的服务类型:
- 数据链路层向其上层提供的是不可靠传输服务,则接收方的数据链路层丢弃有误码的帧即可,其他什么也不用做。
- 若数据链路层向其上层提供的是可靠传输服务,这就需要数据链路层通过某种机制实现发送方发送什么,接收方就能收到什么。
有线链路的误码率比较低,不要求数据链路层提供可靠传输服务;无线链路易受干扰,误码率比较高,要求数据链路层必须提供可靠传输服务。
从整个计算机网络体系结构来看,传输差错包括误码、分组丢失、分组失序和分组重复。分组丢失、分组失序和分组重复一般不会出现在数据链路层,而是在其上层出现。
可靠传输服务并不局限于数据链路层,其他各层均可选择实现可靠传输。
可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。
停止-等待协议
停止-等待协议的实现原理
确认、否认和重传机制
DATA表示数据分组,ACK表示确认分组,NAK表示否认分组。
接收方收到发送方的数据分组后,通过差错检测技术可检测出数据分组是否存在误码:
- 如果没有误码,就接受该数据分组,并给发送方发送ACK分组。发送方收到ACK分组后就可以发送下一个数据分组。
- 如果存在误码,就丢弃该数据分组,并给发送方发送NAK分组,发送方收到NAK分组后就会重传之前出现误码的这个数据分组。
超时重传机制
如果出现数据分组、确认分组或否认分组丢失的情况,仅有确认、否认和重传机制的停止-等待协议就无法实现可靠传输。
发送方发送的数据分组在传输过程中丢失了。接收方不可能收到该数据分组,因此也就不会给发送方发送确认分组或否认分组。发送方将永久等待接收方的确认分组或否认分组。
发送方可在每发送完一个数据分组时就启动一个超时计时器,若到了超时计时器所设置的超时重传时间(RTO),但发送方仍未收到接收方的确认分组或否认分组,就重传之前已发送过的这个数据分组,这称为超时重传。
一般可将RTO设置为略大于收发双方的平均往返时间RTT。在数据链路层,点对点的往返时间RTT比较固定,RTO比较好设定。
注:在给停止-等待协议补充了超时机制后,就可以不实现否认机制,接收方收到误码分组直接丢弃即可。
数据分组编号机制
确认分组丢失时,发送方会产生超时重传。接收方会收到两个相同的数据分组。如果接收方不能识别出所接收的数据分组与前一次接收的数据分组是重复的,则会导致分组重复这种传输差错。
发送方必须给每个数据分组带上不同的序号,接收方连续收到序号相同的数据分组时,就可识别出分组重复这种传输差错。这时接收方应当丢弃重复的数据分组,并且还必须向发送方再发送一个确认分组。
数据链路层一般不会出现分组失序的差错。对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号,序号有0和1这两个。
确认分组编号机制
对于数据链路层以上的各层,其往返时间RTT具有不确定性,可能出现确认分组迟到而导致发送方在收到确认分组前就产生了超时重传,这就有可能导致发送方收到重复的确认分组。
发送方为了能能够判断收到的确认分组是否重复,接收方应当给确认分组编序号。发送方收到重复的确认分组后,将其丢弃即可。
对于数据链路层,由于其点对点的往返时间RTT比较固定,一般不会出现确认分组迟到的情况,因此在数据链路层实现停止-等待协议时可以不对确认分组编序号。
使用上述具有确认、否认、重传、超时重传和分组编号机制的停止-等待协议,就可以在不可靠的信道上实现可靠传输。停止-等待协议属于自动请求重传(ARQ)协议。所谓“自动请求重传”,就是指重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组。
注:发送方发送完一个数据分组后,必须暂时保留已发送的数据分组的副本,以便在超时重传时使用,只有在收到相应的确认分组后才能从缓存中删除该数据分组。
停止-等待协议的信道利用率
进行粗略估算时,信道利用率计算公式如下:
U ≈ T D T D + R T T + T A → T A ≪ T D U ≈ T D T D + R T T → R T T ≫ T D U 很低 \quad U\approx\frac{T_D}{T_D+RTT+T_A}\quad\xrightarrow{T_A\ll T_D}\quad U\approx\frac{T_D}{T_D+RTT}\quad\xrightarrow{RTT\gg T_D}\quad U\text{ 很低} U≈TD+RTT+TATDTA≪TDU≈TD+RTTTDRTT≫TDU 很低
若忽略收发双方的处理时延和接收方发送确认分组的发送时延 T A T_A TA( T A T_A TA一般都远小于 T D T_D TD)。往返时间RTT远大于数据分组的发送时延 T D T_D TD时,信道利用率U会非常低。
另外,如果出现超时重传,则信道利用率还要降低。
流水线传输
在往返时间RTT相对较大的情况下,为了提高信道利用率,收发双方可以不采用信道利用率很低的停止-等待协议,而采用流水线传输方式。
所谓流水线传输,就是指发送方在未收到接收方发来确认分组的情况下,可以连续发送多个数据分组,而不必每发送完一个数据分组就停下来等待接收方的确认分组。这种传输方式可以明显提高信道利用率。
在使用流水线传输方式时,发送方不能无限制地连续发送数据分组,否则可能会导致网络中的路由器或接收方来不及处理这些数据分组,进而导致数据分组的丢失,这实际上是对网络资源的浪费。因此,必须采取措施来限制发送方连续发送数据分组的数量。
回退N帧协议
回退N帧协议采用流水线传输方式,并且利用发送窗口来限制发送方连续发送数据分组的数量,这属于连续ARQ协议。
发送方维护一个发送窗口,在未收到接收方确认分组的情况下,发送方可以将序列号落入发送窗口的所有数据分组连续发出去。
接收方维护一个接收窗口,只有正确到达接收方且序号落入接收窗口内的数据分组才被接收方接收。
接收方每正确收到一序号落入接收窗口的数据分组,接收窗口向前滑动一个位置,同时给发送方发送针对该数据分组的确认分组。
发送方每收到一个按序确认的发送分组,发送窗口向前移动一个位置。
在回退N帧协议的工作过程中,发送方的发送窗口和接收方的接收窗口按上述规则不断向前滑动。因此,这类协议又称为滑动窗口协议。
无传输差错
- 发送方将序号落入发送窗口内的0~2号数据分组连续发送出去。
- 0~2号数据分组按序正确到达接收方。
- 接收方按序接收0~2号数据分组。每接收一个数据分组,接收窗口就向前滑动一个位置,并且给发送方发送相应的确认分组。接收窗口当前滑动到序号3,接收方给发送方发送了0~2号确认分组。
- 0~2号确认分组按序正确到达发送方。
- 发送方按序接收0~2号确认分组。每接收一个确认分组,发送窗口就向前滑动一个位置,这样就有新的序号3~5落入发送窗口中,发送方可将发送窗口内的3~5号数据分组连续发送出去。
注:发送方应将缓存中已收到确认的数据分组的副本删除,而接收方应当从接收缓存中尽快取走正确接收的数据分组。
超时重传、回退N帧
- 发送方将序号落入发送窗口内的0~2号数据分组连续发送出去,其中1号分组出现误码。接收方按序接收0号数据分组并发送0号确认分组,接收窗口向前滑动一个位置。
- 接收方通过1号数据分组中的检错码,检测出了1号数据分组中有误码,丢弃。发送方收到接收方发来的0号数据分组后,将发送窗口向前滑动一个位置。
- 发送方将序号落入发送窗口内的3号数据分组发送出去。接收方丢弃序号未落入接收窗口内的2号数据分组,并给发送方发送针对最近已按序接收的0号数据分组的确认分组。
- 发送方收到针对0号数据分组的第1个重复确认,忽略。接收方收到序号未落入接收窗口内的3号数据分组,丢弃,并给发送方发送针对最近已按序接收的0号数据分组的确认分组。
- 发送方收到针对0号数据分组的第2个重复确认,忽略。已发送的1号数据分组出现了超时,于是发送方将序号落入发送窗口内的、超时的1号分组和其后已发送的2号和3号分组全部重传(因为接收方只能接收按序到达的数据分组)。这就是回退N帧协议名称的由来,即一旦出错就需要退回去重传已发送过的N个数据分组。
注:收到针对0号数据分组的重复确认,就表明接收方未按序正确接收1号数据分组,可以不等重传计时器超时就立刻重传1号数据分组。
累计确认
- 发送方将序号落入发送窗口内的0~3号数据分组连续发送给接收方。
- 接收方按序正确接收0号和1号数据分组,并给发送方发送累积确认,确认号为1,表明已正确接收序号到1为止的所有数据分组。接收方将接收窗口向前滑动两个位置。
- 接收方按序正确接收2号和3号数据分组,并给发送方发送累积确认,确认号为3,表明已正确接收序号到3为止的所有数据分组。接收方将接收窗口向前滑动两个位置。
- 1号累积确认分组在传输过程中丢失了,而3号累积确认分组正确到达发送方。
- 发送方收到3号累积确认分组后,将发送窗口向前滑动4个位置,这样就使得已获得累积确认的0~3号数据分组的序号移出了发送窗口,而新序号4~7落入了发送窗口。
优点:
- 减少向网络中注入确认分组的数量。
- 即使确认分组丢失,也可能不必重传数据分组。
缺点:
- 不能向发送方及时准确地反映出接收方已正确接收的所有数据分组的数量。
窗口大小
发送窗口尺寸 W T W_T WT和接收窗口尺寸 W R W_R WR
回退N帧协议规定: W R = 1 , 1 < W T ≤ 2 n − 1 W_R=1,1< W_T \leq 2^n-1 WR=1,1<WT≤2n−1。其中, n n n是用来给数据分组编序号的比特数量。
对于回退N帧协议,其 W T W_T WT应该大于1且不能超过其范围上限,否则可能会造成接收方无法分辨新、旧数据分组的情况。
选择重传协议
为了进一步提高信道利用率,可以设法只重传出现差错的数据分组,这就需要接收窗口的尺寸大于1,以便先收下失序但正确到达接收方且序号落入接收窗口内的数据分组,等到所缺数据分组收齐后再一并送交上层,这就是选择重传(SelectiveRepeat,SR)协议。
为了使发送方仅重传出现差错的数据分组,接收方不能再采用累积确认,而需要对每一个正确接收的数据分组进行逐一确认。
窗口大小
用 n n n个比特给分组编号。
协议规定有: 1 < W R ≤ W T , W T + W R ≤ 2 n 1<W_R \leq W_T,W_T+W_R \leq 2^n 1<WR≤WT,WT+WR≤2n。 W R W_R WR超过 W T W_T WT没有意义,由此推得 1 < W R ≤ 2 ( n − 1 ) 1<W_R \leq 2^{(n-1)} 1<WR≤2(n−1)。
确保接收窗口向前滑动后,落入接收窗口内的新序号与之前的旧序号没有重叠,避免无法分辨新旧数据分组。当 W R W_R WR取最大值 2 ( n − 1 ) 2^{(n-1)} 2(n−1)时, W T W_T WT能取到的最大值也为 2 ( n − 1 ) 2^{(n-1)} 2(n−1)。
注:一般情况下,两个窗口大小相同。
协议实现
- 发送方将序号落入发送窗口内的0~3号数据分组连续发送给接收方。其中0号分组出现误码,接收方将其丢弃。
- 接收方将失序但正确到达接收方且序号落入接收窗口内的1~3号数据分组进行缓存,并给发送方发送相应的1~3号确认分组。缓存的1~3号数据分组暂时不能交付给上层。由于还未收到序号落入接收窗口内的0号数据分组,因此接收窗口不能向前滑动。
- 发送方收到失序的1~3号确认分组后并不能向前滑动发送窗口,但要记录1~3号数据分组已被确认,因此只有0号数据分组被超时重传。0号数据分组正确到达接收方。
- 接收方正确接收序号落入接收窗口内的0号数据分组,并给发送方发送0号确认分组,0号确认分组正确到达发送方。接收方将接收窗口向前滑动4个位置。
- 发送方收到期盼已久的0号确认分组后,将发送窗口向前滑动4个位置。现在,接收方可以接收序号落入接收窗口内的4~7号数据分组,而发送方可以将序号落入发送窗口内的4~7号数据分组连续发送出去。
注:接收方收到误码的数据分组后除将其丢弃,还可给发送方发送相应的否认分组NAK。发送方收到NAK后,就会立即重传相应的数据分组而不必等到重传计时器超时再重传。
点对点协议
点对点协议PPP概述
点对点协议(PPP)是目前使用最广泛的点对点数据链路层协议。
目前PPP已成为因特网的正式标准。
PPP协议主要有两种应用:
- 用户计算机与ISP通信时所采用的数据链路层协议一般就是PPP协议。
- 广泛应用于广域网路由器之间的专用线路。
点对点协议PPP 的组成
1)链路控制协议(LCP):用来建立、配置、测试数据链路的连接以及协商一些选项。
2)网络层PDU封装到串行链路的方法:网络层PDU作为PPP帧的数据载荷被封装在PPP帧中传输。网络层PDU的长度受PPP协议的最大传送单元MTU的限制。PPP协议既支持面向字节的异步链路,也支持面向比特的同步链路。
3)网络控制协议(NCP):包含多个协议,其中的每一个协议分别用来支持不同的网络层协议。
PPP的帧格式
PPP帧的首部由标志字段F(Flag)、地址字段A(Address)、控制字段C(Control)以及协议字段P(Protocol)组成。
PPP帧的尾部由帧检验序列FCS字段和标志字段F组成。
PPP帧的信息字段I(Information)(数据载荷)可以是网络层PDU、LCP分组或NCP分组。
首部各字段
标志字段F的长度为1字节,取值固定为0x7E(“0x”用来表示其后面的字符为十六进制)。是PPP帧的定界符。
连续两帧之间只需要用一个标志字段F。两个连续的标志字段表示一个空帧,应当丢弃。
地址字段A的长度为1字节,取值固定为0xFF。控制字段C的长度为1字节,取值固定为0x03。目前无其他定义,对于PPP帧没有什么意义。
协议字段P的长度为2字节:
- 当取值为0x0021时,PPP帧的信息字段I(数据载荷)是IP数据报。
- 当取值为0xC021时,PPP帧的信息字段I(数据载荷)是PPP链路控制协议的分组。
- 当取值为0x8021时,PPP帧的信息字段I(数据载荷)是PPP网络控制协议的分组。
PPP帧的数据载荷
信息字段I就是PPP帧的数据载荷,其长度是可变的,最大不能超过1500字节,即PPP帧的最大传送单元为1500字节。
尾部中的各字段
帧检验序列的长度为2字节,采用CRC计算余码并填入该字段,用于PPP顿的差错检测。
标志字段F与PPP顿首部中的标志字段F相同,它们共同作为PPP顿的定界符。
PPP帧的透明传输
字节填充
发送方的处理:
- 将数据载荷中出现的每一个0x7E 减去0x20(相当于异或0x20),然后在其前面插入转义字符0x7D 。
- 若数据载荷中原来就含有0x7D,则把每一个0x7D 减去0x20,然后在其前面插入转义字符0x7D 。
- 将数据载荷中出现的每一个ASCII 码控制字符(即数值小于0x20 的字符),加上0x20(相当于异或0x20,将其转换成非控制字符),然后在其前面插入转义字符0x7D 。
接收方的处理:
进行与发送方相反的变换,就可以正确地恢复出未经过字节填充的原始数据载荷。
零比特填充
发送方的处理:
对帧的数据载荷进行扫描(一般由硬件完成),每出现5 个连续的比特1,则在其后填充一个比特0 。
接收方的处理:
对帧的数据载荷进行扫描,每出现5个连续的比特1时,就把其后的一个比特0删除。
共享式以太网
以太网(Ethernet)以曾经被假想的电磁波传播介质——以太(Ether)来命名。
以太网最初采用无源电缆(不包含电源线)作为共享总线来传输帧,属于基带总线局域网。
以太网目前已经从传统的共享式以太网发展到交换式以太网。
以太网采用两项措施来简化通信:
- 采用无连接的工作方式,既不编号,也不要求确认,提供不可靠服务。
- 发送数据都使用曼彻斯特编码的信号。
网络适配器
要将计算机连接到以太网,需要使用相应的网络适配器,简称为网卡。
在计算机内部,网卡与CPU之间的通信,一般是通过计算机主板上的I/O 总线以并行传输方式进行。
网卡与外部以太网(局域网)之间的通信,一般是通过传输媒体(同轴电缆、双绞线电缆、光纤)以串行方式进行的。
MAC地址
MAC地址作用
对于点对点信道,由于只有两个站点分别连接在信道的两端,因此其数据链路层不需要使用地址。
对于连接有多个站点的广播信道,要实现两个站点间的通信,则每个站点就必须有一个数据链路层地址作为唯一标识。
在每个主机发送的帧的首部中都携带有发送主机和接收主机的地址。由于这类地址是用于媒体接入控制(Medium Access Control)的,因此被称为MAC地址。
假设主机C给主机D发送帧,则在帧首部中的目的地址字段应填入主机D的MAC地址D,而在源地址字段应填入主机C的MAC地址C。这样,总线上的其他各主机中的网卡收到该帧后,就可以根据顿首部中的目的地址字段的值是否与自己的MAC地址匹配,决定丢弃或接受该帧。
注:MAC地址一般被固化在网卡的EEPROM中,因此MAC地址也被称为硬件地址或物理地址。
一般情况下,普通用户的计算机中往往会包含两块网卡:一块是用于接入有线局域网的以太网卡,另一块是用于接入无线局域网的Wi-Fi网卡。它们各自都有一个全球唯一的MAC地址。交换机和路由器往往拥有更多的网络接口,所以就会拥有更多的MAC地址。
注:MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
IEEE 802局域网的MAC地址
MAC地址的格式,每8个比特为1个字节,从左至右依次为第一字节到第六字节。
前三个字节是组织唯一标识符(OUI),生产网络设备的厂商需要向IEEE的注册管理机构申请一个或多个OUI。后三个字节是获得OUI的厂商可自行随意分配的网络接口标识符,只要保证生产出的网络设备没有重复地址即可。
组织唯一标识符OUI中包含有用于指示MAC地址是单播地址还是多播地址的标志位I/G,用于指示MAC地址是全球管理还是本地管理的标志位G/L。
全球单播地址是由厂商生产网络设备时固化在设备中的。、
全球多播地址是交换机和路由器等标准网络设备所支持的多播地址,用于特定功能。
本地单播地址由网络管理员分配,可以覆盖网络接口的全球单播地址。
本地多播地址可由用户对网卡编程实现。
网卡从网络上每收到一个帧,就检查帧首部中的目的MAC地址,按以下情况处理:
- 如果目的MAC地址是广播地址,则接受该帧。
- 如果目的MAC地址与网卡上固化的全球单播地址相同,则接受该帧。
- 如果目的MAC地址是网卡支持的多播地址,则接受该帧。
- 除上述情况外,丢弃该帧。
注:全球单播MAC地址就如同身份证号码,具有唯一性,用户应尽确保自己拥有的全球单播MAC地址不被泄露。为了避免泄露,大多数移动设备都已经采用了随机MAC地址技术。
CSMA/CD协议
基本原理
信号碰撞:
- 当某个站点在总线上发送帧时,此时总线上的其他站点也要在总线上发送帧。
- 当两个或多个站点同时使用总线发送帧时。
为了解决各站点争用总线的问题,共享总线以太网使用了一种专用协议CSMA/CD,它是载波监听多址接入碰撞检测(Carrier Sense Multiple Access Collision Detection)的缩写。
CSMA/CD协议要点如下:
多址接入MA
- 多个站点连接在一条总线上,它们竞争使用总线。
载波监听CS
每个站点在发送帧之前,先要检测一下总线上是否有其他站点在发送帧(“先听后说”):
- 若检测到总线空闲96 比特时间(发送96 比特所耗费的时间,也称为帧间最小间隔),则发送这个帧;
- 若检测到总线忙,则继续检测并等待总线转为空闲96 比特时间,然后发送这个帧。
碰撞检测CD
每个正在发送帧的站点边发送边检测碰撞(“边说边听”):
- 一旦发现总线上出现碰撞,立即停止发送,退避一段随机时间后再次从载波监听开始进行发送(“一旦冲突,立即停说,等待时机,重新再说”)。
注1:站点检测到总线空闲,并不一定是空闲,可能是其他主机发送的信号还未传播到站点。
注2:对于正在发送帧的站点,要求“边发送边检测”,即不可能进行全双工通信,只能进行半双工通信。
争用期
任意站点在发送帧的过程中都可能会遭遇碰撞,应当考虑位于共享总线以太网两端的两个站点发送的帧产生碰撞的情况。
如图所示,最先发送帧的主机A,在开始发送帧后最多经过 2 τ 2\tau 2τ时长(即 δ → 0 \delta \rightarrow 0 δ→0)就可检测出所发送的帧是否遭遇了碰撞。
因此,共享总线以太网的端到端往返时间 2 τ 2\tau 2τ被称为争用期或碰撞窗口。共享总线以太网上的某个站点在开始发送帧后经过争用期 2 ι 2\iota 2ι这段时间还没有检测到碰撞,就可以肯定这次发送不会产生碰撞。
10Mb/s共享总线以太网规定争用期 2 τ 2\tau 2τ的值为512比特发送时间,即51.2us。
这考虑了共享总线以太网端到端时延、可能存在的转发器时延以及发送帧的站点发送的32比特或48比特人为干扰信号所持续的时间等。
最小帧长和最大帧长
最小帧长
为了确保共享总线以太网上的每一个站点在发送完一个完整的帧之前,能够检测出是否产生了碰撞,帧的发送时延就不能少于共享总线以太网端到端的往返时间,即一个争用期 2 τ 2\tau 2τ。
最小帧长 = 总线传播时延 × 数据传输时延 × 2 最小帧长=总线传播时延 \times数据传输时延 \times2 最小帧长=总线传播时延×数据传输时延×2
对于10Mb/s共享总线以太网,其争用期 2 τ 2\tau 2τ的值规定为51.2us,因此其最小帧长为512b,即64B。
- 当某个站点在发送帧时,如果帧的前64B没有遭遇碰撞,那么帧的后续部分也就不会遭遇碰撞。如果遭遇碰撞,就一定是在帧的前64B之内。
- 发送帧的站点一旦检测到碰撞就立即中止帧的发送,此时已发送的数据量一定小于64B。因此,接收站点收到长度小于64B的帧,将其丢弃即可。
####最大帧长
一般来说,帧的数据载荷的长度应远大于顿首部和尾部的总长度,这样可以提高帧传输效率。然而,如果不限制数据载荷的长度上限,就可能使得帧的长度太长,这会带来问题。
退避算法
共享总线以太网中的各站点采用截断二进制指数退避算法来选择退避的随机时间。
具体选择如下:
- 基本退避时间:将争用期 2 τ 2\tau 2τ作为基本退避时间,即512比特时间,对于10Mb/s的共享总线以太网就是51.2us。
- 随机数r的选择:随机数r是从离散的整数集合 { 0 , 1 , 2 , . . . , ( 2 k − 1 ) } \{ 0,1,2,...,(2^k-1)\} {0,1,2,...,(2k−1)}中随机选取一个数。其中k从重传次数和10中取小者。
- 得到退避时间:将基本退避时间 2 τ 2\tau 2τ乘以随机数r即可得到退避时间。
注:当重传达16 次仍不能成功时,就表明同时打算发送帧的站点太多,以至于连续产生碰撞,此时应放弃重传并向高层报告。
信道利用率
考虑以下这种理想情况:1)总线一旦空闲就有某个站点立即发送帧;2)各站点发送帧都不会产生碰撞;3)发送一帧占用总线的时间为 T 0 + τ T_0+\tau T0+τ,而帧本身的发送时间是 T 0 T_0 T0。
极限信道利用率 S m a x = T 0 T 0 + τ = 1 a + τ T 0 = 1 1 + a S_{max}=\frac{T_0}{T_0+\tau}=\frac{1}{a+\frac{\tau}{T_0}}=\frac{1}{1+a} Smax=T0+τT0=a+T0τ1=1+a1
参数a的值应尽量小,以提高信道利用率,共享总线以太网端到端的距离不应太长,帧的长度应尽量大。
帧的发送和接收流程
帧发送
帧接收
使用集线器的共享式以太网
早期的传统以太网是使用粗同轴电缆的共享总线以太网,后来发展到使用价格相对便宜的细同轴电缆。
当初认为这种连接方法既简单又可靠,因为在那个时代普遍认为有源器件不可靠,而无源的电缆线才是最可靠的。
若总线上的某个机械连接点接触不良或断开,则整个网络通信就不稳定或彻底断网。
在使用细同轴电缆的共享总线以太网之后,以太网发展出来了一种使用大规模集成电路来替代总线、并且可靠性非常高的设备,叫作集线器(Hub)。
站点连接到集线器的传输媒体也转而使用更便宜、更灵活的双绞线电缆。
集线器的主要特点:
- 使用集线器的以太网虽然物理拓扑是星型的,但在逻辑上仍然是一个总线网,使用的还是CSMA/CD协议。
- 集线器只工作在物理层,它的每个接口仅简单地转发比特,并不进行碰撞检测。碰撞检测的任务由各站点中的网卡负责。
- 集线器一般都有少量的容错能力和网络管理功能。
IEEE于1990 年制定了10BASE T 星型以太网的标准802.3i,10BASE-T 以太网的通信距离较短,每个站点到集线器的距离不能超过100m。IEEE 802.3以太网还可使用光纤作为传输媒体,相应的标准为10BASE-F,“F”表示光纤。
在物理层扩展以太网
扩展站点与集线器之间的距离
IEEE 802.3标准规定,两个网段可用一个转发器连接起来,任意两个站点之间最多可以经过三个网段。
在10BASE-T星型以太网中,可使用光纤和一对光纤调制解调器来扩展站点与集线器之间的距离。
扩展共享式以太网的覆盖范围和站点数量
采用多个集线器连接而成的多级星型以太网,在扩展了网络覆盖范围和站点数量的同时,也带来了一些负面因素。
注:在物理层扩展的共享式以太网仍然是一个碰撞域,不能连接太多的站点,否则可能会出现大量的碰撞,导致平均吞吐量太低。
在数据链路层扩展以太网
使用网桥在数据链路层扩展以太网
网桥(bridge)工作在数据链路层(包含其他的物理层),网桥具有属于数链路层范畴的相关能力。
- 网桥可以识别帧结构
- 网桥可以根据帧首部的目的MAC地址和自身的转发表来转发或者丢弃帧
网桥的主要结构和基本工作原理
网桥一般具有两个接口,用于连接两个不同的以太网,这样就可形成一个覆盖范围更大、站点数量更多的以太网,而原来的每个以太网就称为网段(Segment)。接口1和接口2分别连接了一个网段。
网桥转发或丢弃帧情况:
- 网桥从接口1收到主机B给主机D发送的帧,则在转发表中查找主机D的目的MAC地址D,应从接口2转发该帧,于是就把该帧从接口2转发给另一个网段。
- 若网桥从接口1收到主机C发给主机A的帧,应从接口1转发该帧给主机A,然而网桥正是从接口1收到该帧的,这表明主机A能够直接收到帧,网桥会丢弃该帧。
- 当网桥收到一个广播帧时(目的MAC地址为FF-FF-FF-FF-FF-FF),不查找转发表,通过除接收该帧的接口的其他接口转发该广播帧。
注:网桥的接口在向其连接的网段转发帧时,会执行相应的媒体接入控制协议,对于共享式以太网就是CSMA/CD协议。
透明网桥的自学习和转发帧的流程
网桥收到帧后进行登记(即自学习),登记的内容为帧的源MAC 地址和进入网桥的接口号。
网桥根据帧的目的MAC 地址和网桥的转发表对帧进行转发,包含以下三种情况:
- 明确转发:网桥知道应当从哪个接口转发帧。
- 盲目转发:网桥不知道应当从哪个接口转发帧,只能将其通过除进入网桥的接口外的其他所有接口转发。
- 丢弃:网桥知道不应该转发该帧,将其丢弃。
如果网桥收到有误码的帧则直接丢弃。
如果网桥收到一个无误码的广播帧,不查表,直接从除接收该广播帧的接口的其他接口转发该广播帧。
转发表中的每条记录都有其有效时间,到期自动删除。
透明网桥的生成树协议STP
为了提高以太网的可靠性,有时需要在两个以太网之间使用多个透明网桥来提供余链路。此时,以太网中将出现环路。
某个主机发送了一个广播帧,则该帧就会在网桥B1和B2构成的环路中永久兜圈。
另外,如果某个主机发送了一个单播帧,而网桥B1和B2的转发表中都没有该单播帧目的MAC地址均的相关记录,则该单播帧也会环路中永久兜圈。
为了避免帧在网络中永久兜圈,透明网桥使用生成树协议(STP),可以在增加余链路来提高网络可靠性的同时,又避免环路带来的各种问题。
不论网桥之间连接成了怎样复杂的带环拓扑,网桥之间通过交互STP相关数据包(即网桥协议数据单元,BPDU),都能找出原网络拓扑的一个连通子集(即生成树),在这个子集里整个连通的网络中不存在环路。
一旦找出了生成树,相关网桥就会关闭自己的相关接口,这些接口不再接收和转发帧,以确保不存在环路。
当首次连接网桥或网络拓扑发生变化时(有可能是人为改变或出现故障),网桥都会重新构造生成树,以确保网络的连通。
交换式以太网
交换式集线器(Switching Hub),实质上是具有多个接口的网桥。交换式集线器常称为以太网交换机(Switch)或二层交换机。“二层”是指以太网交换机工作在数据链路层。仅使用交换机(而不使用集线器)的以太网就是交换式以太网。
以太网交换机
以太网交换机的每个接口可以直接连接计算机,也可以连接集线器或其他交换机。
- 与计算机或交换机连接时,可以工作在全双工方式,不需要使用CSMA/CD协议。
- 与共享媒体的集线器连接时,只能使用CSMA/CD协议并只能工作在半双工方式下。
交换机本质上就是一个多接口的网桥,内部的转发表也是通过自学习算法逐步建立起来的。
一般的交换机都采用“存储转发”方式。
某些交换机采用了直通(Cut-Through)交换方式,在接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,然后通过其内部基于硬件的交叉矩阵进行转发,而不必把整个帧先缓存后再进行处理。
直通交换的优点是交换时延非常小;但直通交换也有其缺点,不检查差错就直接将帧转发出去,因此有可能会将一些无效帧转发给其他主机。
共享式以太网和交换时以太网的对比
注:集线器扩大了广播域也扩大了碰撞域。交换机扩大了广播域而隔离了碰撞域。
以太网MAC帧格式
以太网V2的MAC帧格式
目的地址和源地址字段分别为6字节长,用来填入帧的目的MAC地址和源MAC地址。
类型字段为2字节长,其值用来指明数据字段中的内容是由上一层的哪个协议封装的。
数据字段的长度范围是46~1500字节,用来装载上层协议所封装的协议数据单元(PDU)。
FCS字段的长度为4字节,它的内容是使用CRC生成的帧检验序列。
物理层前导码
无效的MAC帧格式
- MAC帧的长度不是整数个字节
- 通过MAC顿的FCS字段的值检测出顿有误码
- MAC帧的长度不在64~1518字节之间
接收方收到无效的MAC帧时,就将其丢弃,以太网的数据链路层没有重传机制。
虚拟局域网
交换式以太网中的所有站点都属于同一个广播域。随着交换式以太网规模的扩大,广播域也相应扩大。巨大的广播域会带来广播风暴和潜在的安全问题,并且难以管理和维护。
使用虚拟局域网技术,网络管理员可将巨大的广播域分隔成若干个较小的广播域。
虚拟局域网概述
VLAN 概述虚拟局域网(Virtual Local Area Network)是一种将局域网内的站点划分成与物理位置无关的逻辑组的技术,一个逻辑组就是一个VLAN,VLAN中的各站点具有某些共同的应用需求。
属于同一VLAN 的站点之间可以直接进行通信,而不同VLAN 中的站点之间不能直接通信。
连接在同一交换机的多个站点可以属于不同的VLAN,而属于同一个VLAN的多个站点可以连接在不同的交换机上。
注:虚拟局域网不是一种新型网络,只是局域网提供的一种服务。
虚拟局域网的实现机制
虚拟局域网VLAN有多种实现技术,最常见的就是基于以太网交换机的接口来实现VLAN 。这就需要以太网交换机能够实现以下两个功能:
- 能够处理带有VLAN 标记的帧,也就是IEEE 802.1Q 帧。
- 交换机的各接口可以支持不同的接口类型,不同接口类型的接口对帧的处理方式有所不同。
注:一般有三种划分VLAN的方法:1)基于接口;2)基于MAC地址;3)基于IP地址。
IEEE 802.1Q帧
IEEE 802.1Q帧也称为Dot One Q 帧,它对以太网V2 的MAC 帧格式进行了扩展,在源地址字段和类型字段之间插入了4 字节的VLAN 标签字段。
标签协议标识符TPID:长度为16 比特,其值固定为0x8100,表示该帧是IEEE 802.1Q帧。
优先级PRI:长度为3 比特,取值范围是0~7,值越大优先级越高。当网络阻塞时,设备优先发送优先级高的802.1Q帧。
规范格式指示符CFI:长度为1 比特,取值为0表示MAC 地址以规范格式封装,取值为1表示MAC 地址以非规范格式封装。对于以太网,CFI 的取值为0。
虚拟局域网标识符VID:长度为12比特,取值范围是0~4095,其中0和4095保留不使用。
802.1Q帧一般不由用户主机处理,而是由以太网交换机来处理:
- 当交换机收到普通的以太网MAC 帧时,会给其插入4 字节的VLAN 标签使之成为802.1Q 帧,该处理简称为“打标签”。
- 交换机转发802.1Q 帧时,可能会删除其4 字节的VLAN 标签使之成为普通的以太网MAC 帧,该处理简称为“去标签”。
- 交换机转发802.1Q 帧时也有可能不进行“去标签”处理,是否进行“去标签”处理取决于交换机的接口类型。
以太网交换机的接口类型
根据接口在接收帧和发送帧时对帧的处理方式的不同,以及接口连接对象的不同,以太网交换机的接口类型一般分为Access和Trunk两种。
当以太网交换机上电启动后,若之前未对其各接口进行过VLAN的相关设置,则各接口的接口类型默认为Access,并且各接口的缺省VLAN ID为1,即各接口默认属于VLAN1 。
Access接口
接口一般用于连接用户计算机,由于其只能属于一个VLAN,因此Access接口的PVID值与其所属VLAN的ID相同,其默认值为1。
接收处理
一般只接收”未打标签“的普通以太网MAC帧,根据接口PVID给帧“打标签”。
转发处理
若帧中VID值与接口PVID值相同,则”去标签“后转发,否则不转发。
Trunk接口
接口一般用于交换机之间的互连。Trunk接口可以属于多个VLAN,即Trunk接口可以通过属于不同VLAN 的帧。
Trunk接口的默认PVID值为1,一般不建议用户修改,若互连的Trunk接口的PVID值不相等,则可能出现转发错误。
接收处理
既可以接收“未打标签”的普通以太网MAC帧,也可以接收“已打标签”的802.1Q帧。
若接收到普通以太网MAC 帧时,根据接收帧的接口的PVID给帧“打标签”。
转发处理
对于帧的VID值等于接口的PVID值的802.1Q帧,将其“去标签”转发。
对于帧的VID值不等于接口的PVID值的802.1Q帧,将其直接转发。
从Trunk接口转发出的帧,可能是普通以太网MAC帧,也可能是802.1Q帧。
以太网发展
802.11无线局域网
802.11无线局域网的组成
随着移动通信技术的发展,无线局域网(WLAN)自20 世纪80 年代末以来逐步进入市场。IEEE于1997 年制定出了无线局域网的协议标准802.11,是目前应用最广泛的无线局域网之一,人们更多地将其简称为Wi-Fi。
注:WLAN是指无线局域网,是一种网络系统,而Wi-Fi是指无线保真,是一种无线联网技术。
802.11无线局域网可分为以下两类:
- 有固定基础设施的
- 无固定基础设施的
固定基础设施是指预先建立的、能够覆盖一定地理范围的、多个固定的通信基站。802.11无线局域网使用最多的是它的固定基础设施的组网方式。
有固定基础设施的802.11无线局域网
802.11无线局域网的有固定基础设施的组网方式,采用星型网络拓扑,位于其中心的基站被称为接入点(AP)。802.11无线局域网的最小构件称为基本服务集(BSS)。
本BSS内各站点之间的通信以及与本BSS外的站点之间的通信,都必须经过本BSS内的AP进行转发。
网络管理员需要为AP分配一个最大32字节的服务集标识符(SSID)和一个无线通信信道,SSID实际上就是使用该AP的802.11无线局域网的名字。
一个BSS所覆盖的地理范围称为基本服务区(BSA),一个BSS可以是孤立的,也可以通过一个分配系统(DS)与其他BSS连接,这样就构成了一个扩展的服务集(ESS)。
802.11标准并没有定义实现漫游的具体方法,仅定义了以下一些基本服务:
- 关联(Association)服务
移动站与接入点AP建立关联的方法有以下两种:
被动扫描
主动扫描
- 重建关联(Reassociation)服务和分离(Dissociation)服务
如果一个移动站要把与某个接入点AP 的关联转移到另一个AP,就可以使用重建关联服务;若要终止关联服务,就应使用分离服务。
无固定基础设施的802.11无线局域网
无固定基础设施的无线局域网也称为自组织网络(ad hoc Network)。
自组织网络并没有预先建立的固定基础设施(基站或AP),它是由一些对等的移动站点构成的临时网络,数据在自组织网络中被“多跳”存储转发。转发站需要具备路由功能。
802.11无线局域网的物理层
802.11无线局域网的物理层非常复杂,依据工作频段、调制方式、传输速率等,可将其分为多种物理层标准:
802.11无线网卡一般会被做成多模的,以便能适应多种不同的物理层标准。
无线局域网最初还使用红外技术(IR)和跳频扩频(FHSS)技术,但目前已经很少使用了。
802.11无线局域网的数据链路层
CSMA/CA协议
使用CSMA/CA协议的原因
对于802.11无线局域网,其使用无线信道传输数据,这与共享总线以太网使用有线传输介质不同。因此,802.11无线局域网不能简单照搬共享总线以太网使用的CSMA/CD协议。
对于802.11无线局域网,其使用无线信道传输数据,这与共享总线以太网使用有线传输介质不同。因此,802.11无线局域网不能简单照搬共享总线以太网使用的CSMA/CD协议。
CSMA/CA协议仍然采用CSMA/CD协议中的CSMA,以“先听后说”的方式来减少碰撞的发生,但是将**“碰撞检测CD”改为了“碰撞避免CA”**。
注:尽管CA表示碰撞避免,但并不能避免所有的碰撞,而是尽量减少碰撞发生的概率。
不采用碰撞检测CD的原因
要在802.11 无线网卡上实现碰撞检测,对硬件的要求非常高。
即使能够在硬件上实现碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),还会出现无法检测到碰撞的情况,因此实现碰撞检测并没有意义。
CSMA/CA协议的工作原理
DCF接入方式
在DCF 方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权。DCF 方式是802.11定义的默认方式(必须实现)。
确认机制
由于无线信道的误码率较高,CSMA/CA协议还需要使用停止-等待的确认机制来实现可靠传输,这与使用CSMA/CD协议的共享式以太网不同。
帧间间隔
每个站点必须在持续检测到信道空闲一段指定的时间后才能发送顿,这段时间称为帧间间隔(IFS)。
低优先级的帧需要等待较长的时间,而高优先级的帧需要等待的时间较短高优先级的帧可优先获得发送权。
若低优先级的帧还没来得及发送,而其他站的高优先级的帧已发送到信道上,则信道变为忙态,低优先级的帧就推迟发送。
- 短帧间间隔(SIFS)的长度为28us ,它是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。
- DCF(分布式协调功能)帧间间隔DIFS的长度为128us ,在DCF 方式中,DIFS用来发送数据帧和管理帧。
虚拟载波监听
当某个站检测到正在信道中传送的帧首部中的“持续时间”字段时,就调整自己的网络分配向量(Network Allocation Vector)。NAV指出了完成这次帧的传送且信道转入空闲状态所需的时间。
退避算法
发送帧的站检测到信道从忙转为空闲后,都要执行退避算法.
在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据;
- 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,等待信道变为空闲,再经过帧间间隔DIFS后,继续启动退避计时器。
在进行第i次退避时,退避时间在时隙编号 { 0 , 1 , . . . , 2 2 + i − 1 } \{0,1,...,2^{2+i}-1 \} {0,1,...,22+i−1} 中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。
当时隙编号达到255 时(对应于第6 次退避)就不再增加了。
当某个站要发送数据帧时,仅在这种情况下才不使用退避算法:检测到信道空闲,并且该数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧。
除此之外的以下情况,都必须使用退避算法:
- 在发送帧之前检测到信道处于忙态
- 在每一次重传一个帧时
- 在每一次成功发送后要连续发送下一个帧时
工作原理
- 源站要发送它的第1个数据帧时,若检测到信道空闲,则在等待DIFS间隔后就可发送。
等待DIFS间隔是考虑到可能有其他的站有高优先级的帧要发送。现在假设没有其他高优先级帧要发送,因而源站就发送了自已的数据帧。
- 目的站若正确收到该帧,则经过SIFS间隔后,向源站发送确认帧(ACK)。
若源站在重传计时器设置的超时时间内没有收到ACK,就必须重传之前已发送的数据帧,直到收到ACK为止,或者经过若干次的重传失败后放弃发送。
- 其他站通过虚拟载波监听调整自己的网络分配向量(即信道
被占用时长)的情况。
在NAV这段时间内,若其他站也有帧要发送,就必须推迟发送。在NAV这段时间结束后,再经过一个DIFS间隔,然后还要退避一段随机时间后才能发送帧。
信道预约
为了进一步降低发生碰撞的概率,802.11 无线局域网允许源站对信道进行预约。
- 站在发送数据帧之前先发送一个短的控制帧,称为请求发送(RTS)。
RTS帧是短的控制帧,它包括源地址、目的地址和本次通信(包括目的站发回确认帧所需的时间)所需的持续时间。
注:源站在发送RTS帧之前,必须先检测信道。若信道空闲,则等待DIFS间隔后,就能够发送RTS帧了。
- 若目的站正确收到源站发来的RTS帧,且媒体空闲,等待SIFS间隔后就发送一个响应控制帧,称为允许发送(CTS)。
CTS帧是短的响应控制帧,它也包括本次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)。
- 源站收到CTS帧后,再等待SIFS间隔后,就可发送数据帧。
注:信道预约不是强制性规定,各站可自行决定使用或不使用。
802.11无线局域网的MAC帧
数据帧
用于在站点间传输数据。
控制帧
通常与数据帧搭配使用负责区域的清空、虚拟载波监听的维护以及信道的接入,并于收到数据帧时予以确认。ACK帧、RTS 帧以及CTS 帧等都属于控制帧。
管理帧
用于加入或退出无线网络,以及处理AP 之间连接的转移事宜。信标帧、关联请求帧以及身份认证帧等都属于管理帧。
802.11无线局域网的数据帧格式
地址字段
在802.11无线局域网的数据帧首部中包含地址1~地址4共4个地址字段。
这4个地址字段的内容和使用情况取决于帧控制字段中的“去往DS”(到分配系统)和“来自DS”(来自分配系统)这两个字段的值,最常用的是中间两行所示的情况。
To DS (去往DS):这个比特位如果设置为1,则表示该帧的目的地是DS,即无线接入点。
From DS (来自DS):这个比特位如果设置为1,则表示该帧的来源是DS,即无线接入点。
根据这两个比特位的不同组合,可以确定帧的类型和它在网络中的流动方向:
- To DS = 0, From DS = 0:两个无线客户端直接通信,不通过AP。
- To DS = 1, From DS = 0:这表示帧是从无线客户端发送到AP。
- To DS = 0, From DS = 1:这表示帧是从AP发送到无线客户端。
- To DS = 1, From DS = 1:这表示帧在AP之间传输。
注:地址1和地址2分别是无线通信中信道两端的接收地址和发送地址。当主机发往AP时,接收地址不是实际的目的地址,因此采用地址3存放实际的目的地址;当AP发往主机时,发送地址不是实际的源地址,因此采用地址3来存放实际的源地址。