目录:
文章目录
基本概念
结点:主机、路由器
链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。
数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上构成数据链路。
帧:链路层的协议数据单元,封装网络层数据报。
数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。
功能概述
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
功能
① 为网络层提供服务。无确认无连接服务,有确认无连接服务,有确认面向连接服务(有连接一定有确认)。
② 链路管理,即连接的建立、维持、释放(用于面向连接的服务)
③ 组帧
④ 流量控制,限制发送方发送速度。
⑤ 差错控制(帧错/位错)
封装成帧
封装成帧就是在一段数据的前后部分添加首部和尾部(帧定界符),这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部包含许多的控制信息,其有一个重要作用:帧定界(确定帧的界限)。
帧同步:接受方应当能从接收到的二进制比特流中区分出帧的起始和终止。
组帧方法:① 字符计数法 ② 字符(节)填充法 ③ 零比特填充法 ④ 违规编码法
透明传输
透明传输指不管所传数据是什么样的比特组合,都应当能够在链路上传送。因此,链路层就“看不见”有什么妨碍数据传输的东西。
当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
字符计数法
帧首部使用一个计数字段(第一个字节,八位)来标明帧内字符数。
但是有一个问题,就是当计数的字符发生错误,例如第一个计数字符变成了6,则是告诉接收方第一帧有六个字符,但是实际只有五个,原本第一帧到4就结束了,但是现在到5才结束,结果又导致下一帧误为6个字符,于是接收方接受到的数据信息全部都是错乱的,接收双方失去了同步,所以不常用。
字符填充法
现在用一个字符表示帧开始的头部,再用一个字符表示帧结束的尾部。这样就能完整的接收到一个帧的信息。
这种方式只适用于由文本文件组成时(文本文件的字符都是从键盘中输入的,即都为ASCII码),无论从键盘输入什么字符都可以放进帧中传过去,即为透明传输。
当传送的帧是由非ASCII码的文本文件组成时(例如二进制代码的程序或图像等)。就要采用字符填充法实现透明传输。
零比特填充法
保证了透明传输,在传送的比特流中可以传送任意比特组合,而不会引起对帧边界的判断错误。
违规编码法
可以用“高-高”,“低-低”来定界帧的起始和终止。
由于字节计数法中的Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充法实现上的复杂性和不兼容性,目前较为普遍使用的帧同步法是比特填充法和违规编码法。
差错控制
传输中的差错都是由噪声引起的。
全局性:由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的。
局部性:外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。
针对全局性的噪声的解决办法是对传感器下手,提高信噪比来减少或避免干扰。而针对局部性的噪声,通常是利用编码技术进行解决。
数据链路层编码和物理层的数据编码与调制不同。物理层编码针对的是单个比特,解决传输过程中比特的同步等问题,如曼彻斯特编码。而数据链路层的编码针对的是一组比特,它通过几余码的技术实现一组二进制比特串在传输过程是否出现了差错。
冗余编码:在数据发送之前,先按某种关系附加上一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的几余位也随之变化,使码字遵从不变的规则。接收端根据收到码字是否仍符合原规则,从而判断是否出错。
奇偶校验
在待发送的数据后面添加一位奇偶校验位,使整个数据(包括所添加的校验位在内)中的“1”的个数为奇数(奇校验)或偶数(偶校验)。
如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码。若有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)。
因为该方法漏检率极高,所以一般不采用此方式。
循环冗余检验
循环冗余检验CRC(Cyclic Redundancy Check)。
步骤:
-
收发双方约定好一个生成多项式。
-
发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输。
-
接收方通过生成多项式来计算收到的数据是否产生了误码。
检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
若要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网路中较少使用。
循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于使用硬件实现,因此被广泛使用于数据链路层。
在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
可靠传输
使用差错检测技术(例如循环冗余检测CRC),接收方的数据链路层就可以检测出帧在传输过程中是否出现误码(比特错误,只是传输差错中的一种)。
数据链路层向上层提供的服务类型:
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么都不做。
- 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么。
一般情况下,有线链路的误码率比较低,为了减少开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由上层处理。
无线链路易受到干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠的传输服务。
从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组乱序及分组重复。
分组丢失
分组乱序
给H2发送数据前:
由于网络或其他原因,导致到达H2的顺序与发送前不一致:
分组重复
当主机H6给主机H2发送信息时,由于一些原因在网络中滞留了,没有及时到达H2
导致H6对此分组进行超时重发,当重发的分组到达H2后,滞留的分组也到达H2,造成分组重复
当然分组丢失、失序、重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层。因此可靠的传输服务并不仅仅局限于数据链路层,其他各层均可以选择实现可靠传输。
注意,可靠传输的实现比较复杂,开销比较大,因此是否使用可靠传输取决于应用需求。
实现可靠传输有三种实现机制:停止等待协议SW、回退N帧协议GBN、选择重传协议SR。
注意:这三种可靠传输实现机制的基本原理并不仅仅局限于数据链路层,可以应用到计算机网络体系结构的各层协议中。
停止等待协议
SW(Stop-and-Wait),停止-等待协议。也常成为自动请求重传协议ARQ(Automatic Repeat reQuest),因为重传的请求是自动进行的,不需要接收方显示地请求。
如下图所示,发送方在每发送一个分组之后,都需要等待接收方返回确认ACK信号或者否认NCK信号之后才能发送下一个分组。
上面的情况适用于数据链路层点对点的信道通信,因为不太容易发生下图一样的错误,但是对于多个网络通过多个路由器互联的互联网这种复杂的情况而言,是很容易出现这种错误。
接收方收不到数据分组,就不会发送ACK或NAK。如果不采取其他措施,发送方就会一直处于等待接收方ACK或NAK的状态。
为解决该问题,可以在发送方发送完一个数据分组时启动一个超时计时器。若到了超时计时器所设置的重传时间而发送方仍收不到接收方的任何ACK或NAK,则重传原来的数据分组,这就叫做超时重传。
一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”。
当然,还有可能会出现下面的情况,即当接收方接收到分组之后,返回的ACK在传输时丢失,导致发送方超时重发,此时接收方需要判断并解决这种分组重复的问题
为了避免分组重复这种传输错误,必须给每个分组戴上序号。
对于停止-等待协议,由于发送一个数据分组就会停止等待,只要保证每发送一个新的数据分组,其发送序号与上次发送的数据分组的序号不同,则使用一个比特编号(0和1)即可。
既然分组已经编号,那确认信息是否需要编号呢?
注意,上图的最后一个DATA0与上面的DATA0的数据不一样,只是代号相同。
对于数据链路层的点对点信道通信,往返时间都比较固定,不会出现“确认迟到”的情况。因此,如果只在数据链路层实现停止-等待协议,可以不用给确认分组编号。
信道利用率 = 数据帧发送时延 / (数据帧发送时延 + 端到端往返时延)
其中的端到端往返时延也是两倍的单程传播时延
当往返时延RTT远大于数据帧发送时延TD时(如使用卫星链路时),信道利用率非常低。
若出现了重传,则对于传送有用的数据信息来说,信道利用率还会降低。
为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议。
回退N帧协议
停止-等待协议的信道利用率很低(例如在使用卫星链路时)。若出现超时重传,则信道利用率会更低。
如何解决呢?
可以采用流水线传输课来提高信道利用率。即,如果在发送方在接收到接收方的确认分组之前能够连续发送多个数据分组,则信道利用率会大大提高。
这里引入回退N帧协议,采用的是滑动窗口的思想。
- 采用3个比特位给分组编序号,即序号0~7;
- 发送窗口的尺寸WT的取值为:1 < WT <= 2 3-1,这里假设WT = 5
- 接受窗口的尺寸WR的取值为:WR = 1
正常情况下(无差错情况):
接收方每接受一个分组,其接受窗口就往前滑动一位,并返回一个ACK
当发送方接收到5个ACK后,发送窗口则先前挪动五个位置,并将前面的分组从缓存区中删除,而接收方会将分组数据交由上层处理。
当然,接收方不一定要对收到的每一个数据分组进行逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定),对按序到达的最后一个数据分组发送确认。ACKn表示序号为n及以前的所有数据分组都已正确接收。
如上图,即使ACK1在传输过程中丢失,ACK4到达发送方,发送方也可以得知接收方已经接收到全部分组,而不必进行重传。
当出现有差错的情况时
接收方会丢弃出现错误的分组,然后发现接下来的分组与接受序号不匹配,则会丢弃不匹配的分组,直至丢弃全部分组。
然后发送之前按序接收的最后一个数据分组进行确认,即发送ACK4,每丢弃一个分组,就发送一个ACK4。
当发送方接收到重复的确认,则知道之前所发送的数据分组出现了差错,于是可以不等超时计时器超时就立刻重传数据分组。
在上面的情况中,即使序号6,7,0,1的数据分组正确的到达接收方,但是由于五号数据分组误码而不被接受,它们也会不被接受,发送方还要重传这些数据分组,这就是所谓的Go-back-N(回退N帧)。
因此当通信线路质量不好时,回退N帧协议的信道利用率并不比停止-等待协议高。
回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议。在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议。
选择重传协议
回退N帧协议的接收窗口尺寸WR只能于1,因此接收方只能按序接收正确到达的数据分组。
一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费
为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸WR不应再等于1(而应大于1),以便接收方先下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一送交上层。这就是选择重传协议(SR,Selective Request)
需要注意的是,选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累计确认的方式,而是需要对每个正确接收到的数据分组进行逐一确认。
点到点协议
点到点协议 PPP(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议。
PPP协议是因特网工程任务组IETF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议已经成为因特网的正式标准[RFC1661,RFC1662]。
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,由以下三个部分主要构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP——用于建立、配置以及测试数据链路的连接
- 一套网络控制协议NCPs——其中的每一个协议支持不同的网络层协议
帧格式
标志(Flag)字段:PPP帧的定界符,取值为0x7E
地址(Address)字段:取值为0xFF,预留(目前没有什么作用)
控制(Control)字段:取值为0x03,预留(目前没有什么作用)
协议(Protocol)字段:指明帧的数据部分送交哪个协议处理:
取值为0x0021表示:帧的数据部分为IP数据报
取值0xC021表示:帧的数据部分为LCP分组
取值0x8021表示:帧的数据部分为NCP分组
帧检验序列(Frame Check Sequence)字段:CRC计算出的校验位。
透明传输
面向字节的异步链路:采用插入转义字符的字节填充法
面向比特的同步链路:采用插入比特0的比特填充法
发送方处理:对帧的数据部分进行扫(一般由硬件实现)。只要发现五个连续的比特1,则立即填充1个比特0(如上图所示)。
接收方处理:对帧的数据部分进行扫描(一般由硬件实现)。只要发现连续的五个比特1,就把其后的1个比特0删除(如上图所示)。
差错检测
采用的是CRC循环冗余校验的方式检测差错,CRC多项式为:
接收方每接收到一个PPP帧,就进行CRC检验。若CRC检验正确,则收下该帧,反之则丢弃。使用PPP的数据链路层向上部提供可靠传输服务。
工作状态
媒体接入
共享信道要着重考虑的问题,即如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC(Medium Access Control)。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术。
信道复用
复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号。
当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽。
静态划分信道
频道复用FDM
频道复用的所有用户同时占用不同的频带资源并行通信。
时分复用TDM
时分复用的所有用户在不同的时间占用同样的频带宽度。
波分复用WDM
码分复用CDM
码分复用CDM是另一种共享信道的方式。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA(Code Division Multiple Access)
同理的,频分复用FDM和时分复用TDM同样可用于多址接入,相应的名词是频分多址FDMA(Frequency Division Multiple Access)和时分多址TDMA(Time Division Multiple Access)
复用与多址:
- 复用是将单一媒体的频带资源划分成很多子信道,这些子信道之间相互独立,互不干扰。从媒体的整体频带资源来看,每个子信道只占用媒体频带资源的一部分。
- 多址(更确切地应该称为多点接入)处理的是动态分配信道给用户。这在用户仅仅暂时性地占用信道的应用中是必须的,而所有的移动通信系统基本上都属于这种情况。相反,在信道永久性地分配给用户的应用中,多址是不需要的
- 在某种程度上,FDMA、TDMA、CDMA可以分别看成是FDM、TDM、CDM的应用
与FDM与TDM不同的是,CDM的每一个用户可以在同样的时间使用同样的频带通信,由于各用户使用经过特殊挑选的不同码型,因此各用户之间不会造成干扰。
在CDMA中,每一个比特时间再划分为m个短的间隔,称为码片(Chip)。通常m的值为64或128。
在使用CDMA的每一个站被指派一个唯一的m bit码片序列的(Chip Sequence):
- 一个站如果要发送比特1,则发送它自己的m bit码片序列。
- 一个站如果要发送比特0,则发送它自己的m bit码片序列的二进制反码。
这种通信方式称为直接序列扩频DSSS。
码片序列的挑选原则如下:
- 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列。
- 分配给每个站的码片序列必须相互正交(规格化内积为0)。
令向量S表示站S的码片序列,令向量T表示其他任何站的码片序列。
两个不同站S和T的码片序列正交,就是向量S和T的规格化内积为0
应用举例
例题:
随机接入
总线碰撞有下面的两种情况:
CSMA/CD
早期的共享式以太网采用载波监听多址接入/碰撞检测:CSMA/CD(Carrier Sense Multiple Access/Collision Detection),总线局域网使用的协议
以太网还采取一种叫做强化碰撞的措施。即当发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送32比特或者48比特的认为干扰信号(Jamming Singal),以便有足够多的碰撞信号使所有站点都能检测出碰撞。
争用期(碰撞窗口)
主机最多经过2τ(即6→0)的时长就可检测到本次发送是否遭受了碰撞。因此,以太网的端到端往返传播时延2τ称为争用期或碰撞窗口。
经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间。
显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长。
10Mb/s以太网把争用期定为512比特发送时间,即51.2μs,因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m。
最小帧长
很显然,当以太网的帧长太短时,会出现下图的情况
以太网规定最小帧长为64字节,即512比特(512比特时间即为争用期)
如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节。
以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞;
如果在争用期(共发送64字节)没有检测到碰撞,那么后续发送的数据 一定不会发生碰撞;如果在争用期内检测到碰撞,立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于碰撞而异常中止的无效帧。
最大帧长
截断二进制指数退避算法
若连续多次发生碰撞,表明可能有较多的主机参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大 (这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
当重传达16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,向高层报告。
信道利用率
假设当前处于① 各主机发送帧都不会产生碰撞。 ② 总线一旦空闲就有某个主机立即发送帧 ③ 发送一帧占用总线的时间为 T0 + τ,而帧本身的发送时间是T0 的理想情况。
CSMA/CD协议曾经用于各种总线结构以太网和双绞线以太网的早期版本中。现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CD协议。
CSMA/CA
载波监听多址接入/碰撞避免 CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)协议,是一种无线局域网使用的协议。
在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发生碰撞。
在无线局域网中,不能使用碰撞检测CD,原因如下:
- 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高。
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大。
例如上图,A和C都检测不到对方的无线信号。当A和C都给B发送帧时,产生碰撞,然而A和C无法检测到此碰撞。这种未能检测出信道上其他站点信号的问题就是隐蔽站问题。
802.11无线局域网使用(SMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能。
由于不可能避免所有的碰撞,并且无线信道误码率较高,802.11标准还使用了数据链路层确认机制 (停止-等待协议)来保证数据被正确接收。
802.11的MA(层标准定义了两种不同的媒体接入控制方式:
- 分布式协调功能DCF(DistributedcoordinationFunction)。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式。
- 点协调功能PCF(Point Function)。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用。
帧间间隔IFS(InterFrame Space)
802.11标准规定,所有站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS。帧间间隔的长短取决于该站点要发送的帧的类型:
- 高优先级帧需要等待的时间较短,因此可优先获得发送权。
- 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已经发送到信道上,则信道变成忙态,因而低优先级帧就只能再推迟发送,这样就减少了发生碰撞的机会。
常见的帧间间隔:
- 短帧间间隔SIFS(28μs),是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧、由过长的MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧。
- DCF帧间间隔DIFS(128μs),它比短帧间间隔SIFS要长得多,在DCF方式中用来发送数据帧和管理帧。
工作原理
当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立刻发送的数据帧,则不适用退避算法。
以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态时。
- 在每一次重传一个数据帧时。
- 在每一次成功发送后要连续发送下一帧时(为了避免一个站点长时间占用信道)。
退避算法
在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据;
- 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DFS后,继续启动退避计时器。
在进行第次退避时,退避时间在时隙编号0,1,…,22+i- 1)中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应于第6次退避)就不再增加了。
信道预约和虚拟载波监听
MAC地址
MAC地址是以太网的MAC子层所使用的地址。
般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无线局域网适配器(无线
网卡)。每个网络适配器都有一个全球唯一的MAC地址。而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址。综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。
字节发送顺序:第一字节 => 第六字节
字节内的比特发送顺序:b0 => b7
对于使用EUI-48空间的应用程序,IEEE的目标寿命为100年(即直到2080年),但是现在鼓励使用EUI-64来替代EUI-48
单播MAC地址
广播MAC地址
多播MAC地址
IP地址
IP地址是因特网上的主机和路由器所使用的地址(IP地址是TCP/IP体系结构网际层所使用的地址。IP地址属于网络层的范畴,而非数据链路层的范畴),用于标识两个部分的信息:
- 网络编号:标识因特网上数以百万计的网络。
- 主机编号:标识同一网络上不同主机(或路由器接口)
如果只是一个单独的网络,不接入因特网,可以只使用MAC地址。但一旦主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。因此,之前介绍的MAC地址并不具备区分不同网络的功能。
数据包转发过程中IP地址与MAC地址的变化情况
由上图可得,数据包在转发过程中:
- 源IP地址和目的IP地址保持不变。
- 源MAC地址和目的MAC地址逐个链路(网络)改变。
ARP地址
ARP地址属于TCP/IP体系结构的网络层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到设备的MAC地址。
主机C会先将主机B的IP地址和MAC地址记录到自己的ARP高速缓存表中。然后给B发送ARP响应,以告知自己的MAC地址。
高速缓存的类型分为两种:
- 动态:自动获取,生命周期默认为两分钟。
- 静态:手工设置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。
注意:ARP协议只能在一段链路或一个网络上使用,无法跨网络进行使用
除了ARP请求和响应外,ARP还有其他类型的报文(如用于检查IP地址冲突的“无故ARP、免费ARP(Gratuitous ARP)”)
ARP没有安全验证机制,存在ARP欺骗(攻击)问题:
ARP欺骗(ARP Spoofing)是一种网络攻击,攻击者通过伪装(spoofing)的ARP响应来欺骗网络中的其他设备,使其将网络流量发送到攻击者指定的错误物理地址。这种攻击的目的通常是中间人攻击、窃取敏感信息或监视网络通信。下面是ARP欺骗攻击的详细解释:
-
ARP协议的漏洞: ARP协议的设计本身是基于信任的,它假设网络中的所有设备都会提供正确的ARP响应。然而,ARP是一个无验证的协议,没有机制来验证ARP响应的真实性。
-
攻击步骤:
- 攻击者首先发送虚假的ARP响应,宣称自己是某个IP地址对应的正确MAC地址。
- 被攻击的目标设备收到这个虚假的ARP响应后,会更新自己的ARP缓存表,将攻击者的MAC地址与指定的IP地址关联起来。
- 此后,目标设备在尝试与拥有该IP地址的设备进行通信时,将流量发送到攻击者的MAC地址上。
- 攻击者可以选择将收到的流量转发到正确的目标,以保持通信正常,或者进行拦截和修改。
-
攻击应用场景:
- 中间人攻击: 攻击者可以在目标设备和通信目标之间插入自己,截获或修改通信内容。
- 会话劫持: 攻击者截获并篡改通信,以窃取敏感信息,如登录凭据。
- 网络监视: 攻击者截获通信以进行监视,获取有关网络活动的信息。
-
防范措施:
- 使用静态ARP条目: 将关键设备的IP地址和MAC地址的映射配置为静态,减少对动态ARP表的依赖。
- ARP缓存检测工具: 使用网络工具来监视和检测异常的ARP活动。
- 网络流量加密: 使用加密协议(如SSL/TLS)来保护通信内容,即使被截获也难以解密。
- ARP防护工具: 一些网络设备和安全软件提供了防护ARP欺骗攻击的功能,可以检测和防止此类攻击。
集线器与交换机的区别
早期的总线型以太网
使用双绞线和集线器HUB的星型以太网
使用集线器的以太网在逻辑仍是一个总线网,各立共享总线资源,使用的还是CSMA/CD协议,只能工作在半双工模式;
集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测);
集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
以太网交换机
当一台主机要发送数据帧给另一台主机时,数据帧通过集线器时,集线器是将该数据帧,广播至该集线器下的所有主机,消耗资源较多。
而通过交换机时,交换机会将该数据帧通过单播的方式直接对接给目的主机。很显然,交换机的优势较大。
以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。
以太网交换机具有并行性,能同时连通多对接口,使多对主句能同时通信,无碰撞(不使用CSMA/CD协议)。
以太网交换机一般都具有多种速率的接口,例如:10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合。
以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。
以太网交换机时一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
在交换机中,帧有两种转发方式:
- 存储转发
- 直通交换:采用基于硬件的交叉矩阵(交换时时延非常小,但并不会检查帧是否有差错)
以太网的自学习和转发帧
生成树协议STP
当以太网中的多个交换机之间的链路出现故障时,则会导致最初大的以太网变成较小的以太网,导致各小群体之间无法进行通信。
此时可以添加冗余链路来提高以太网的可靠性。
但是此时的冗余链路会带来负面效应,形成了一个网络环路。此时会带来以下的问题:
- 广播风暴:网络中的广播消息在短时间内被大量传播,导致网络拥塞、性能下降甚至崩溃。广播风暴通常发生在存在网络环路的情况下,这使得广播消息在网络中无限循环。
-
主机收到重复的广播帧:大量消耗主机资源。
-
交换机的帧交换表震荡(漂移):以H1为例,当H1发送消息时,交换表将记录正确的H1地址1。而当H2发送帧时,会将错误的记录H1地址2记录到交换表中,而当H3发送帧时,会将错误的记录H1地址3记录到交换表中。如此往复,H1的地址会在错误记录2和3中跳转。
以太网交换机使用生成树协议STP(Spanning Tree Protocol),可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题。
不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路)
最终生成的树型逻辑拓扑要确保连通整个网络;当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算。
虚拟局域网VLAN
以太网交换机工作在数据链路层(也包括物理层),使用一个或多个以太网交换机互联起来的交换式以太网,其所有站点都属于同一个广播域。随着交互式以太网规模的扩大,广播域相应扩大。
巨大的广播域会带来很多弊端:① 广播风暴 ② 难以管理和维护 ③ 潜在的安全问题
无法减少广播出现的频率,因为在网络中会频繁出现广播信息:
- TCP/IP协议栈中的很多协议都会使用广播
- 地址解析协议ARP(已知IP地址,找出其相应的MAC地址)
- 路由信息协议RIP(一种小型的内部路由协议)
- 动态主机配置协议DHCP(用于自动配置IP地址)
- NestBEUI:Widnows下使用的广播型协议
- IPX/SPX:Novell网络的协议栈
- Apple Talk:Apple公司的网络协议栈
分隔广播域的方法
使用路由器可以隔离广播域。因为路由器属于网络层,由于路由器默认情况下不对广播数据包进行转发,因此路由器很自然地就可以隔离广播域。
但是路由器的成本较高。
此时虚拟局域网VLAN技术应运而生。
虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求。
相同VLAN下的设备可以相互通信,不同VLAN下的设备不能进行直接通信。
实现机制
交换机各端口的缺省VLAN ID:
- 在思科交换机上称为Native VLAN,即本证VLAN
- 在华为交换机上称为Port VLAN ID,即端口VLAN ID,简记为PVID
交换机的端口类型有以下三种:
-
Access:一般用于连接用户计算机,Access端口只属于一个VLAN,其PVID值与端口所属VLAN的ID相同(默认为1)
- 接收处理方法:一般只接受“未打标签”的普通以太网MAC帧。根据接受帧的端口的PVID给帧“打标签”,即插入4字节的VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
- 发送处理方法:若帧中的VID与端口的PVID相等,则“去标签”并转发该帧;否则不转发。
-
Trunk:一般用于交换机之间或交换机与路由器之间的互连。可以属于多个VLAN。用户可以设置Trunk端口的PVID值,默认情况下,Trunk端口的PVID的值为1。
- 发送处理方法:对VID等于PVID的帧“去标签”后再转发
- 接收处理方法:接收“未打标签”的帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等。
结论:互连的Trunk端口的PVID值不等,可能会造成转发错误。