本章纲要
- 数据链路层的功能
- 组帧
- 差错控制:检错编码和纠错编码
- 流量控制和可靠传输机制
- (1)流量控制
- (2)可靠传输和滑动窗口机制
- (3)停止-等待协议
- (4)后退N帧协议(GBN)
- (5)选择重传协议(SR)
- 介质访问控制
- (1)信道划分:频分多路复用;波分多路复用;码分多路复用
- (2)随机访问:ALOHA协议;CSMA/CD协议;CSMA/CA协议
- (3)轮询访问:令牌传递协议
- 局域网:以太网IEEE802.3;IEEE802.11;令牌环网
- 广域网:PPP协议;HDLC协议
- 数据链路层:网桥;局域网交换机
关键:链路层的功能;重点掌握滑动窗口机制,三种可靠传输协议,各种MAC协议,HDLC协议,PPP协议,特别是CSMA/CD协议和以太网帧格式;局域网的争用期和最小帧长;二进制指数退避算法
1. 链路层的功能
链路层是为网络层提供服务的,主要是加强物理层传输原始比特流的功能,使得物理连接变成“逻辑上”无差错的数据链路。包括:为网络层提供服务的功能,链路管理,帧定界/同步/透明传输,流量控制,差错控制。
1.1 为网络层提供服务
- 是否有连接:发送数据需要先建立连接数据链路(见面交流)
- 是否有确认:无论是否数据链路都会发送收到应答(交流)
所以,有连接(见面交流)一定是有确认(交流)的服务。
- 无确认无连接的服务:以太网。适用于实时通讯,误码率低的信道,因为我们默认对信道有信息才会使用无确认的机制。
- 有确认的无连接的服务:无线通讯。适用于误码率高的网络,因为无线的丢包是很严重的,所以需要到确认机制
- 有确认的有连接服务:需要到实时性和可靠性较高的场合。
1.2 链路管理
我们建立/维持/释放一条数据链路的过程叫做链路管理,面向于有连接的服务。还有在共享物理信道当中如何要求通信站点间分配和管理信道属于数据链路层的管理。
1.3 帧定界/同步/透明传输
- 帧定界:确定帧与帧之间的界限在哪
- 帧同步:接收方能知道接收到的一个帧在哪开始和结束
- 透明传输:一种能解决因为传输内容和帧界相同而导致的失误结束。
实际上这三者都在强调同一件事情:怎样使得帧界有效地工作
1.4 流量控制
双方(发送和接收方的工作速率和缓存的差异)怎样限制发送方的数据发送量使得发送速率不超过接收方的接受能力。
因此我们需要到一种反馈机制来使得发送方能够知道接收方能否跟得上自己。确定允许接收哪些帧,不允许接收哪些帧,怎样应答。
1.5 差错控制
信道的噪声导致的差错,我们怎样检错,怎样纠错,一般错误分为“位错”和“帧错”,位错可以利用循环冗余校验(CRC)发现位错,利用自动重传请求(ARQ)来重传。
错题:
- 隐蔽物理传输细节是物理层需要做的事情
- 控制物理介质的访问是通过MAC来实现的
- 实时性高–>无连接,信道可靠–>无确认
- 流量控制是对发送方的数据控制
- HDLC,PPP,SLIP都是链路层的协议,ICMP是网络层的协议
2. 组帧
组帧的知识是链路层功能:帧定界/同步/透明传输的详解。我们围绕着:怎样使得帧界有效工作来讨论。帧是有首部和尾部的,但是网络层的分组就只有首部了。
2.1 字符计数 / 字符填充
(淘汰)
字符计数:
这种方法相当危险,一旦计数字段出错,则后面就GG了。
字符填充:使用一些特殊字符作为帧界,如果在传输的数据里面出现和帧界一样的字符需要用转移斜杠。
2.2 比特填充 / 违规编码
(常用)
比特填充:这是对于字符填充的延申,既然我们能用字符作为帧界,那么为啥不能用比特作为帧界呢?而且使用比特更加节省冗余。因此比如,我们使用 01111110 01111110 01111110 作为帧界的时候,我们就要求传输的数据里面不允许出现连续6个1的情况(也就是最多五个1),当我们在处理发送数据的时候发现有连续五个1的时候就在后面加入一个0。因为涉及到是比特操作因此可以用硬件来实现。
违规编码:我们在物理层对信息编码的时候使用到的一些规则里面是存在一些违规(就是没用的码对)的编码的。好像在曼彻斯特编码里面使用(HL=1,LH=0)那么HH和LL就是违规编码把他们作为帧界的话就可以了
违规编码法没有使用任何的填充保证了数据传输的透明性(也就是实现了透明传输)但只适用于冗余编码环境。IEEE802 就是使用违规编码作为帧界。
例题: 已知有下面的编码:A:01000111,B
:11100011,FLAG:01111110,ESC:11100000 。我们把FLAG作为帧首和帧尾,ESC作为转义字符。
现在传输:A+B+FLASG +ESC
(字符计数法,字符填充,比特填充)
3. 差错控制
这里偏通信原理多一点,请耐心理解。
首先,我们需要知道传输中的差错由于噪声(两大类)冲击噪声和随机热噪声。冲击噪声是最大的因素,而且无法通过提高信号幅度来减少。
差错控制包括自动重传请求(ARQ),前向纠错(FEC)。ARQ是在接收端检测到错误的时候通知发送端重发,直到正确位置,在FEC方式当中接收端不但能发现差错还能确定二进制数码的错误位置,加以纠正。
差错控制可以分为:检错编码 和 纠错编码。
3.1 检错编码
模拟代码实现参考我的博客:【待填坑】
奇偶校验码:
基本的检错码,原理是我们加上检验码元之后刚好能组成奇数/偶数个1。
如 11001100编码后为 11001100【1】(最后一位添加为1,使1的个数是奇数5) 11100110编码后则为11100110【0】(1的个数已经是奇数,添0)
因此,奇偶校验码的缺陷在于:假如我们的数据里面有偶数个位错误的时候,就检测不出来了。
示例:
11001100【1】这是正确的数码
- 奇数个错误情况:11001011【1】可以知道错误,因为现在有6个1,偶数个1不合格
- 偶数个错误情况:11001111【1】不可以知道错误,因为现在有7个1,仍旧是奇数个1
循环冗余码(CRC)
可以知道一段数据是否正确(没有奇偶的缺陷)
示例:假如我们拿到了一段数据:101001
我们设置 G ( x ) = x 3 + x 2 + x 0 ( r = 3 ) G(x) = x^3 + x^2 +x^0(r=3) G(x)=x3+x2+x0(r=3)
根据 G ( x ) G(x) G(x) 推断出除数码 = 1101 1101 1101,根据 r = 3 r=3 r=3,在101001后面补上000。
因此得到: 101001000 101001000 101001000,然后进行如下运算:
我们关键要余数,商是没用的,发送出去的数据:101001【001】
在接收方我们只需要根据根据双方协定的除数就能根据余数判断出数据是否错误了。
思考一下为啥我们不需要商而是余数呢?若被除数已知,商和余数二者知道其一就能判断算术式子的正确性,正因为我们的补位因此余数的位数可以通过被除数的位数确定,但是商是不定长的,因此我们需要存储是余数而不是商哦
3.2 纠错编码
关于海明编码的具体详解看我的专题博客:【海明编码】
海明编码的发送实现
海明编码的原理和这个脑筋急转弯有着异曲同工之妙,同理,我们先思考:我们有x位校验码的情况下最多能检验多少位的正常数据呢?
一样的,最多可检验 2 x − 1 2^x-1 2x−1位数据。(但是我们不要忘记这样一个约束:假设最多仅有一位发生错误)
海明编码因为能知道错的是哪一位,所以他可以具备纠错的能力,因此我们把海明编码叫做纠错编码。
我们每一位的校验码就是针对每一个组别的位编码出来得到的结果。
所以,我们先看下怎样对我们的数据进行分组。
比如说现在有4位的数据,那么我们将采用3位( 2 3 − 1 = 7 > 4 2^3-1=7>4 23−1=7>4) 的校验码来进行海明编码。
我们怎样分组才能达到:组交区域和单独区域都有且仅有一个标号 的情况呢?
我们观察标号满足这样的
- xx1:1,3,5,7
- x1x:2,3,6,7
- 1xx:4,5,6,7
假如现在我们要对 1101
我们规定海明编码的位置如下:(方便硬件实现)
【 P 1 】 【 P 2 】 D 1 【 P 3 】 D 2 D 3 D 4 【P_1】【P_2】D_1【P_3】D_2D_3D_4 【P1】【P2】D1【P3】D2D3D4
【 P 1 】 【 P 2 】 1 【 P 3 】 101 【P_1】【P_2】1【P_3】101 【P1】【P2】1【P3】101
如果要使得: P 1 ⊕ D 1 ⊕ D 2 ⊕ D 4 = 0 P_1\oplus D_1 \oplus D_2 \oplus D_4 =0 P1⊕D1⊕D2⊕D4=0,那么 P 1 = 1 P_1 = 1 P1=1
如果要使得: P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 = 0 P_2\oplus D_1 \oplus D_3 \oplus D_4 =0 P2⊕D1⊕D3⊕D4=0,那么 P 2 = 0 P_2= 0 P2=0
如果要使得: P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 = 0 P_3\oplus D_2 \oplus D_3 \oplus D_4 =0 P3⊕D2⊕D3⊕D4=0,那么 P 3 = 0 P_3= 0 P3=0
我们发送的海明编码就是: 1010101 1010101 1010101
接收方的检验和纠错
假如对方接收到的是 1010111 1010111 1010111
先画出位置图和分组图:
- (P1)xx1:1,3,5,7
- (P2)x1x:2,3,6,7
- (P3)1xx:4,5,6,7
【 P 1 】 【 P 2 】 D 1 【 P 3 】 D 2 D 3 D 4 【P_1】【P_2】D_1【P_3】D_2D_3D_4 【P1】【P2】D1【P3】D2D3D4
针对我们得到的编码:
1010111
1010111
1010111
P
1
⊕
D
1
⊕
D
2
⊕
D
4
=
0
P_1\oplus D_1 \oplus D_2 \oplus D_4 =0
P1⊕D1⊕D2⊕D4=0,P1校验正确
P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 = 1 P_2\oplus D_1 \oplus D_3 \oplus D_4 =1 P2⊕D1⊕D3⊕D4=1,P2校验错误
P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 = 1 P_3\oplus D_2 \oplus D_3 \oplus D_4 =1 P3⊕D2⊕D3⊕D4=1,P3校验错误
看上面的分组图:P2和P3错误的话,也就是有6或者7错误了,但是P1正确,也就是7没错,那就是6错了
我们也可以利用: P 3 P 2 P 1 = 110 P_3P_2P_1 = 110 P3P2P1=110得到是第6位的错误
那就是 D 3 D_3 D3错了,所以纠错之后就是: 1010101 1010101 1010101 和发送的时候就一致了。
海明距公式
需要纠错d位,需要的海明距为2d+1的编码方案,检错d位,需要的海明距为d+1
4. 流量控制和可靠传输机制
4.1 流量控制,可靠传输,滑动窗口机制
流量控制都是接收方对发送方的流量控制,常见的有停止-等待协议和滑动窗口协议。
- 停止-等待协议:发送方没发送一帧都要等待接收方的应答信号,接收方同理,如果不应答那么一直等待下去。
- 滑动窗口流量控制的基本原理:发送方和接收方各自维护一组可以发送/接收帧的序号,在发送端每收到一个确认帧就将滑动窗口向前移动一个帧的位置。当然需要考虑这样的一种情况:那就是发送窗口里面都是已发送但未收到确认的帧的时候发送方就会停止发送
实际上停止等待也是滑动窗口的一种:
- 停止-等待:send size = 1,receive size = 1
- 后退N帧:send size >1,receive size =1
- 选择重传:send size >1,receive size >1
可靠的传输机制使用确认和超时重传来完成。确认是一种无数据的控制帧,超时重传 是开启定时器,超时就重传。
为了进行超时重发和判定重复帧的需要,发送方和接收方都设置了一个帧缓冲区,在缓存中保留数据帧的副本。
确认帧:ACK
单帧滑动窗口:停止-等待协议
多帧滑动窗口之:后退N帧协议GBN
在后退N帧协议当中我们不需要接收到上一帧的ACK才发送下一帧,在发送窗口大小的范围内发送就是了,一旦,出现ACK告诉我们在前面的哪一帧出现问题了,那么,我们的窗口将回退到那里重新开始。
出现问题可以是帧信息出错也可以是帧的失序,因为我们的发送是没有ACK的情况下发送的,也就是后来发送的帧先到达接收方的可能性是存在的。
对于后退N帧的协议来说,接收的窗口size只有1,发送的窗口的size可以大于1,这样也可以保证了接收帧的有序性。
假如我们使用n位的帧比特编号,那么我们可以表示的size最大为: 2 n − 1 2^n-1 2n−1,也就是说我们的发送窗口大于这个值将会导致接收方无法区分新帧和旧帧。(原理很简单的就是啰嗦了点)
(上面是发送方,下面是接受方)
可以从图上看出,当我们的2出错之后,超时了之后会从 2 的地方重新发过。
我们的后退N帧协议虽然提高了信道的利用率,但是不见得发送的效率很高,如果我们的信道的传输质量很差的话会导致误码率很大的时候,后退N帧协议就差过停止-等待协议了。
多帧滑动窗口之:选择重传协议SR
我们看上面的后退N帧协议,当我们发现错的时候,之前发送的一些有用的帧都要重新传过,这样是很浪费的。假如哈,我们的接收方能边接收后面的帧也能等待发送方重传指定的帧,那么这样就会变得很高效率了。
如下图:(同上,上面的是发送方,下面的接收方)
SR协议的接收窗口和发送窗口的尺寸都大于1,一次性可以发送和接收多个帧,如果采用n比特的帧比对编号,接收窗口应当小于发送窗口,另外,接收窗口的大小不应超过序号的一半,不然的话,等到超时之后发送窗口已经不再维护之前的发送帧了。
一般来说,我们最好保证发送窗口和接收窗口大小一致。
我们的接收方的缓冲区的大小应该和窗口的署目一致,而不是序号数量。
信道的效率:信道的利用率,定义信道的利用率可以从很多角度取定义的,我们给出一种从时间角度去定义的方法:发送发再一个发送周期的时间内有效发送数据所占整个发送周期的比率。
示例:发送方发送数据到收到第一个确认帧开始我们称这个发送周期作为T,发送方再这个周期内发送L (bits)的数据,发送方的数据传输速率是C,发送方用于发送有效数据的时间是L/C,那么信道的利用率就是L/(CT)。
信道的利用率最大的时候,数据帧长最小。
信道的吞吐率:信道利用率*发送方的发送速率
错题总结:
- 解决发送端永远等待的死锁现象利用的是超时机制
- 信道利用率计算题:停止等待协议,信道的数据传输速率4kb/s,单向的传播时延是30ms,如果信道的利用率最大达到80%,那么要求数据帧的长度至少为多少?
我们先看停止等待的时空图:
我们这里忽略了确认帧的时间和处理时间,所以仅计算数据帧和传播时延即可。信道的利用率最大的时候,数据帧长达到最小极限。
2
∗
30
m
s
=
0.06
s
2*30ms = 0.06s
2∗30ms=0.06s
(
0.06
s
∗
4
k
b
/
s
)
/
0.2
=
1200
b
(0.06s*4kb/s)/0.2 = 1200b
(0.06s∗4kb/s)/0.2=1200b
1200
b
∗
0.8
=
960
b
1200b*0.8=960b
1200b∗0.8=960b
所以数据帧长度至少为 960bit
- 送分题:在GBN协议当中,发送方已经发送编号0-6的帧,当计时器超时的时候,仅收到了1,3,5号帧的确认,那么需要重传的帧的数目是?
注意这个是GBN协议,收到为权威,已经收到了idx = 5的帧,也就是说前面的都确认收到了,因此只需要重传1帧即可
- 易错题:使用GBN协议,发送窗口大小是32,至少需要多少位的序号?
32+1< 2^6,也就是至少6位咯,需要注意的是win size +1
- 计算题:两台主机之间采用GBN协议,数据传输速率16kps,单向传播时延是270ms,数据帧的长度范围是128-512字节,接收方以和数据帧等长的帧进行确认,为了使得信道的利用率最大,帧序列的比特数至少为?
信道利用率最大的情况是在接收确认帧之前尽可能多发数据帧
原理参考这个图。
我们可以先计算出发送/接收一个数据帧的时间:1288/16000 = 64ms
那么我们有效的时间是:642+270*2=668ms
668ms/64 = 10.4帧
也就是我们需要到4位=16个编号(15个帧窗口)
5. 介质控制访问
什么是介质控制访问?我们现在研究到了对于信道节点上规划上了。介质访问控制子层(Medium Access Controll)MAC。
举个例子:在广播信道的通信当中,节点ABCDE共享广播信道,假设AB要通信,BD也要通信,谁先谁后呢?我们需要一些规则来限制。
-
流量控制和可靠传输研究的是:信道传输当中的时间资源的规划
-
介质控制访问研究的是:信道资源分配使用的分配规划
我们常用的介质控制访问的方法:信道划分,随机访问,轮询访问。(随机访问和轮询访问是动态分配信道的)
5.1 信道划分的介质控制访问机制
在单一的物理广播信道中通过:分时,分频,分码的方法划分出多条逻辑信道。
频分多路复用:(FDM)
就是使用不同的频率载波划分出多条逻辑信道
时分多路复用:(TDM)
TDM是固定分配时间块,STDM是动态分配时间块,只有需要发送数据的设备才会被分配到时间块,因此,假如线路的传输速率8kb/s,有4个用户,那么每个用户在TDM的方式下,每个用户的最高速率2kb/s,STDM每个用户的最高速率是8kb/s
波分多路复用:(WDM)
是对光的频分多路复用,我们用分波器对光源实现分频。
码分多路复用:(CDM)
这是一种共享空间而不是共享时间的方法。很典型的一种是码分多址技术(CDMA)。码分多路技术抗干扰,保密强,多用在无线移动通信系统当中。
5.2 随机访问的介质访问控制机制
什么叫做随机呢?这里有点像老子的无为而治的思想,与其我们制定资源规则,不如我们允许任何用户根据自己的意愿发送信息,如果发生冲突在等待一段时间再发送。
但是我们依旧需要一些规则去规定竞争的原则,所以,随机访问的协议也叫做:争用型协议。
我们在之前的信道划分技术当中,无非就是共享时间/空间,
随机访问的核心是把共享信道暂时变成点对点通信。
ALOHA协议:
纯ALOHA协议的最基础的思想是:任何人在有需要的时候发送,遇到冲突则等待再发。
ALOHA的吞吐量很低,因此产生了改良版的时隙ALOHA协议。
他的改进在于把所有用户的时间都统一起来,用时隙(时间块)来管理,只有在时隙开始的时候才允许发送一个帧。
CSMA协议:
全称:Carrier Sense Multiple Access 载波侦听多路协议
但是时隙ALOHA协议没有解决的一个问题就是,假如有一个设备在发数据的时候不可避免其他设备也发,这种冲突导致后者需要等待,等待是我们的敌人,浪费信道资源。
因此,我们加上侦听机制,我们的设备监听信道是否有人在发送,而不是发送之后产生冲突反馈回来,有人在发自己就先不发。
-
1-坚持CSMA:当侦听到信道忙时,继续侦听信道,一旦发现信道空闲,立即发送。这样一来,传播时延对于我们的性能将会影响很大,因为监听也是需要成本哦
-
非坚持CSMA:当帧听到信道忙时,则放弃侦听一段时间,再听,检测到空闲马上发送。这样一来,我们放弃的时间就是等待了,那也是在一定程度上浪费了资源。
-
概率P坚持CSMA:P-CSMA用于时分信道,利用时隙进行规范化发送数据。如果监听到信道空闲以概率p发送数据,监听到忙则放弃侦听到时隙结束。这样做的意义在哪呢?因为我们保证了在时隙内你发送肯定会有冲突的,所以,这段时间你侦听干嘛呢对吧,就索性不听了,这样一来折中了坚持和非坚持的方案。
CSMA的改进:CSMA/CD
碰撞检测(with Collision Detection)
我们之前一直都是把发送和侦听分开来,我们可否一边发送一边侦听呢?
可以归结为一句话:先听后发,边听边发,冲突停发,随机重发
我们来描述一下整个的CSMA的工作过程:
- 适配器从网络层获得了一个网络层的数据报,他就准备了一个以太网的帧,并把这个以太网的帧放到适配器的缓冲区当中
- 适配器侦听到信道空闲,他开始传输这个帧,当他侦听到信道繁忙的时候就继续侦听,一旦空闲马山传输
- 在传输中,假如发现其他的适配器的信号能量则马上停止他的传输,并用一个48bit的拥塞信号来传输代替。
- 中止之后采用二进制指数退避算法来等待上一段时间,重复上一步的事情
像上面的过程,只有当B检测到碰撞之后他才会停止传输,A也是。为了能保证发送数据的同时能检测可能同时检测存在冲突,所有的数据帧都必须要大于一个最小帧长,如果任何的适配器接收到的帧数据小于最小从帧长的都马上丢弃掉。
最 小 帧 长 = 总 线 传 播 时 延 ∗ 数 据 传 播 速 率 ∗ 2 最小帧长 = 总线传播时延 * 数据传播速率*2 最小帧长=总线传播时延∗数据传播速率∗2
以太网规定51.2 μ \mu μs作为争用期的长度。也就是说,在带宽10Mb/s的以太网,争用期能发送512bit,就是64B,如果前64B没有任何乙方检测到冲突的话,那么后续的数据都不会发生冲突,发生冲突一定是在前64B,由于在前64B发送的时候也就检测到冲突而 停止发送,所以他发送出去的数据一定是小于64B的。因此,以太网规定的最小帧长是64B,小于64B就是无效帧。
那如果我们需要发送小于64B的帧?那就填充字段了。
一方面我们因为检测到冲突而停止了数据的传输,另外我们也要考虑到我们什么时候开始恢复传输。我们使用二进制指数退避算法。
二进制指数退避算法
- 确定下基本退避时间,一般是(2*争用期)
- 确定k值(第几次重传),限制范围:[重传次数,10],每一次重传之后,k++
- 一组离散的数据: { 0 , 1 , 2 , 3 , 4 , 5.... ( 2 k − 1 ) } \{0,1,2,3,4,5....(2^{k}-1)\} {0,1,2,3,4,5....(2k−1)}
- 从离散的数据当中随机选择一个数r,那么等待的时间 = r*争用期
- 当重传16次不能成功的时候就说明网络太TM拥塞了,认为这个帧永远发不出去了,然后向上一层(网络层)报告错误
示例:现在一个适配器第一次尝试重传,但是呢他遇到了碰撞,第一次重传时,k=1,随机数从{0,1}当中选,因此他可能会:0*争用期或者1*争用期后进行重传;第二次重传的时候,随机数从{0,1,2}中选,如此类推,直到16次之后,认为不可能发出,Over。
使用二进制指数退避法的好处是可以使得需要重传等待的平均时间随着重传次数增大而增大,属于动态退避,减少碰撞的概率。
CD的改进版:CSMA/CA
CSMA/CD协议用于有线的局域网,在无线局域网环境当中我们不能直接搬用CD协议的碰撞检测,为啥呢?
接收信号的强度会小于发送信号的强度,而且无线信号的强度会变化很广,我们在CD进行碰撞检测的原理是使用对信号强度的分辨,因此如果要进行碰撞检测的话,我们需要在硬件上成本很大。
还有就是,在无线通信当中,并非所有的站点都能听到局域网内其他的节点(除非他有控制路由器的权限)。
因此,CA协议就是针对无线局域网而设置的,CA的意思是碰撞避免,我们在原则上尽量避免碰撞。
当信道变成空闲的时候,我们任何一个站点不能立即发送数据,要进入争用窗口,计算随机退避时间之后再发送,当且仅当数据帧是第一帧的时候才不使用退避。
和CD的区别在于:
- CA不能避免碰撞。
- CA用于无线,CD用于有线
- CD用检测电压变化,CA用能量载波检测
- 发送节点无冲突不意味着接收节点无冲突
CA的核心思想在于,发送数据之前会广播告诉其他节点,但是不能避免其他节点百分百听到这个广播,而CD的核心在于,除了发送前侦听外,边发送的时候也侦听,一旦出现碰撞就停止发送。
5.3 轮询访问的介质访问控制机制
这种叫做令牌传递协议,适用于负载很高的网络情景,什么叫做负载很高呢?就是当如果我们用随机访问机制的时候冲突的概率变的很大的时候就叫负载很大。
令牌传递:轮流获得令牌,只有有令牌的人才能发信息。
6. 局域网
局域网(LAN)
我们关注他的:拓扑结构,传输介质,介质访问的控制方式。
常见的局域网拓扑分为:(1)星状(2)环形(3)总线(4)星型和总线型复合
传输介质的话用双绞线,光纤和铜缆等,主流用双绞线。
介质控制用CSMA/CD(有线),令牌。
局域网的分类:以太网和令牌环。
- 以太网:是当前使用范围最广的局域网。逻辑:总线,物理:星型
- 令牌环:IEEE802.5,逻辑:环形,物理:星型
- FDDI:光纤分布数字接口,IEEE802.8,逻辑:环形,物理:双环
IEEE802标准定义了链路层和物理层,他把链路层拆分为两层:LLC逻辑链路控制层 和 MAC接入控制层。
MAC管理的是:组帧拆帧,差错检测,透明传输
LLC管理的是向网络层提供服务:有/无确认,连接与否,高速传输等
由于以太网的垄断,导致LLC的标准作用不大,因此网卡都是只有MAC协议而没有LLC协议的。
6.1 以太网
以太网使用的协议是DIX Ethernet V2标准,和IEEE 802.3 和像。
- 以太网无连接,不要求确认方确认,进最大努力交付,提供不可靠服务
- 以太网的差错纠正由高层完成
逻辑结构是总线型但是物理结构是星型的,星型的中心是hub集线器。
10BASE5介质(熟记的常识):10BASE5传输介质使用同轴电缆,曼彻斯特编码,最大段长500m,最多100个节点。
适配器:通俗来说就是网卡,全世界每一块网卡出厂的时候都有一个唯一的代码,就叫做MAC地址,网卡工作物理层和链路层,他只关心比特。
MAC帧:根据DX v2标准,格式如下:
MAC帧不需要帧结束符(不代表没有帧尾,他是有帧尾的,帧尾是帧校验序列FCS用于CRC校验),链路层上的帧还是需要首部和尾部的,因为以太网在传输的时候每一个帧都有一定间隙。
- MAC地址:6B
- 类型:2B,协议的类型
- 数据:46-1500B,高层的协议信息
- 填充:0-46B,如果帧长太短的时候(总长小于64B),填充
- 校验码FCS:4B,用于CRC校验,这是帧尾。
由于我们之前说的以太网使用的是CSMA/CD协议,所以不支持全双工方式。
但是100BASET以太网使用全双工方式,因此不使用CSMA/CD协议。
- 高速以太网:速度超过100Mb/s的以太网
- Gbit以太网:千兆以太网,允许在1Gb/s下使用全双工和双半工两种方式工作,使用802.3协议规定的帧格式,半双工方式使用CSMA/CD协议。
- 10Gbit以太网:光纤,只工作在全双工方式,不使用CSMA/CD协议。
以太网是可拓展的,灵活 的。
6.2 IEEE 802.11
这是无线局域网的一系列的协议标准,指定了MAC层的协议,运行在物理层的标准上,MAC层使用的CSMA/CA标准,在无线局域网内即便发生冲突了也会把整个帧发送完毕,但是在有线的局域网内发生了冲突就会停止发送数据。
无线局域网分为:固定设施和非固定设施。
- 固定设施:基础服务集(BBS),我们通过AP接入到主干,当然,我们可以使用EES拓展到外围,所以EES集也叫门桥(作用和网桥类似)。
- 无固定设施:各点平等,一旦发现隔壁有其他可移动设备就会要求和其他的移动设备进行通信,每一个节点都有路由器功能。
6.3 令牌环网
每一个设备通过电缆和环接口干线藕接器(TCU)。TCU有两个状态:收听状态和发送状态。站点发送完数据就会产生一个新的令牌(Token)传递到下一个的节点,在物理上使用的是星型的拓扑结构,逻辑上是环形的结构,使用IEEE802.5 协议。
7. 广域网
我们研究局域网是在研究一个小区域内的网络,但是实际上我们可以理解,广域网就是由多个局域网组建出来的网络。
我们局域网使用的协议主要是在链路层,而广域网使用的协议在网络层,这个也是我们接下来研究网络层的原因,我们的研究的重心已经发生了非常大的变化。
这里怎么理解?就是我们在数据包装控制信息的时候,我们如果包装的是给链路层的控制信息的话那么我们期望的是链路层来实现检错纠错功能,如果我们包装的是网络层的信息的话,那么我们期望的是网络层来进行这样的工作。
在广域网中,我们更加关注这样一件事情:怎样进行路由选择和分组转发。
广域网的PPP协议和HDLC协议是我们需要关注的。
7.1 PPP协议:点对点协议
使用串行线路通信的面向字节的协议,用于连接两个节点的链路上。是一种解决连接各种主机,网桥,路由的简单共同解决方案。
PPP是在SLIP协议上发展出来的,SLIP完成数据报的传送,没有寻址和数据校验,数据压缩等功能,只能简单的传输IP数据报。
PPP协议包括:
- LCP链路控制协议:配置建立数据链路
- NCP网络控制协议:为网络层建立逻辑连接,每一个不同的网络层的协议要新建一个NCP来管理。
- IP数据报的封装:把网络层的IP数据报封装到串行链路上。
如图是PPP帧:(前面和HDLC帧格式一样)
PPP协议针对的是点对点的网络不是总线型的网络,因此无需使用CSMA/CD协议,没有最短帧的概念,信息段可以:0-1500B。
PPP 协议
- 不提供纠错,但可以检测错误,不可靠,不使用确认和序号机制
- 仅支持点对点,不支持多点线路,
- 仅支持全双工链路。
- 通信双方可以使用不同的网络层协议
- 面向字节B的
- 只保证无差错接收,换句话说就是CRC不出错就是了。
全双工和不使用确认不矛盾哈,双工的意思是发送的同时可以接收的意思。
7.2 HDLC协议:高级链路控制协议
HDLC是面向比特的,和PPP协议不同的哦,全双工通信,帧编号,可靠。
HDLC帧的格式:
8. 数据链路层的设备
8.1 网桥
多个以太网连接起来可以组成一个更大的以太网,原来的以太网成为一个网段。网桥工作在MAC子层,网桥和物理层的转发器的性质不同,那个就相当于一个信号放大器,网桥还带有隔离功能使得各个网段成为隔离的碰撞域。
一个网桥只有一个入口端口和一个出口端口
- 网桥处理的是帧,所以网桥是链路层的设备
- 中继器和放大器处理的是信号,所以是物理层的设备
网桥接收到一个帧之后,就会检查数据帧中的地址,如果是另外一个网段的地址的话就会转发到另外一个网段。
网桥具有寻址和路径选择能力,网桥对于接收到的帧不做任何修改(或者做很少的修改),网桥连接的两个网段可以使用不同的协议。
- 过滤通信量
- 扩大物理范围
- 可以使用不同的物理层
- 缺点:增加时延,MAC层没有流量控制,因为流量控制在LLC层,只有LLC层才有帧编号机制
- 网桥仅仅适用于通信量不大的局域网,如果通信量过大会导致广播风暴
网桥的分类
(1)透明网桥:选择不一定是最佳的路由,他使用自学习的算法来处理,也就是说一开始的时候转发表是空的,当我们收到一个从网桥某个端口进入的帧的时候,我们就可以推测,从该帧的目的地址反方向一定能从这个端口转发回去。通过这种方式来建立转发表
(2)源路由网桥:选择一定是最佳的网桥,路由的选择由发送数据的帧的里面的源地址负责。我们需要先寻找最佳路由,先用广播的形式发送一个“探测帧”,然后探测帧经过的路由会应答,然后我们得出最佳的路径。如果发送帧的数量很多的话,网络就会拥塞。
最佳路由的意思是:发送帧往返时间最少的路径,不一定是经过路由数量最少的路径。
8.2 交换机
交换机本质上就是一个多端口的网桥,使用交换机可以组建VLAN,虚拟局域网。
他检测到从端口接收到的数据帧的源地址和目的地址的MAC地址之后,然后利用系统内部的动态查找表比较,若果发现目的的MAC地址不在表里就会把这个MAC地址加入到查找表中,并把数据帧发送到相应的端口上。
- 交换机的端口全双工方式
- 内部帧的转发和透明网桥类似
- 交换机独占带宽
最后一点怎样理解呢?比如说现在有一个10Mb/s的以太网,每个用户占有的平均带宽是(10/N)Mb/s,现在假设有N个用户。假如我们使用了交换机,每个端口到主机的带宽是10Mb/s,每个用户通信都是利用交换机来进行通信,所以,可以独占带宽,对于N对端口的交换机而言,总容量的带宽是N*10Mb/s
交换机的交换模式
- 直通式:只检查帧目的地址
- 储存转发型:缓存并且检查数据是否争取,但是延迟很大
链路层的设备都有共同的特点:都能隔离冲突域,不能隔离广播域
一个广播域你可以想象一下家里的路由器的组网,冲突域就是从路由器你引出一个端口出来然后接上交换机就能再延展很多个端口。