网络 | 05. MAC与IP地址、ARP协议、集线器与交换机、虚拟局域网

  • MAC地址是以太网的MAC子层所使用的地址,属于数据链路层
  • IP地址是TCP/IP体系结构中网际层所使用的地址,属于网际层
  • ARP协议属于TCP/IP体系结构的网际层,其作用是已知设备所分配到的IP地址,使用ARP协议可以通过该IP地址获取到该设备的MAC地址
  • 尽管IP地址和ARP协议属于网际层,但他们与MAC地址存在一定的关系,并且日常的网络应用都离不开这三个东西,因此放在一起讨论
  • 使用点对点信道的数据链路层不需要地址(一条线连接两个机器时)
  • 使用广播信道的数据链路层(一个总线连接多个主机)必须使用地址来区分各主机
  • 每个主机必须有一个唯一的标识(即数据链路层地址),从而搞清楚发送主机和接收主机是谁
  • 在每个主机发送的帧中,必须携带标识发送主机和接收主机的地址,由于这类地址是用于媒体接入控制(MAC,Media Acess Control),因此这类地址被称为MAC地址
  • MAC地址一般被固化在网卡(网络适配器)的电可擦、可编程、只读存储器EEPROM中,因此MAC地址也被称为硬件地址
  • MAC地址有时也被称为物理地址,但这并不意味着MAC地址属于网络体系结构中的物理层
  • 一般情况下,用户主机会包含两个网络适配器:有线局域网适配器(有线网卡)和无限局域网适配器(无线网卡),每个适配器都会有一个全球唯一的MAC地址
  • 而交换机和路由器往往拥有更多的网络接口,所以会拥有更多的MAC地址
  • 综上,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
  • 由48比特构成,每8个比特为1个字节,共6个字节

  • 前三个字节是组织唯一标识符OUI,生产网络设备的厂商需要向IEEE的注册管理机构申请一个或多个

  • 后三个字节是获得OUI的厂商自由分配的

  • 这种地址标识符称为扩展的唯一标识符EUI,对于48比特的MAC地址,可称为EUI-48

  • MAC的标准表示方法,是将每4个比特写成一个十六进制的字符,共12个字符;将每两个字符为一组,共6组,组之间用短线或冒号连接 /image/image-20250710011816-xd3gc33.png

    • 可以根据MAC地址,查找到该设备的厂商信息,例如华为的组织标识为30-FB-B8​,小米为A4-45-19

      /image/image-20250710011853-9lp0w61.png
      /image/image-20250710011907-qaj8a9b.png

    • 第一个字节的b0和b1为有特殊的用途,根据标识其可以分为四类,每类有70多亿个

      • b0为0时是单播,b0为1时是多播地址;在十六进制下,第二个数字如果是奇数则为多播地址(13579BDF)
      • /image/image-20250710012220-8cffc4n.png
  • 每个人可以拥有几个全球管理的单播MAC地址?

    • 电脑上的以太网接口、wifi接口、蓝牙接口都分配有全球单播的MAC地址
    • 而每台交换机和路由器都拥有多个网络接口,就拥有多个全球单播的MAC地址
    • 对于使用EUI-48空间的应用程序,IEEE的目标寿命为100年(直到2080年),但是鼓励采用EUI-64作为替代
  • 据斯诺登报道,美国安全局有一套通过监视电子设备MAC地址,来跟踪城市中每个人的行动
  • 因此,苹果率先在iOS设备扫描网络时,采用随机MAC地址技术
  • 随后,Win10、安卓6.0、内核版本3.18的Linux也陆续提供随机MAC地址技术
  • IP地址是因特网上的主机和路由器所使用的地址,用于表示两部分信息

    • 网络编号:标识因特网上数以百万计的网络
    • 主机编号:标识同一网络上不通主机(或路由器各接口)
    • 同一个网络上的各主机和路由器上的各接口IP地址的网络号应该是相同的,而主机号部分则应该各不相同
    • 因特网中不同网络的网络编号必须各不相同
    • 至于哪些数字标识网络,哪些数字标识主机,其在不同场景下不同
    • MAC地址不具备区分不同网络的功能
      • 如果只是一个单独的网络,不接入因特网,可以只使用MAC地址(这不是一般用户的应用方式)
      • 如果主机所在的网络需要接入因特网,则IP地址和MAC地址都需要使用
  • 从网络整体结构看IP地址和MAC地址

    • /image/image-20250710225235-8h1jz98.png
    • /image/image-20250710225512-jzpm7a5.png
    • 数据包转发过程中,源IP地址和目的IP地址保持不变
    • 数据包转发过程中,源MAC地址和目的MAC地址逐个链路(逐个网络)改变
  • 习题

    • /image/image-20250710225716-dxwoufh.png
      • D
  • 问题引入

    /image/image-20250710230043-8k99h5l.png
    • 每台主机都会有一个ARP高速缓存表,在要发送消息时,会现在自己的缓存表中查找相应主机的MAC地址
      • 如果没有找到,则需要发送ARP请求报文来获取该MAC地址

        /image/image-20250710230636-tua8bpi.png
      • 主机收到ARP请求后,如果与自己的MAC地址不匹配,则丢弃该广播信息;如果确认是自己的MAC地址后,发送ARP响应报文,该报文为单播帧,包含自己的IP地址和MAC地址

        /image/image-20250710230726-1n5gdou.png
      • 源主机收到ARP响应报文后,将该信息记录到自己的ARP高速缓存表中;这个时候,重新加载了的缓存表中就有对应的MAC地址了,可以用户网络通信了

  • ARP高速缓存表中都有两种类型,

    • 动态类型是指,记录是主机自己主动获取的,其生命周期默认为2分钟(当生命周期结束时,该记录将自动删除)。因为MAC地址和IP地址的关系并不是永久性的,例如当主机的网卡坏了,更换新的网卡后,主机的IP地址并没有变化,但MAC地址改变了
    • 静态类型是由网络维护人员手动配置的,不同操作系统下其生命周期不同(例如系统重启后不存在或系统重启后依然有效)
  • ARP协议只能在一段链路或一个网络中使用,不能跨网络使用,如下的网络结构中,主机H1不能通过ARP协议获取到H2的IP地址

    /image/image-20250711125234-bnhvet1.png
  • 除了ARP请求和响应报文外,ARP协议还存在其他类型的报文,如用于检查IP地址冲突的“无故ARP、免费ARP”等

  • ARP协议没有安全验证机制,存在ARP欺骗(攻击)问题

  • 早期的总线型以太网使用集线器
    • 最早使用粗同轴电缆作为传输媒体,后来演进到使用价格相对便宜的细同轴电缆
    • 当初认为,这种链接方法既简单又可靠
      • 那个年代认为,有源器件不可靠,无源的电缆线才是可靠的
      • 但实际上,使用无源电缆和大量机械接头的总线型以太网,并不像想象中那么可靠
  • 后来,以太网发展出了一种,使用大规模集成电路,可靠性非常高的设备,叫做集线器
    • 且使用更便宜、更灵活的双绞线作为传输媒体

    • 使用双绞线和集线器hub的星形以太网

    • 虽然物理拓扑是星型的,但逻辑上仍是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议

    • 集线器只在物理层工作,它的每个接口仅简单地转发比特,不进行碰撞检测(该任务由各站网卡负责)(分析问题时,可以将集线器简单看作是一条总线)

    • 集线器一般都有少量的容错能力和网络管理功能,例如,若网络中某个网卡出现了故障,不停地发送帧时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作

    • 使用集线器可以对以太网进行扩展(使用集线器在物理层扩展以太网)

  • 在集线器互连而成的共享总线式以太网的某个主机,要给另一个主机发送单播帧时,该单播帧会通过共享总线传输到总线上的各个主机
  • 使用交换机互连而成的交换式以太网上的某个主机,要给另一个主机发送单播帧时,该单播帧进入交换机后,交换机会将该单播帧转发给目的主机,而不是网络中的其他各个主机(假设忽略ARP过程、且交换机的帧交换表已经配置好了)
  • 以太网交换机通常都有多个接口,每个接口都可以直接与一台主机或另一个以太网交换机相连,一般都工作在全双工方式(发送和接收同时进行)
  • 集线器下的网络,各主机需要共享总线的,需要使用CSMA/CD协议来协调各主机争用总线,只能工作在半双工模式(收发不能同时进行)
  • 以太网交换机具有并行性,能同时链接多对接口,使多对主机能同时通信,而无碰撞(不使用CSMA/CD协议)
  • 以太网交换机一般都具有多种速率的接口,例如10Mb/s、100Mb/s、1Gb/s、10Gb/s接口的多种组合
  • 以太网交换机工作在数据链路层(也包括物理层),它收到帧后,在帧交换表中查找目的MAC地址所对应的接口号,然后通过在接口转发该帧
  • 以太网交换机是一种即插即用的设备,其内部的帧交换表时通过自学习算法,自动、逐步建立起来的
  • 帧有两种转发方式
    • 存储转发
    • 直通交换
      • 不必缓存后再处理,而是在帧接收的同时,就立即按目的MAC地址,决定帧的转发接口,因而提高了帧的转发速率
      • 采用基于硬件的交叉矩阵(交换时延非常小,但不检查帧是都有差错)
  • 主机发送帧的情况:不同机器在相同的广播域,使用起来没有区别

    /image/image-20250713234715-0fssvap.png /image/image-20250713234752-47nhl97.png

  • 多台主机同时发送帧时

    • 集线器下会发生碰撞,遭遇碰撞的帧也会传播到总线上的各主机
    • 但在交换机的交换式以太网中,交换机收到多个帧时,会将他们缓存起来,然后根据目的地址,逐个转发给目的主机,不会产生碰撞
  • 扩展以太网的区别

    • /image/image-20250713235202-yeg85d0.png
    • 而对于广播帧,效果上看没有区别
    • 对使用集线器的以太网,各主机都属于同一个广播域,其在扩展后,参与竞争总线的主机变多了
    • 即使是,仅使用集线器扩展的以太网,不仅仅扩展了广播域,也扩展了碰撞域(冲突域)
    • /image/image-20250713235449-7rrbpve.png
  • 小结

    • /image/image-20250713235504-2l8ux6b.png
    • 交换机并不比集线器贵,但拥有更好的特性,因而集线器目前已经在市场上所淘汰
  • 市面上有包含部分网络层功能的交换机,称为三层交换机,其工作在数据链路层(也包括物理层)

  • 以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发该帧

  • 以太网交换机是一种即插即用的设备,刚上电启动时,内部的帧交换表时空的;随着网络中各主机间的通信,以太网交换机通过自学习算法,自动逐渐建立起来帧交换表

    • /image/image-20250714000424-fkfaxc8.png
    • 如图所示,每个交换机通过接口分别连接了3台主机
    • 为了简单起见,各主机中网卡上固化的MAC地址,仅用一个大写字母表示,各主机互不相同
    • 为了将重点放在以太网交换机自学习和转发帧的流程上,假设各主机知道网络中其他各主机的MAC地址(无需进行ARP)
    • 当A给B发送帧时,帧通过接口1进入交换器1后,交换机1首先执行登记操作,将该帧重点源MAC地址A和接口1记录到帧交换表中,该操作称为自学习
    • 随后对该帧进行转发,该帧的目的MAC地址为B,则在帧交换表中查找地址B,找不到时,则对该帧进行盲目地转发(盲目泛洪) ,即向除该帧进入交换机的接口外的全部接口转发该帧;在该阶段,交换机的帧交换表并不完善,其只能盲目地进行转发
    • 主机B收到该帧后,根据该帧的目的MAC地址B确认该帧是发送给自己的帧,于是接受该帧;主机C确认其不是发送给自己的,就丢弃该帧;
    • 该帧通过交换机1的接口4发出,到交换机2的接口2,交换机2接收该帧后,首先登记该帧的源MAC地址A和接口号2到帧交换表中,随后进行转发,在帧交换表中无法找到目的MAC地址B后,就进行盲目转发,主机DEF都会收到该帧,并在验证后丢弃该帧
    • 若现在B要给A发送帧,其将帧发送到交换机1中时,首先登记源MAC地址B和接口3到帧交换表,随后在帧交换表中查找目的MAC地址A,在已知其接口的情况下,则进行明确的转发
    • 若主机E要对A发送帧,其首先发送到交换机2,登记E的相关信息后,可以在帧交换表中找到主机A的MAC地址,按照其对应的接口号2,明确转发该帧给交换机1;交换机1登记E的相关信息后,查找A的接口,明确转发
  • 以太网交换器丢失帧的情况

    • 给接口1再接一个主机G(省略了集线器没有画出)
    • /image/image-20250714002039-75lq2kl.png
    • 现在,主机G给主机A发送帧,该帧通过总线进行传输,主机A和交换机1的接口1都可以收到;主机A收到后确认、接收该帧;
    • 交换机1收到该帧后,登记源MAC地址G和接口1的相关信息,随后对该帧进行转发,该帧的目的MAC地址是A,在帧交换表中查到的接口号为1,但是该帧正是从接口1进入交换机1的,交换机不会再从该接口将该帧转发出去(因为没有必要),于是丢弃该帧;交换机2不会收到该帧
  • 当网络中各主机都发送过帧后,网络中的各交换机就可以学习到各主机的MAC地址,以及他们与自己各接口的对应关系

  • 值得注意的是,帧交换表中的每条记录,都有自己的有效时间,到期自动删除(因为该关系不一定是永久性的)

  • 习题

  • 如何提高以太网的可靠性?

    /image/image-20250714003216-rr8awfc.png /image/image-20250714003216-rr8awfc.png

    • 可以通过添加冗余链路的方法,来提高以太网的可靠性
      • 如在B和C之间添加一个冗余链路后,哪怕一个链路出现故障,整个网络仍然是通的

        /image/image-20250714003339-3st6fxt.png
      • 但是,冗余链路也会带来一些负面效应,形成网络环路,而网络环路会带来以下问题

        • /image/image-20250714003854-f8cz71g.png
        • 相同的广播帧会在各交换机之间反复转发,分别按照顺时针和逆时针方向同时兜圈,这就是所谓的广播风波
        • 广播风暴:大量消耗网络资源,使得网络无法正常转发其他数据帧
        • 主机收到重复的广播帧后也会消耗大量的主机资源
        • 交换机的帧交换表震荡(漂移),如H1是来自于1,但顺时针来的广播风暴会将其改为2,逆时针的风暴又会将其改为3
  • 为了可以在增加冗余链路来提高网络可靠性的同时,避免网络环路带来的各种问题,以太网交换机使用生成树协议STP(Spanning Tree Protocol)来解决该问题

    • 不论交换机之间采用怎么的物理连接,交换机都能够自动计算并构建出一个逻辑上没有环路的网络,其拓扑结构必须是树形的(无逻辑环路)

    • 举例

      /image/image-20250714004357-8yx1xei.png /image/image-20250714004420-rdt9wjx.png

      • 当机器如图进行物理连接后,就会形成多个环路
      • 实际上,各交换机之间,按照生成树协议中规定的生成树算法,交互一些参数后,每个交换机就可以判断出自己应该阻塞自己的哪些接口,如右图所示,形成没有环路的网络
      • 当然,最后生成的树形拓扑结构必须要确保能够连通整个网络
      • 当首次连接交换机,或网络的物理拓扑发生变化时(有可能是人为改变或故障),交换机都将进行生成树的重新计算
      • 生成树算法STA

  • 虚拟局域网VLAN概述

    • 使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域

    • 随着交换式以太网规模的扩大,广播域也相应扩大

    • 巨大的广播域会带来很多弊端,如

      • 广播风暴

        • 如某个主机需要给另一个主机发送数据帧,但自己的ARP缓存表中无法查到目的主机的MAC地址,于是首先需要发送ARP广播请求,来获得目的主机的MAC地址

        • 该ARP广播请求会传遍整个网络,网络中的所有主机都可以收到该广播帧,形成广播风波,浪得网络资源和各主机的CPU资源

        • 因而,除非不得以,网络中的主机应尽量不使用广播;但实际上,网络中会频繁出现广播信息

          • /image/image-20250714005559-q54pmz9.png
      • 难以管理和维护

      • 潜在的安全问题

    • 如何分隔巨大的广播域?

      • 使用路由器可以隔离广播域

        • /image/image-20250714005658-t2nfkhy.png
        • 路由器工作在网络结构的第三层(网络层)
        • 由于路由器默认情况下,不对广播数据包进行转发,从而进行隔离
        • 但路由器的成本较高,在局域网内部全部使用路由器来隔离广播域时不现实的
        • 由此,虚拟局域网技术应运而生
    • 虚拟局域网VLAN(Virtual Local Area Network)是一种将局域网内的设备分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求

      • /image/image-20250714010103-p3726in.png
      • 相同虚拟网络下的设备可以广播通信,不同的虚拟局域网下设备不可以广播通信
  • VLAN的实现机制

    • VLAN技术可以在交换机上进行实现,但需要交换机具备如下两个功能

      • 识别带有VLAN表示的帧 IEEE 802.1Q帧

        • 也称为Dot One Q帧,其是对以太网MAC帧格式进行了扩展,插入了4字节的VLAN标记

        • /image/image-20250714010422-1438xgv.png

        • VLAN标记的最后12比特称为VLAN表示VID,它唯一标志了以太网帧属于哪一个VLAN

          • VID的取值范围是0-4095($2^{12}-1$)

          • 0和4095都不用来表示VLAN,因此VID的有效取值范围是1-4094

          • 802.1Q帧是**由交换机来处理**的,而不是用户主机

            • 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记,转变为802.1Q帧,简称“打标签”
            • 当交换机转发802.1Q帧时,可能会删除其4字节的VLAN标记,转变为普通的以太网帧,简称“去标签”
        • VLAN帧中的其他内容,对我们理解VLAN划分机制没有什么帮助,这里不在赘述

      • 交换机的各端口可以支持不同的端口类型(不同类型的端口,对帧的处理方式不同)

        • 交换机端口类型有以下三种:Access、Trunk、Hybrid(思科交换机没有该端口)

        • 交换机各端口的缺省VLAN ID

          • 在思科交换机上称为本征VLAN(Native VLAN);当用户没有配置VLAN时,都默认为VLAN1,即所有端口的本征VLAN都是VLAN1
          • 而在华为交换机上将其称为“端口VLAN ID”(Port VLAN ID),简称为PVID
          • 交换机的每个端口,有且仅有1各PVID
        • Access端口

          • Access端口一般用于连接用户计算机,只能属于一个VLAN
          • Access端口的PVID值与端口所属的VLAN的ID相同(默认为1)
          • 交换机上电后,默认的端口类型为Access
          • Access端口接收处理帧的方法为:一般只接受未打标签的普通以太网MAC帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节的VLAN标记字段,字段中VID取值与端口的PVID取值相同
          • Access端口发送处理方法:若帧中的VID与端口的PVID相等,则去标签并转发该帧,否则不转发
          • /image/image-20250715093258-bb1528d.png
          • /image/image-20250715093402-al3p46t.png
        • Trunk端口

          • 一般用于交换机与交换机之间、交换机与路由器之间的互联,可以属于多个VLAN

          • 用户可以设置Trunk端口的PVID值,默认情况下为1

          • Trunk端口发送处理方法为:

            • 对VID等于PVID的帧,去标签再转发
            • 对VID不等于PVID的帧,直接转发
          • Trunk端口接收处理方法为:接收到未打标签的帧后,根据接收帧端口的PVID给帧打标签,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相同

          • /image/image-20250715094059-vubicxt.png

          • /image/image-20250715094212-fha0g95.png

        • 练习

          • /image/image-20250715094532-nke8jz7.png
        • Hybrid(华为特有的)

          • 其既可以用于与用户主机的互联,也可以用于与交换机/路由器之间的互联,其可以属于多个VLAN

          • 用户可以设置Hybrid端口的PVID值,默认情况下值为1

          • Hybrid端口发送处理方法:

            • 查看帧的VID是否在端口的“去标签”列表中

              • 若存在则去标签后转发
              • 若不存在,则直接转发
          • Hybrid端口接收处理方法(与Trunk相同)

            • 接收未打标签的帧时,根据端口的PVID给帧打标签后转发给对应端口
            • 接收已打标签的帧时,则直接转发
          • 应用举例

            • /image/image-20250715095150-zo7cv5x.png