第三章 数据链路层(Data Link Layer)
3.1 数据链路层概述
链路:一个节点到相邻结点的一段物理线路;数据链路是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。数据链路层以帧为单位传输和处理数据
数据链路层的三个问题:封装成帧、差错检测、可靠传输
封装成帧:发送方将待发送的数据,通过应用层封装成为应用层协议数据单元,然后交付给运输层处理;运输层为其添加一个运输层协议首部,使其成为运输层协议数据单元,交给网络层进行处理。网络层为其添加网络层协议首部,使其成为网络层协议数据单元并交付给数据链路层处理。数据链路层给其添加一个数据链路层协议首部(帧头)和一个尾部(帧尾),使其成为帧,此操作称为封装成帧,并将帧交付给物理层。物理层将帧看做是比特流,还会给比特流前面添加前导码(让目的主机做好接受帧的准备)。
差错检测:帧在传输过程中遭遇干扰后,可能会出现误码。发送方在发送帧之前,基于待发送的数据和检错算法,计算出检错码,并将其封装在帧尾。
可靠传输:接收主机在检测到错误帧后,是不会接收该帧的,将其丢弃。如果数据链路层向其上层提供的是不可靠服务,那么就直接丢弃。若是可靠传输服务,还需要其他措施来确保接收方主机重新收到被丢弃的这个帧的正确副本。简而言之,若能实现发送方发送什么,接收方就能接收到什么,就称为可靠传输服务。
3.2 封装成帧
所谓封装成帧,就是指数据链路层给上层交付的协议数据单元添加帧头和帧尾,使其帧尾帧。帧头和帧尾包含有重要的控制信息。帧头和帧尾的作用之一就是帧定界。
3.2.1 透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。当所传数据中的比特组合恰巧与某一个控制信息完全一样,就必须采取适当的措施,使接收方不会将这样的数据认为是某种控制信息。
- 面向字节的物理链路使用字节填充的方法实现透明传输
- 面向比特的物理链路 使用比特填充(每五个连续1后插入0)的方法实现透明传输
为了提高帧的传输效率,应当使帧的数据部分长度尽可能大些。考虑到差错控制等多种因素,每一种数据链路协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)
3.3 差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会出现差错,称为比特差错。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)
使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
3.3.1 奇偶校验
在带发送的数据后面添加一位奇偶校验位,使整个数据中的“1”为奇数(“奇校验”)或偶数(“偶校验”)。
由于此方法漏检率较高,一般不采用此方法。
3.3.2 循环冗余码CRC(Cyclic Redundancy Check)
收发双发约定好一个生成多项式
G
(
x
)
G(x)
G(x),发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;接收方通过生成多项式来计算收到的数据是否产生了误码;
常用的生成多项式
C
R
C
?
16
=
x
16
+
x
15
+
x
2
+
1
CRC-16 = x^{16}+x^{15}+x^{2}+1
CRC?16=x16+x15+x2+1
C
R
C
?
C
C
I
T
T
=
x
16
+
x
12
+
x
5
+
1
CRC-CCITT= x^{16}+x^{12}+x^{5}+1
CRC?CCITT=x16+x12+x5+1
C
R
C
?
32
=
x
32
+
x
26
+
x
23
+
x
22
+
x
16
+
x
12
+
x
11
+
x
10
+
x
8
+
x
7
+
x
5
+
x
4
+
x
2
+
x
+
1
CRC-32 = x^{32}+ x^{26}+ x^{23}+ x^{22}+x^{16}+x^{12}+x^{11}+ x^{10}+ x^{8}+ x^{7}+ x^{5}+ x^{4}+ x^{2}+ x+1
CRC?32=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
如CRC-16生成的比特串为1 1000 0000 0000 0101
举例:
3.4 可靠传输
使用差错检测技术,接收方的数据链路层就可检测出帧在传输过程中是否产生了误码。
- 不可靠传输服务:丢弃有误码的帧
- 可靠传输:想法实现发送端发送什么,接收端就收到什么。
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。
无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
比特差错只是传输差错中的一种,在整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。
可靠传输服务并不仅局限于数据链路层,其他各层均可实现可靠传输。
3.4.1 可靠传输的实现机制—停止-等待协议SW(Stop-and - Wait)
停止等待协议的特点
- 简单
- 信道利用率低。大部分时间数据都在路上,发送方很长时间闲置,资源浪费
像停止等待协议这种通过确认和重传机制实现的可靠传输协议,常称为自动请求重传协议ARQ.意思是重传的请求是自动进行的,不需要接收方显示地请求发送方重传某个出错的分组。
3.4.2 可靠传输的实现机制—回退N帧协议GBN(Go-Back-N)
若发送方在收到接收方的确认分组之前,可以连续发送多个数据分组,则可大大提高信道利用率。
累计确认:就是收到一个确认帧,那么它和它之前的所有帧都默认已收到,反之,如果某个确认帧没收到,那么它和它之后的所有帧都默认丢失(即使收到了也丢掉),进行重传
回退N帧协议是在流水线传输的基础上,利用发送窗口来限制可连续发送数据的分组个数。
基本概念:
- 采用n个比特给分组编序号,即序号为 0 ~ $ (2^{n}-1)$
- 发送窗口的尺寸
W
r
W{r}
Wr的取值:
1
<
W
r
≤
2
n
?
1
1 < W_{r}\leq 2^n-1
1<Wr?≤2n?1
- 接收窗口的尺寸
W
R
W_R
WR?的取值:
W
R
=
1
W_R=1
WR?=1
本例取
W
r
=
4
W{r}=4
Wr=4
注:接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后,对按序到达的最后一个数据分组发送确认。ACKn表示序号n及以前的所有数据分组都已正确接收。
3.4.3 可靠传输的实现机制—选择重传协议(SR,Selective Request)
为了解决GBN的缺点,我们打算尝试只重传错误的帧,这样的话就不用浪费资源吧已经收到的帧再重传一次了。和GBN相比,两者都有窗口了,和GBN的区别其实就是做了一个数据缓存,已经收到的帧不用扔了,等待之前因意外丢失的帧收到的时候确认即可,但是只能缓存窗口尺寸内的包含的帧SR运行过程 注释:2帧丢失之后仍然在发送,但是2帧丢失之后只是缓存,并没有移动窗口,直至最后2帧收到后一次性确认2-5帧。
相当于发送窗口停在错误帧的地方,超时或者NAK后重传,获取到ACK当前帧后,发送窗口再继续向后滑移,接收窗口也继续向后滑移。
3.5 点对点协议PPP
点对点协议PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。
PPP协议为在点对点链路传输各种协议数据报提供了一个标准的方法,主要由以下三部分组成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP 用于建立、配置以及测试数据链路的连接
- 一套网络控制协议NCPs 其中的每一个协议支持不同的网络层协议
3.5.1 PPP协议的帧格式
3.5.2 透明传输问题
透明传输问题:面向字节的异步链路,采用插入转义字符的字节填充法
发送方的处理:
- 出现的每一个7E(PPP帧定界符)字节,转变成2字节序列(7D,5E)
- 出现的每一个7D(转义字符)字节,转变成2字节序列(7D,5D)
- 出现的每一个ASCII码控制字符(数值小于0x20的字符),则在该字符前面插入一个7D字节,同时将该字符的编码加上0x20.
接收方的处理,进行反变换即可恢复出原来的帧的数据部分。
透明传输问题:面向比特的同步链路,采用插入比特0的比特填充法[
发送方的处理:每连续5个比特1后添加一个0.
3.5.3 差错检测
接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之丢弃。使用PPP的数据链路层向上不提供可靠传输服务。
3.5.4 工作状态
3.6 媒体介入控制
3.6.1 基本概念
对多台主机连接在一根同轴电缆上的情况,共享同一个传输媒体,形成了一个总线型的局域网。各主机竞争使用总线。共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)
媒体接入控制
静态划分通道
频分多址
时分多址
码分多址
动态划分通道
受控接入
随机接入
集中控制
分散控制
静态划分信道:预先固定号分配信道,这种方法非常不灵活,对于突发性数据传输,信道利用率很低。通常在无线网络的物理层中使用,而不是在数据链路层中使用。
集中控制:有一个主站以循环方式轮流询问每个站点有无数据发送,只有被轮询到的站点才能发送数据,最大缺点是存在单点故障问题.
分散控制令牌协议:各站点是平等的,并连接成一个环形的网络。令牌(一个特殊的控制帧)沿环逐站传递,接收到临牌的站点才有权发送数据,并在发送完数据后,将令牌传递给下一个站点.
受控接入网络由于市场竞争,已逐步退出了历史舞台.
随机接入站点:所有站点通过竞争,随机地在信道上发送数据,如果恰巧有两个或两个以上的站点在同一时刻发送数据,则信号在共享媒体上就要产生碰撞,使得这些站点的发送都失败。因此,这类协议要解决的关键问题是如何尽量避免冲突及在冲突发生后尽快恢复通信,著名的以太网采用的就是随机接入.
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线哦通道的广播天性,无线局域网任然使用的是共享媒体技术。
3.6.2 静态划分信道
虽然使用一条共享信道,但是通过多路复用技术组合进行传输,提高了信道的利用率。
复用(Multiplexing)是通信技术中的一个重要概念,通过一条物理线路同时传输多路用户的信号。当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术,在一条物理线路上建立多条通信信道来充分利用传输媒体的宽带。
常见的信道复用技术有:频分复用FDM、时分复用TDM、波分复用WDM、码分复用CDM
3.6.2.1 频分复用FDM
3.6.2.2 时分复用TDM
3.6.2.3 波分复用WDM
3.6.2.4 码分复用CDM
码分复用CDM是另一种共享信道的方法。主要用于多址接入,故常称为码分多址CDMA(Code Division Multiple Access).
频分多址FDMA(Frequency Division Multiple Access )和时分多址TDMA(Time Division Multiple Access)
CDM的每一个用户可以在同样的时间使用相同的频带进行通信。由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。
3.6.2 随机接入控制 - CSMA/CD协议
总线型域网使用的协议:CSMA/CD
解决数据传输过程中的碰撞问题,是一直在思考的问题。采用 载波监听多址接入/碰撞检测CSMA/CD(Carrier Sense Multiple Access/Collision Detection) 协议来解决该问题。
多址接入MA:多点接入,表示许多计算机以多见的介入的方式连接在一根总线上。
载波监听CS:内每一个站在发送帧之前要先检测以下总线上是否有其他站点在发送“帧”(“先听后说”):若检测到总线空闲96比特时间(发送96比特所消耗的时间),则发送这个帧;若检测到总线忙,则继续检测并等待总线转为空闲96比特时间,然后发送这个帧。
碰撞检测CD:每一个正在发送的帧的站,边发送边检测碰撞(“边说边听”):一旦发现总线上出现碰撞,则立即停止发送,退避一段随机时间后再次发送(“一旦冲突,立即停说,等待时机,重新再说”)
以太网还采取一种叫强化碰撞的措施。即若检测到碰撞,除了停止传输帧以外,还要继续发送32/48比特的人为干扰信号,以便有足够多的碰撞信号,使所有站点都能检测出碰撞,
3.6.2.1 争用期(碰撞窗口)
主机最多经过
2
τ
,
即
δ
→
0
2\tau,即\delta\rightarrow0
2τ,即δ→0的时长,就可以检测到本次发送是否遭受了碰撞。因此,以太网的端到端往返传播时延
2
τ
2\tau
2τ称为争用期或碰撞窗口。经过争用期这个时间端还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
? 每个主机都在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的,它取决于另一发送帧的主机机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间。
? 显然,在以太网中,发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,总线也不能太长。
3.6.2.2 CSMA/CD 最小/最大帧长
为了避免在碰撞信号还未回传回来时,信息就已经全部发送到总线上了,故规定了最小帧长的概念。通过规定最小帧长,确保了主机可以在帧发送完成之间就检测到该帧的发送过程是否遭遇了碰撞。
同时,为了避免某一主机长时间占用总线,故规定了帧的最大长度。
以太网规定最小帧长为64字节,即512比特(512比特时间为争用期)
- 若发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节。
3.6.2.3 CSMA/CD协议-截断二进制指数退避算法
3.6.2.4 CSMA/CD协议-信道利用率
3.6.2.4 CSMA/CD协议- 帧发送流程
3.6.2.4 CSMA/CD协议-帧接收流程
3.6.3 随机接入控制 - CSMA/CA协议
无线局域网使用的协议:CSMA/CA。
载波监听多址接入/碰撞避免 CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)
在无线局域网中,仍可使用载波监听多址接入CSMA,即在发送帧之前,先对传输媒体进行载波监听,若发现就其他站在发送帧,就推迟发送,避免碰撞。
在无线局域网中,不能使用碰撞检测CD,原因如下:
- 无线信道的传输条件特殊,信号强度的动态范围非常大,无线网卡上接收到的信号强度远远小于发送信号强度。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高
- 即使能够在硬件上实现无线局域网的碰撞检查功能,但由于无线电波传播的特殊性(隐蔽站问题),进行碰撞检测的意义也不大(A-B-C,A可检测到B,但A检测不到C)
3.6.3.1 CSMA/CA协议 - 帧间间隔IFS(InterFrame Space)
802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这一段事件成为帧间间隔IFS。
帧间间隔的长短取决于该站要发送帧的类型:
- 优先级高的,需要等待的时间较短,因此可以获得优先发送权。
- 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会。
常用的两种帧帧间间隔如下:
-
短帧帧间隔SIFS(
28
μ
s
28\mu s
28μs ),是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够再这个时间段内,从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧,由过长的MAC帧分片后的数据帧,以及所有回答AP探询的帧和在PCF方式中,接入点AP发送出的任何帧。 -
DCF帧间间隔DIFS(
128
μ
s
128\mu s
128μs),它比短帧帧间间隔SIFS要长得多,在DCF方式中,用来发送数据帧和管理帧。
1.问:源站为什么要在检测到信道空闲后还要等待一段时间DIFS
答:就是考虑到有可能有其他高优先级的帧要发送,若有,就要让高优先级帧先发送。
2. 目的站为什么真确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
答:SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式。
3.信道由忙转为空闲,且经过DIFS时间后,还要退避一段随机时间才能使用信道?
答:防止多个站点同时发送数据而产生碰撞。
3.6.3.2 CSMA/CA协议 -退避算法
当站点检测到信道是空闲的,并且所发送的帧不是成功发送完上一个数据帧之后立即连续发送的数据帧,则不使用退避算法。
使用退避算法的情况:
- 在发送数据帧之前检测到信道处于忙状态时;
- 在每一次重传一个数据帧时;
- 在每一次成功发送后要连续发送下一帧时;
在执行退避算法时,站点为退避计时器设置一个水机的退避时间:
- 当退避计时器的时间减小到0时,就开始发送数据
- 当退避计时器的时间还未减小到0而信道又变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,计息重启退避计时器。
3.6.3.2 CSMA/CA协议 - 信道预约和虚拟载波监听
为了尽可能减少碰撞的概率和降低碰撞的影响,802.11标准允许要发送的数据的站点对信道进行预约
- 源站再发送数据帧之前,先发送一个短的控制帧,称为请求发送RTS(Request To Send),它包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间。
- 若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS(Clear To Send),它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS帧中)。
- 源站收到CTS确认帧后,再等待一段时间SIFS后,就可发送其数据帧
- 若目的站正确接收了源站发来的数据帧,再等待时间SIFS后,就向源站发送确认帧ACK.
除源站和目的站以外的其他各站,在收到CTS帧(或数据帧)后就推迟接入到无线局域网中。这样就保证了源站和目的站之间的通信不会受到其他站的干扰。
如果RTS帧发生碰撞,源站就收不到CTS帧,需执行退避算法重传RTS帧。
由于RTS帧和CTS帧很短,发送碰撞的概率、碰撞产生的开销及本身的开销都很小。而对于一般的数据帧,其发送时延往往大于传播时延(因为是局域网),碰撞的概率很大,且一旦发生碰撞而导致数据帧重发,则浪费的时间就很多,因此用很小的代价对信道进行预约往往是值得的。802.11标准规定了3种情况供用户选择:
- 使用RTS帧和CTS帧
- 不使用RTS帧和CTS帧
- 只有当数据帧的长度超过某一数值时才使用RTS帧和CTS帧
虚拟载波监听机制
除RTS帧和CTS帧会携带通信需要持续的时间,数据帧也能携带通信需要持续的时间,这称为802.11的虚拟载波监听机制.
由于利用虚拟载波监听机制,站点只要监听到RTS帧、CTS帧或数据帧中的任何一个,就能知道信道被占用的持续时间,而不需要真正监听到信道上的信号,因此虚拟载波监听机制能减少隐蔽站带来的碰撞问题。
3.7 MAC地址、IP地址以及ARP协议
MAC地址是以太网的MAC子层所使用的地址;数据链路层
IP地址是TCP/IP体系结构网际层所使用的地址;网际层
ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该lIP地址获取到设备的MAC地址;
尽管lP地址和ARP协议属于TCP/IP体系结构的网际层(而不属于数据链路层),但是它们与MAC地址存在一定的关系,并且我们曰常的网络应用都离不开MAC地址、IP地址以及ARP协议。因此,我们将这三者放在一起讨论。
3.7.1 MAC地址
当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址;
在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(Media Access Control),因此这类地址被称为MAC地址;
- MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址;
- MAC地址有时也被称为物理地址。请注意:这并不意味着MAC地址属于网络体系结构中的物理层!
一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
3.7.1.1 IEEEE 802局域网的MAC地址格式
单播MAC地址举例
主机B给主机C发送单播帧,主机B首先要构建该单播帧,在帧首部中的目的地址字段填入主机C的MAC地址,源地址字段填入自己的MAC地址,再加上帧首部的其他字段、数据载荷以及帧尾部,就构成了该单播帧
主机B将该单播帧发送出去,主机A和C都会收到该单播帧;主机A的网卡发现该单播帧的目的MAC地址与自己的MAC地址不匹配,丢弃该帧;主机C的网卡发现该单播帧的目的MAC地址与自己的MAC地址匹配,接受该帧,并将该帧交给其上层处理.
广播MAC地址举例
假设主机B要发送一个广播帧,主机B首先要构建该广播帧,在帧首部中的目的地址字段填入广播地址,也就是十六进制的全F,源地址字段填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该广播帧。
主机B将该广播帧发送出去,主机A和C都会收到该广播帧,发现该帧首部中的目的地址字段的内容是广播地址,就知道该帧是广播帧,主机A和主机C都接受该帧,并将该帧交给上层处理
多播MAC地址举例
假设主机A要发送多播帧给该多播地址。将该多播地址的左起第一个字节写成8个比特,第一个字节的最低比特位是1,这就表明该地址是多播地址。
快速判断地址是不是多播地址,就是上图所示箭头所指的第十六进制数不能整除2(1,3,5,7,9,B,D,F),则该地址是多播地址
假设主机B,C和D支持多播,各用户给自己的主机配置多播组列表如下所示
主机B属于两个多播组,主机C也属于两个多播组,而主机D不属于任何多播组
主机A首先要构建该多播帧,在帧首部中的目的地址字段填入该多播地址,源地址点填入自己的MAC地址,再加上帧首部中的其他字段、数据载荷以及帧尾部,就构成了该多播帧
主机A将该多播帧发送出去,主机B、C、D都会收到该多播帧;主机B和C发现该多播帧的目的MAC地址在自己的多播组列表中,主机B和C都会接受该帧;主机D发现该多播帧的目的MAC地址不在自己得多播组列表中,则丢弃该多播帧
给主机配置多播组列表进行私有应用时,不得使用公有的标准多播地址。
3.7.2 IP地址
IP地址属于网络层的范畴,不属于数据链路层的范畴;下面内容讲的是IP地址的使用,详细的IP地址内容在网络层中介绍
IP地址是因特网(Internet)上的主机和路由器所使用的地址,用于标识两部分信息:
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
很显然。之前介绍的MAC地址不具备区分不同网络的功能。如果只是一个单独的网络,不接入因特网,可以只使用MAC地址(这不是—般用户的应用方式)。如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。
从网络体系结构看IP地址与MAC地址
数据包转发过程中IP地址与MAC地址的变化情况
如何从IP地址找出其对应的MAC地址?ARP协议(地址解析协议)
3.7.3 ARP协议
3.7.3.1 ARP协议-流程
当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中查找主机C的IP地址所对应的MAC地址,但未找到,因此,主机B需要发送ARP请求报文,来获取主机C的MAC地址。
ARP请求报文有具体的格式,上图的只是简单描述;ARP请求报文被封装在MAC帧中发送,目的地址为广播地址;主机B发送封装有ARP请求报文的广播帧,总线上的其他主机都能收到该广播帧。
收到ARP请求报文的主机A和主机C会把ARP请求报文交给上层的ARP进程;主机A发现所询问的IP地址不是自己的IP地址,因此不用理会;主机C的发现所询问的IP地址是自己的IP地址,需要进行相应处理。
C中的ARP响应报文被封装为单播帧,目的地址为B的MAC地址。
主机B接收该帧以后,更新自己的ARP高速缓存表。便能实现与C的数据传送了。
ARP中高速缓存表都有其类型,分为动态和静态:
动态:自动获取,生命周期默认为两分钟;
静态:手工设置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。
总结
1.源主机在自己的ARP高速缓存表中查找目的主机的IP地址所对应的MAC地址,若找到了,则可以封装MAC帧进行发送;若找不到,则发送ARP请求(封装在广播MAC帧中);
2.目的主机收到ARP请求后,将源主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后给源主机发送ARP响应(封装在单播MAC帧中),ARP响应中包含有目的主机的IP地址和MAC地址;
3.源主机收到ARP响应后,将目的主机的IP地址与MAC地址记录到自己的ARP高速缓存表中,然后就可以封装之前想发送的MAC帧并发送给目的主机;
4. ARP的作用范围:逐段链路或逐个网络使用;
5.除ARP请求和响应外,ARP还有其他类型的报文(例如用于检查lPI地址冲突的“无故ARP、免费ARP(Gratuitous ARP)") ;
6.ARP没有安全验证机制,存在ARP欺骗(攻击)问题。
3.8 集线器与交换器
传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。
采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。
集线器是也可以看做多口中继器,每个端口都可以成为一个中继器,中继器是对减弱的信号进行放大和发送的设备
集线器的以太网在逻辑上仍是个总线网,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式,收发帧不能同时进行
3.8.1 集线器HUB在物理层扩展以太网
使用集线器扩展:将多个以太网段连成更大的、多级星形结构的以太网
- 优点
- 使原来属于不同碰撞域的以太网上的计算机能够进行跨碰撞域的通信。
- 扩大了以太网覆盖的地理范围。
- 缺点
- 碰撞域增大了,但总的吞吐量并未提高。
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来。
碰撞域
- 碰撞域(collision domain) 又称 冲突域,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。
- 碰撞域越大,发生碰撞的概率越高。
3.8.2 以太网交换机-在数据链路层扩展以太网
使用集线器互连而成的共享总线式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧会通过共享总线传输到总线上的其他各个主机
使用交换机互连而成的交换式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧进入交换机后,交换机会将该单播帧转发给目的主机,而不是网络中的其他各个主机
这个例子的前提条件是忽略ARP过程,并假设交换机的帧交换表已经学习或配置好了
以太网交换机的交换方式
- 存储转发方式
- 直通 (cut-through) 方式
- 接收数据帧的同时就立即按数据帧的目的 MAC 地址决定该帧的转发接口,因而提高了帧的转发速度。
- 缺点是它不检查差错就直接将帧转发出去,因此有可能也将一些无效帧转发给其他的站。
3.8.1 集线器与交换机的区别
3.8.3 总结
3.9 以太网交换机自学习和转发帧的流程
以太网交换机工作在数据链路层(也包括物理层)
以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信,以太网交换机通过自学习算法自动逐渐建立起帧交换表。
3.9.1 自学习和转发帧的示例-同一个交换机内的网络
若A要发送某数据给B主机,要经过以下过程
- A 先向 B 发送一帧。该帧从接口 1 进入到交换机。
- 交换机收到帧后,先查找(图中左边)交换表。没有查到应从哪个接口转发这个帧给B。
- 交换机把这个帧的源地址 A 和接口 1写入交换表中
- 交换机向除接口 1 以外的所有的接口广播这个帧,寻求帧地址,接口 4到接口 2,先查找交换表。没有查到应从哪个接口转发这个帧给 B
- 交换机把这个帧的源地址 A 和接口 1 写入交换表中
- 除B主机之外与该帧的目的地址不相符,将丢弃该帧
- 主机B发现是给自己的帧,接受该帧
B接收到帧以后返回给A;
- B 向 A 发送一帧。该帧从接口 3 进入到交换机
- 交换机收到帧后,先查找(图中左边)交换表。发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A。
- 主机 A 发现目的地址是它,就接受该帧
- 交换机把这个帧的源地址 B 和接口 3 写入(图中左边)交换表中
3.9.2 自学习和转发帧的示例-跨交换机的网络
若E要发送某数据给A主机,要经过以下过程
- E 向 A发送一帧
- 交换机收到帧后,先查找(图中右边)交换表。发现(图中右边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口2转发出去。于是就把这个帧传送到接口 2 转发给 接口 4。
- 交换机把这个帧的源地址 E 和接口 3 写入(图中右边)交换表中
- 接口 4 到 左边的交换机,先查找(图中左边)交换表。发现(图中左边)交换表中的 MAC 地址有 A,表明要发送给A的帧应从接口1转发出去。于是就把这个帧传送到接口 1 转发给 A。
- 交换机把这个帧的源地址 E 和接口 4 写入(图中左边)交换表中
- 主机 A 发现目的地址是它,就接受该帧
3.9.3 自学习和转发帧的示例-同一总线上的网络
主机 A、主机 G、交换机 1的接口 1就共享同一条总线(相当于总线式网络)
- 主机 G 发送给 主机 A 一个帧
- 主机 A 和 交换机接口 1都能接收到
- 主机 A 的网卡收到后,根据帧的目的MAC地址A,就知道是发送给自己的帧,就接受该帧
- 交换机 1收到该帧后,首先进行登记工作
- 然后交换机 1对该帧进行转发,该帧的MAC地址是A,在(图中左边)交换表查找MAC 地址有 A
- MAC 地址为 A的接口号是1,但是该帧正是从接口 1 进入交换机的,交换机不会再从该接口 1 讲帧转发出去,因为这是没有必要,于是丢弃该帧
3.9.4 小结
- 考虑到可能有时要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个表项都设有一定的有效时间。过期的表项就自动被删除。
- 以太网交换机的这种自学习方法使得以太网交换机能够即插即用,不必人工进行配置,因此非常方便。
以太网交换机工作在数据链路层(也包括物理层)
以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。以太网交换机是一种即插即用设备,刚上电启动时其内部的帧交换表是空的。随着网络中各主机间的通信以太网交换机通过自学习算法自动逐渐建立起帧交换表。
以太网交换机自学习和转发帧的流程:
- 收到帧后进行登记。登记的内容为帧的源MAC地址及进入交换机的接口号;
- 根据帧的目的MAC地址和交换机的帧交换表对帧进行转发,有以下三种情况:
- 明确转发:交换机知道应当从哪个(或哪些)接口转发该帧(单播,多播,广播)
- 盲目转发:交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的,接口外的其他所有接口转发(也称为泛洪)。
- 明确丢弃:交换机知道不应该转发该帧,将其丢弃。
帧交换表中的每条记录都有自己的有效时间,到期删除。原因如下;
3.10 以太网交换机的生成树协议STP
由于在实际使用过程中,可能会出现线路故障导致无法通信。若A与B之间的线路故障会导致B与A、C之间无法通信。此时就提出了一个问题:如何提高以太网的稳定性?
可以选择通过添加冗余链路来提高以太网的可靠性。
优点:添加冗余链路可以提高以太网的可靠性
缺点:网络环路的负面效应。
而网络环路会导致广播风暴。
- 广播风暴指的是由于网络形成环路,网络信号广播会在环路之间不停往返进行,导致大量消耗网络资源。
- 还会导致主机收到重复的广播帧,导致交换机的交换表震荡。
为了解决以上问题,避免出现网络环路,便引出了生成树协议(STP)。
STP可以保证,不管交换机之间采用怎么样的物理连接,交换机都能自动构建出一个在逻辑上没有环路的网络,其逻辑拓扑结构必须是树形的,也就是生成最小生成树。关于最小生成树可以看:
当网络拓扑发生变化时,交换机都会自动进行生成树的重新计算。
- IEEE 802.1D 标准制定了一个生成树协议 STP (Spanning Tree Protocol)。
- 其要点是:不改变网络的实际拓扑,但在逻辑上则切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构,从而消除了兜圈子现象。
3.11 虚拟局域网VLAN
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。
3.11.1 虚拟局域网VLAN概述
以太网交换机工作在数据链路层(也包括物理层),使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域。随着交换式以太网规模的扩大,广播域相应扩大。
巨大的广播域会带来很多弊端:
广播风暴会浪费网路资源和各主机的CPU资源
网络中频繁出现的广播信息:
- TCP/IP协议站中的很多协议都会使用广播:
- 地址解析协议ARP(由IP地址,解析出MAC地址)
- 路由信息协议RIP(一种小型的内部路由协议)
- 动态主机配置协议DHCP(用于自动配置IP地址)
- NetBEUI: Windows下使用的广播协议。
- IPX/SPX:Novell网络的协议栈
- Apple Talk:Apple公司的网络协议栈。
分割广播域的方法
- 路由器物理分割:
-
虚拟局域网技术 虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。
同一个VLAN内部可以广播通信,不同VLAN不可以广播通信
3.11.2 虚拟局域网VLAN的实现机制
虚拟局域网VLAN技术是在交换机上实现的,需要交换机能够实现以下功能
- 能够处理带有VLAN标记的帧——IEEE 802.1 Q帧
- 交换机的各端口可以支持不同的端口类型,不同端口类型的端口对帧的处理方式有所不同
3.11.2.1 IEEE 802.1 Q帧
IEEE 802.1Q帧(也称Dot One Q帧)对以太网的MAC帧格式进行了扩展,插入了4字节的VLAN标记。
VLAN标记的最后12比特称为VLAN标识符VID,它唯一地标志了以太网帧属于哪一个VLAN.
- VID的取值范围是0~ 4095 (0 ~
2
12
?
1
2^{12}-1
212?1)
- 0和4095都不用来表示VLAN,因此用于表示VLAN的VID的有效取值范围是1 ~4094。
802.1Q帧是由交换机来处理的,而不是用户主机来处理的。
- 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称**“打标签”**
- 当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧;简称.“去标签"”。
3.11.2.2 交换机的端口类型
交换机的端口有三种:
- Access
- Trunk
- Hybrid(思科交换机中没有)
Access端口
Access端口主要用于交换机与用户计算机之间的互连。
- Access端口一般用于连接用户计算机
- Access端口只能属于一个VLAN
- Access端口的PVID值与端口所属VLAN的ID相同(默认为1)
Access端口接收处理方法:
对于A广播发送后,端口会先给帧进行打标签。
打完标签后,与标签号相同的端口就会接收该帧,并且接收后进行去标签接收。
对于VLAN的实现,可以通过划分VLAN后,修改ACEES端口的PVID:从而可以实现广播域的划分。
Trunk端口:用于交换机之间或交换机与路由器之间的互连。
- Trunk端口可以属于多个VLAN
- 用户可以设置Trunk端口的PVID值。默认情况下,Trunk端口的PVID值为1。
- Trunk端口发送处理方法:
- 对VID等于PVID的帧,“去标签”再转发;
- 对VID不等于PVID的帧,直接转发;
- Trunk端口接收处理方法:
- 接收“未打标签”的帧,根据接收帧的端口的PVID给帧**“打标签”**,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
|