计算机网络(三)
图片加载较慢,请耐心等待!🌤️🌥️🌦️
知识点一:数据链路层概述
概述
链路
是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换节点数据链路
则是在链路的基础上增加了一些必要的硬件(如网络适配器)和软件(如协议的实现)- 数据链路层以
帧
为单位 传输和处理数据 - 注意:不同的链路层可能采用不同的数据链路层协议,但都是无确认的无连接服务
数据链路层使用的信道
数据链路层属于计算机网路的低层。数据链路层使用的信道主要有以下两种类型:
- 点对点信道(一对一)
- 广播信道(一对多)
现在,在 有线(局域网)领域
使用 点对点链路和链路层交换机的交换式局域网
取代了 共享式局域网
在无线局域网中仍然使用的是 共享信道
技术
知识点二:封装成帧
封装成帧
是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧
帧头和帧尾中包含有重要的控制信息
帧头和帧尾的作用之一就是
帧定界
- 作用: 接收方的数据链路层如何从物理层交付的比特流中提取出一个个的帧
- 但并不是每一种数据链路层协议的帧都包含有帧定界标志,比如以太网V2的MAC帧,但是MAC帧会加上前导码 ,前导码包括
前同步码
(作用是使接收方的时钟同步)和帧开始定界符
(表明其后面紧跟着的就是MAC帧) - 另外以太网还规定了帧间间隔为96比特时间,因此,MAC帧不需要帧结束定界符
透明传输
透明传输
是指数据链路层对上层交付的传输数据没有任何限制,好像数据链路层不存在一样
个人理解 就是无论网络层传什么文件,数据链路层都可以把数据传给对面的数据链路层
特殊情况
- 帧界定标志也就是个特定数据值,如果在上层交付的协议数据单元中, 恰好也包含这个特定数值,接收方就不能正确接收
- 解决方法:面向字节的物理链路使用
字节填充
(byte stuffing) 或字符填充
(character stuffing),面向比特的物理链路使用比特填充的方法实现透明传输 - 发送端的数据链路层在数据中出现 控制字符
“SOH”
或“EOT”
的前面插入一个转义字符“ESC”
(其十六进制编码是1B,数值是27) - 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符
- 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个
帧的数据部分长度
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大些
考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即 最大传送单元MTU
(Maximum Transfer Unit)
流量控制
限制发送方的数据流量
✨知识点三:差错检测
比特差错
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0而0也可能变成1- 在一段时间内,传输错误的比特占所传输比特总数的比率称为
误码率BER
(Bit Error Rate) - 使用
差错检测码
来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
奇偶校验
- 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)。
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检)
循环冗余校验CRC(Cyclic Redundancy Check)
- 收发双方约定好一个
生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出
差错检测码
(冗余码) 将其添加到待传输数据的后面一起传输 - 接收方通过生成多项式来计算收到的数据是否产生了误码
发送方需要后面补最高次数个零,接收方不需要补零,中间的计算是异或计算(同 0 异 1)
帧校验序列 FCS
是添加在数据后面的冗余码
知识点四:可靠传输
- 使用
差错检测技术
(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)。 - 数据链路层向上层提供的服务类型
不可靠传输服务
仅仅丢弃 有误码的帧,其他什么也不做(视频通话中的卡顿)可靠传输服务
想办法实现发送端发送什么,接收端就收到什么(例子:发送图片)
- 一般情况下,
有线链路
的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务,即使出现了误码,可靠传输的问题由其上层处理 无线链路
易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
- 比特差错只是传输差错中的一种。
- 从整个计算机网络体系结构来看,传输差错还包括
分组丢失
分组失序
以及分组重复
- 分组丢失:路由器输入队列快满了,主动丢弃收到的分组
- 分组失序:数据并未按照发送顺序依次到达接收端
- 分组重复:由于某些原因,有些分组在网络中滞留了,没有及时到达接收端,这可能会造成发送端对该分组的重发,重发的分组到达接收端,但一段时间后,滞留在网络的分组也到达了接收端,这就造成分组重复的传输差错
- 可靠传输服务并不仅局限于数据链路层,其余各层均可选择实现可靠传输
- TCP向其上层提供面向连接的可靠传输服务
- UDP向其上层提供无连接、不可靠传输服务
- IP向其上层提供无连接、不可靠传输服务
- 802.11无线局域网要求数据链路层实现可靠传输
- 以太网不要求数据链路层实现可靠传输
✨知识点五:流量控制三种可靠协议
停止-等待协议SW
回退N帧协议GBN
选择重传协议SR
这三种协议是一点一点递进的,计算机网络知识也是一点一点递进的
- 接收端检测到数据分组有误码时,将其丢弃并等待发送方的超时重传。但对于误码率较高的点对点链路,为使发送方尽早重传,也可给发送方发送NAK分组
- 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的停等特性,只需1个比特编号就够了,即编号0和1
- 为了让发送方能够判断所收到的ACK分组是否是重复的,需要给ACK分组编号,所用比特数量与数据分组编号所用比特数量一样(一个即可)数据链路层一般不会出现ACK分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给ACK分组编号
- 超时计时器设置的重传时间应仔细选择。一般可将重传时间选为略大于“从发送方到接收方的平均往返时间”
- 在数据链路层点对点的往返时间比较确定,重传时间比较好设定
- 然而在运输层,由于端到端往返时间非常不确定,设置合适的重传时间有时并不容易。
四种问题
- 确认与否认
- 超时重传
- 确认丢失
- 确认迟到
停止-等待协议的信道利用率
TD
是发送方发送数据分组所耗费的发送时延RTT
是收发双方之间的往返时间TA
是接收方发送确认分组所耗费的发送时延
- 当往返时延RTT远大于数据帧发送时延T时(例如使用卫星链路),信道利用率非常低
- 若出现重传,则对于传送有用的数据信息来说,信道利用率还要降低
- 为了克服停止-等待协议信道利用率很低的缺点,就产生了另外两种协议,即后退N帧协议GBN和选择重传协议SR
自动请求重传协议ARQ(Automatic Repeat reQuest)
像停止-等待协议这样通过确认和重传机制实现的可靠传输协议,意思是重传的请求是自动进行,因为不需要接收方显式地请求,发送方重传某个发送的分组
在相同的时间内,使用停止-等待协议的发送方只能发送一个数据分组,而采用流水线传输的发送方,可以发送多个数据分组
回退N帧协议在流水线传输的基础上,利用发送窗口来限制发送方可连续发送数据分组的个数
过程
无差错情况
发送方将序号落在发送窗口内的0~4号数据分组,依次连续发送出去
他们经过互联网传输正确到达接收方,就是没有乱序和误码,接收方按序接收它们,每接收一个,接收窗口就向前滑动一个位置,并给发送方发送针对所接收分组的确认分组,在通过互联网的传输正确到达了发送方
发送方每接收一个、发送窗口就向前滑动一个位置,这样就有新的序号落入发送窗口,发送方可以将收到确认的数据分组从缓存中删除了,而接收方可以择机将已接收的数据分组交付上层处理
累计确认
- 接收方不一定要对收到的数据分组逐个发送确认,而是可以在收到几个数据分组后(由具体实现决定)对按序到达的最后一个数据分组发送确认。
- ACKn表示序号为n及以前的所有数据分组都已正确接收。
- 优点:
- 即使确认分组丢失,发送方也可能不必重传
- 减小接收方的开销
- 减小对网络资源的占用
- 缺点:
- 不能向发送方及时反映出接收方已经正确接收的数据分组信息(展示:有差错情况)
Q:若WT超过取值范围,例如WT=8,会出现什么情况?
A:接收方无法辨别新旧的数据分组
总结
- 回退N帧协议在流水线传输的基础上利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续ARQ协议
- 在协议的工作过程中发送窗口和接收窗口不断向前滑动,因此这类协议又称为滑动窗口协议
- 由于回退N帧协议的特性,当通信线路质量不好时,其信道利用率并不比停止-等待协议高
- 回退N帧协议的接收窗口尺寸wr 只能等于1,因此接收方只能按序接收正确到达的数据分组
- 一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃(尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大浪费
- 为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸wr不应再等于1(而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议
注意:
选择重传协议为了使发送方仅重传出现差错的分组,接收方不能再采用累积确认,而需要对每个正确接收到的数据分组进行逐一确认!
✨知识点六:PPP协议
点对点协议PPP
(Point-to-Point Protocol)是目前使用最广泛的点对点数据链路层协议
PPPoE
是为宽带上网的主机使用的链路层协议,也就是说基本上使用PPPoE
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法(意思就是这就是标准,但也仅此而已),主要由以下三部分构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP 用于建立、配置以及测试数据链路的连接
- 一套网络控制协议NCPS 其中的每一个协议支持不同的网络层协议
帧格式
必须规定特殊的字符作为帧定界符
- 标志(Flag)字段:PPP帧的定界符,取值为0x7E
- 地址(Address)字段:取值为0xFF,预留(目前没有什么作用)
- 控制(Control)字段:取值为0x03,预留(目前没有什么作用)
协议(Protocol)字段:指明帧的数据部分送交哪个协议处理
- 取值0x0021表示:帧的数据部分为IP数据报
- 取值0xC021表示:帧的数据部分为LCP分组
- 取值0x8021表示:帧的数据部分为NCP分组
帧检验序列(Frame Check Sequence)字段:CRC计算出的校验位
透明传输
实现透明传输的方法
面向 字节
的异步链路: 字节填充法
(插入“转义字符”)
发送方的处理:
出现的每一个7E(PPP帧的定界符) | 字节转变成2字节序列(7D,5E) |
---|---|
出现的每一个7D(转义字符) | 字节转变成2字节序列(7D,5D) |
出现的每一个ASCII码控制字符(数值小于0x20的字符) | 该字符前面插入一个7D字节,同时将该字符的编码加上0x20 |
接收方的处理:进行 反变换
即可恢复出原来的帧的数据部分
面向 比特
的同步链路: 比特填充法
(插入“比特0”)
发送方的处理:
对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,则立即填充1个比特0
接收方的处理:
对帧的数据部分进行扫描(一般由硬件实现)。只要发现5个连续的比特1,就把其后的1个比特0删除
差错检测
能够对接收端收到的帧进行检测,并立即丢弃有差错的帧
接收方每收到一个PPP帧,就进行CRC检验。若CRC检验正确,就收下这个帧;反之,就丢弃这个帧。使用PPP的数据链路层向上不提供可靠传输服务
工作状态
- 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。
- PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧)。
- 这些分组及其响应选择一些 PPP 参数,并进行网络层配置,NCP 给新接入的 PC 机
- 分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。
- 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接
知识点七:媒体接入控制(介质访问控制)——广播信道
媒体接入控制
(介质访问控制)使用 一对多
的 广播通信
方式
局域网的数据链路层
局域网最主要的特点是:
- 网络为一个单位所拥有
- 地理范围和站点数目均有限
局域网具有如下主要优点:
- 具有广播功能,从一个站点可很方便地访问全网。局域网上的主机可共享连接在局域网上的各种硬件和软件资源
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变
- 提高了系统的可靠性、可用性和残存性
Q:为什么要媒体接入控制(介质访问控制)?
若多个设备在共享信道上同时发送数据,则会造成彼此干扰,导致发送失败
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即 媒体接入控制MAC
(Medium Access Control)。
随着技术的发展,交换技术的成熟和成本的降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有线领域已完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍然使用的是共享媒体技术
✨知识点八:CSMA/CD协议
随机接入(CSMA/CD协议)
多用于 有线协议
载波监听多址接入/碰撞检测
CSMA/CD(Carrier Sense Multiple Access/Collision Detection)
- 多址接入MA
表示许多主机以多点接入的方式连接在一根总线上
- 载波监听CS
是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞 (先听后说)
信道空闲96比特时间
- 碰撞检测CD
- “碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。
- 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)
- 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞
- 所谓“碰撞”就是发生了冲突。因此“碰撞检测”也称为“冲突检测”
- 在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来
- 每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,免得继续浪费网络资源,然后等待一段随机时间后再次发送
- 以太网还采取一种叫做强化碰撞的措施。这就是当发送帧的站点一旦检测到碰撞,除了立即停止发送帧外,还要再继续发送32比特或48比特的人为干扰信号(Jamming Signal),以便有足够多的碰撞信号使所有站点都能检测出碰撞
CSMA/CD 协议工作流程
CSMA/CD 协议工作——争用期(碰撞窗口)
- 主机最多经过2T(即8-0)的时长就可检测到本次发送是否遭受了碰撞
- 因此,以太网的端到端往返传播时延2t称为
争用期
或碰撞窗口
- 经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞
- 每一个主机在自己发送帧之后的一小段时间内,存在着遭遇碰撞的可能性。这一小段时间是不确定的。它取决于另一个发送帧的主机到本主机的距离,但不会超过总线的端到端往返传播时延,即一个争用期时间
- 显然,在以太网中发送帧的主机越多,端到端往返传播时延越大,发生碰撞的概率就越大。因此,共享式以太网不能连接太多的主机,使用的总线也不能太长
- 10Mb/s以太网把争用期定为512比特发送时间,即51.2us,因此其总线长度不能超过5120m,但考虑到其他一些因素,如信号衰减等,以太网规定总线长度不能超过2500m
CSMA/CD 协议工作——最小帧长
- 以太网规定最小帧长为
64字节
,即512比特(512比特时间即为争用期)- 如果要发送的数据非常少,那么必须加入一些填充字节,使帧长不小于64字节
- 以太网的最小帧长确保了主机可在帧发送完成之前就检测到该帧的发送过程中是否遭遇了碰撞
- 如果在争用期(共发送64字节)没有检测到碰撞,那么后续发送的数据就一定不会发生碰撞
- 如果在争用期内检测到碰撞,就立即中止发送,这时已经发送出去的数据一定小于64字节,因此凡长度小于64字节的帧都是由于碰撞而异常中止的无效帧
CSMA/CD 协议工作——最大帧长
为了 避免一直占用总线
以太网V2的MAC帧 | 最大长度为1518字节 |
---|---|
插入VLAN标记后的802.1Q帧 | 最大长度为1522字节 |
CSMA/CD 协议工作——截断二进制指数退避算法
- 若连续多次发生碰撞,就表明可能有较多的主机参与竞争信道。但使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(这也称为动态退避),因而减小发生碰撞的概率,有利于整个系统的稳定。
- 当重传达16次仍不能成功时,表明同时打算发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告
CSMA/CD 协议工作——信道利用率
CSMA/CD 协议工作——帧接收流程
CSMA/CD 协议的重要特性
使用 CSMA/CD
协议的以太网不能进行全双工通信而 只能进行双向交替通信(半双工通信)
每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。
CSMA/CD协议曾经用于各种总线结构以太网和双绞线以太网的早起版本中。
现在的以太网基于交换机和全双工连接,不会有碰撞,因此没有必要使用CSMA/CD协议
✨知识点九:CSMA/CA协议
无线局域网使用的协议:CSMA/CA
Q:无限局域网为什么不能使用CSMA/CD
- 在无线局域网中,仍然可以使用载波监听多址接入CSMA,即在发送帧之前先对传输媒体进行载波监听。若发现有其他站在发送帧,就推迟发送以免发生碰撞
- 在无线局域网中,不能使用碰撞检测CD,原因如下:
- 由于无线信道的传输条件特殊,其信号强度的动态范围非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现碰撞检测CD,对硬件的要求非常高
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大
- 802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能。
- 由于不可能避免所有的碰撞并且无线信道误码率较高,802.11标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收
- 802.11的MAC层标准定义了两种不同的媒体接入控制方式:
- 分布式协调功能DCF(Distributed Coordination Function)。在DCF方式下,没有中心控制站点,每个站点使用CSMA/CA协议通过争用信道来获取发送权,这是802.11定义的默认方式
- 点协调功能PCF(Point Coordination Function)。PCF方式使用集中控制的接入算法(一般在接入点AP实现集中控制),是802.11定义的可选方式,在实际中较少使用
帧间间隔IFS(InterFrame Space)
- 802.11标准规定,所有的站点必须在持续检测到信道空闲一段指定时间后才能发送帧,这段时间称为帧间间隔IFS
- 帧间间隔的长短取决于该站点要发送的帧的类型:
- 高优先级帧需要等待的时间较短,因此可优先获得发送权;
- 低优先级帧需要等待的时间较长。若某个站的低优先级帧还没来得及发送,而其他站的高优先级帧已发送到信道上,则信道变为忙态,因而低优先级帧就只能再推迟发送了。这样就减少了发生碰撞的机会
- 常用的两种帧间间隔如下:
- 短帧间间隔SIFS(28us),是最短的帧间间隔,用来分隔开属于一次对话的各帧。一个站点应当能够在这段时间内从发送方式切换到接收方式。使用SIFS的帧类型有ACK帧、CTS帧、由过长的MAC帧分片后的数据帧、以及所有回答AP探询的帧和在PCF方式中接入点AP发送出的任何帧
- DCF帧间间隔DIFS(128us),它比短帧间间隔SIFS要长得多,在DCF方式中用来发送数据帧和管理帧
Q:源站为什么在检测到信道空闲后还要再等待一段时间DIFS?
考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送
Q:目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式
Q:信道由忙转为空闲且经过DIFS时间后,还要退避一段随机时间才能使用信道?
防止多个站点同时发送数据而产生碰撞
CSMA/CA协议的退避算法
使用退避算法的时机
- 当站点检测到信道是空闲的,并且所发送的数据帧不是成功发送完上一个数据帧之后立即连续发送的数据帧则不使用退避算法。
- 以下情况必须使用退避算法:
- 在发送数据帧之前检测到信道处于忙状态时;
- 在每一次重传一个数据帧时;
- 在每一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)
在执行退避算法时,站点为退避计时器设置一个随机的退避时间:
- 当退避计时器的时间减小到零时,就开始发送数据
- 当退避计时器的时间还未减小到零时而信道又转变为忙状态,这时就冻结退避计时器的数值,重新等待信道变为空闲,再经过时间DIFS后,继续启动退避计时器(解冻)
在进行第i次退避时,退避时间在时隙编号{0,1,…,2?、1}中随机选择一个,然后乘以基本退避时间(也就是一个时隙的长度)就可以得到随机的退避时间。这样做是为了使不同站点选择相同退避时间的概率减少。当时隙编号达到255时(对应于第6次退避)就不再增加了
CSMA/CA协议的信道预约和虚拟载波监听
为了 尽可能减少碰撞的概率
和降低碰撞的影响,802.11标准允许要发送数据的站点 对信道进行预约
- 源站在发送数据帧之前先发送一个短的控制帧,称为请求发送RTS(Request To
Send),它包括源地址、目的地址以及这次通信(包括相应的确认帧)所需的持续时间。 - 若目的站正确收到源站发来的RTS帧,且媒体空闲,就发送一个响应控制帧,称为允许发送CTS(Clear To Send),它也包括这次通信所需的持续时间(从RTS帧中将此持续时间复制到CTS顿中)
- 源站收到CTS帧后,再等待一段时间SIFS后,就可发送其数帧。
- 若目的站正确收到了源站发来的数据帧,在等待时间SIFS后,就向源站发送确认帧ACK
解决隐蔽站问题
A和C互为隐蔽站
A发送RTS后,接受站向自己的领域发送CTS,C站虽然不知道A站的存在,但从CTS中得知信道需要占用一段时间,那么在这段时间内C站不能发送帧,A站在这段时间可以尽情发送数据帧
✨知识点十:MAC地址、IP地址、ARP协议
MAC地址是以太网的MAC子层所使用的地址 (数据链路层)
IP地址是TCP/IP体系结构网络层所使用的地址 (网际层)
ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到设备的MAC地址 (网际层)
MAC地址
使用点对点信道的数据链路层不需要使用地址
使用广播信道的数据链路层 必须使用地址
来区分各主机
MAC地址
在每个主机发送的帧中必须携带标识发送主机和接收主机的地址。由于这类地址是用于媒体接入控制MAC(MediaAccessControl)
- MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为
硬件地址
- MAC地址有时也被称为
物理地址
。请注意:这并不意味着MAC地址属于网络体系结构中的物理层!
IEEE 802局域网的MAC地址格式
一共六个字节,48位,前三个字节是OUI,后三个字节是网络接口标识符
组织唯一标识符OUI
生产网络设备的厂商,需要向IEEE的注册管理机构申请一个或多个OUI
网络接口标识符
由获得OUI的厂商自行随意分配
EUI-48
48是这个MAC地址的位数
单播、多播、全球、本地
关于无效的 MAC 帧
- 数据字段的长度与长度字段的值不一致;
- 帧的长度不是整数个字节;
- 用收到的帧检验序列 FCS 查出有差错;
- 数据字段的长度不在 46 ~ 1500 字节之间。
有效的 MAC 帧长度为 64 ~ 1518 字节之间
IEEE 802局域网的MAC地址发送顺序
字节发送顺序 | 第一字节→第六字节 |
---|---|
字节内的比特发送顺序 | b_0→b_7 |
单播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地址不在自己得多播组列表中,则丢弃该多播帧
IP地址属于网络层的范畴,不属于数据链路层的范畴
IP地址是因特网(Internet)上的主机和路由器所使用的地址,用于标识两部分信息
- 网络编号:标识因特网上数以百万计的网络
- 主机编号:标识同一网络上不同主机(或路由器各接口)
IP地址和MAC地址在网络体系结构
IP地址在网络层首部
MAC地址在链路层首部
数据包转发过程中IP地址与MAC地址的变化情况
数据包转发过程中源IP地址和目的IP地址保持不变
数据包转发过程中源MAC地址和目的MAC地址逐个链路(或逐个网络)改变
Q:如何从IP地址找出其对应的MAC地址?
ARP高速缓存表
- 当主机B要给主机C发送数据包时,会首先在自己的ARP高速缓存表中查找主机C的IP地址所对应的MAC地址,但未找到,因此,主机B需要发送ARP请求报文,来获取主机C的MAC地址
- ARP请求报文被封装在MAC帧中发送,目的地址为广播地址,主机B发送封装有ARP请求报文的广播帧,总线上的其他主机都能收到该广播帧
- 收到ARP请求报文的主机A和主机C会把ARP请求报文交给上层的ARP进程:主机A发现所询问的IP地址不是自己的IP地址,因此不用理会;主机C的发现所询问的IP地址是自己的IP地址,需要进行响应(单播,发送IP地址和MAC地址到目的地址)
动态与静态的区别
动态:自动获取,生命周期默认为两分钟;
静态:手工设置,不同操作系统下的生命周期不同,例如系统重启后不存在或系统重启后依然有效。
ARP协议的作用范围:
ARP协议只能在一段链路或一个网络上使用,而不能跨网络使用
除ARP请求和响应外,ARP还有其他类型的报文(例如用于检查IP地址冲突的“无故ARP、免费ARP(Gratuitous
ARP)”)
ARP没有安全验证机制,存在ARP欺骗(攻击)问题
ARP表中的IP地址与MAC地址的对应关系记录,是会定期自动删除的,因为IP地址与MAC地址的对应关系不是永久性的
✨知识点十一:集线器与交换机的区别
集线器-在物理层扩展以太网
- 使用集线器的以太网在逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议,只能工作在半双工模式,收发帧不能同时进行
- 集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测(由各站的网卡检测)
- 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作
集线器HUB在物理层扩展以太网
使用集线器扩展:将多个以太网段连成更大的、多级星形结构的以太网(物理层)
优点:
- 使原来属于不同碰撞域的以太网上的计算机能够进行跨碰撞域的通信
- 扩大了以太网覆盖的地理范围
缺点:
- 碰撞域增大了,但总的吞吐量并未提高。
- 如果不同的碰撞域使用不同的数据率,那么就不能用集线器将它们互连起来
碰撞域
碰撞域
(collision domain)又称为冲突域
,是指网络中一个站点发出的帧会与其他站点发出的帧产生碰撞或冲突的那部分网络。- 碰撞域越大,发生碰撞的概率越高
以太网交换机-在数据链路层扩展以太网
交换式集线器常称为以太网交换机
(switch) 或第二层交换机 (L2 switch),强调这种交换机工作在数据链路层
以太网交换机实质上就是一个多接口的网桥
- 以太网交换机通常都有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式
- 以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞(不使用CSMA/CD协议)
- 以太网交换机一般都具有多种速率的接口,例如:10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合。
- 以太网交换机工作在数据链路层(也包括物理层),它收到后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧
- 以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
- 帧的两种转发方式:
- 存储转发(把整个数据帧
先缓存
后再进行处理) - 直通交换:采用基于硬件的交叉矩阵(交换时延非常小,但
不检查帧是否有差错
)
- 存储转发(把整个数据帧
单播:
- 使用交换机互连而成的交换式以太网上的某个主机,要给另一个主机发送单播帧,该单播帧进入交换机后,交换机会将该单播帧转发给目的主机,而不是网络中的其他各个主机
- 不碰撞(会将它们缓存起来,然后逐个转发给目的主机,不会产生碰撞)
广播:没区别
多个单播
集线器:扩大广播域,扩大碰撞域
交换机:扩大广播域 ,隔离碰撞域
广播域(broadcast domain):指这样一部分网络,其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收
知识点十二:以太网交换机的生成树协议STP
目的:提高以太网的可靠性
做法:添加冗余链路
影响:形成网络环路
- 广播风暴
大量消耗网络资源,使得网络无法正常转发其他数据帧
- 主机收到重复的广播帧
大量消耗主机资源
- 交换机的帧交换表震荡(漂移)
故,提出生成树协议STP
- 可以在增加冗余链路来提高网络可靠性的同时又避免网络环路带来的各种问题
- 不论交换机之间采用怎样的物理连接,交换机都能够自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的(无逻辑环路)
- 最终生成的树型逻辑拓扑要确保连通整个网络
- 当首次连接交换机或网络物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算
- 其要点是:不改变网络的实际拓扑,但在逻辑上则切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构,从而消除了兜圈子现象
✨知识点十三:虚拟局域网VLAN
原因:
- 在同一个广播域中,广播风暴会浪费网络资源和各主机的CPU资源
- 网络中会频繁出现广播信息
- TCP/IP
- 地址解析协议ARP(已知IP地址,找出其相应的MAC地址)
- 路由信息协议RIP(一种小型的内部路由协议)
- 动态主机配置协议DHCP(用于自动配置IP地址)
- NetBEUl:Widnows下使用的广播型协议
- IPX/SPX:Novell网络的协议栈
- Apple Talk:Apple公司的网络协议栈
- TCP/IP
方法:
- 使用路由器,成本较高
- 虚拟局域网VLAN
虚拟局域网VLAN
(Virtual Local Area Network)是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求(逻辑上的,虚拟局域网其实只是局域网给用户提供的一种服务)
实现机制
虚拟局域网VLAN技术是在交换机上实现的,需要交换机能够实现两种功能:
能够处理带有VLAN标记的帧——
IEEE 802.1 Q帧
(I Tripple E)VLAN标记的最后12比特称为
VLAN标识符VID
,它唯一地标志了以太网帧属于哪一个VLAN。VID的取值范围是0~4095(0~-1)
0和4095都不用来表示VLAN,因此用于表示VLAN的VID的有效取值范围是1~4094
- 802.1Q帧是由
交换机
来处理的,而不是用户主机来处理的- 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称“打标签”
- 当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称“去标签”
- 交换机的各端口可以支持不同的端口类型,不同端口类型的端口对帧的处理方式有所不同
- Access端口一般用于连接用户计算机
- Access端口只能属于一个VLAN
- Access端口的PVID值与端口所属VLAN的ID相同(默认为1)
Access端口接收处理方法
一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等
Access端口发送处理方法
若帧中的VID与端口的PVID相等,则“去标签“并转发该帧;否则不转发
- Trunk端口一般用于交换机之间或交换机与路由器之间的互连
- Trunk端口可以属于多个VLAN用户可以设置
- Trunk端口的PVID值。默认情况下,Trunk端口的PVID值为1
Trunk端口发送处理方法
- 对VID等于PVID的帧,“去标签”再转发
- 对VID不等于PVID的帧,直接转发
Trunk端口接收处理方法
- 接收“未打标签”的帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等
- 直接转发
例题:
下图给出了用于交换机互连的Trunk端口的PVID值的组合,试回答以下问题
(1)主机A发送广播帧,则帧的传递过程是什么?
(2)主机C发送广播帧,则帧的传递过程是什么?
(3)从上述过程可以得出什么结论?
- Hybrid端口既可用于交换机之间或交换机与路由器之间的互连(同Trunk端口),也可用于交换机与用户计算机之间的互连(同Access端口)
- Hybrid端口可以属于多个VLAN(同Trunk端口)
- 用户可以设置Hybrid端口的PVID值。默认情况下Hybrid端口的PVID值为1(同Trunk端口)
Hybrid端口发送处理方法(与Trunk端口不同)
查看帧的VID是否在端口的“去标签”列表中
- 若存在,则“去标签”后再转发
- 若不存在,则直接转发
Hybrid端口接收处理方法(同Trunk端口)
- 接收“未打标签”的帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等
- 接收“已打标签的帧”
虚拟局域网优点
虚拟局域网(VLAN)技术具有以下主要优点:
- 改善了性能
- 简化了管理
- 降低了成本
- 改善了安全性