尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

以太网:局域网如何用 MAC 与交换机转发帧

以太网:局域网如何用 MAC 与交换机转发帧 专栏《计算机网络基础》· 第五篇·链路 / 物理层承接《链路层导论帧如何交给邻站》讲解维度概念 → 原理 → 应用 → 问题定位读完你能讲清以太网帧与 MAC 学习解释交换机为何不是「路由器」用ethtool/ 双工与环路思路排有线故障导读插上网线之后真正跑的是「帧」有线办公、机房机柜、家用光猫下挂的小交换机——绝大多数时候局域网的事实标准仍是以太网Ethernet。网络层已经决定从eth0发给下一跳192.168.1.1。网卡驱动真正推到线上的却是带目的 MAC / 源 MAC的以太网帧。中间那台八口小盒子、机柜里那排接入交换机主业不是查 IP 路由表而是靠MAC 地址表决定从哪个口送出。很多人第一次抓包会愣一下Wireshark 最外层明明写着 Ethernet里面才套着 IP。其实这很正常——你在办公网里「通不通」经常先卡在这一层链路有没有 up、口有没有学到 MAC、广播有没有被风暴淹没。主机A 交换机 主机B / 网关 │ 帧(目的B的MAC) │ │ │────────────────►│ 查MAC表 │ │ │──────────────────────►│本篇把帧格式、学习老化、洪泛、双工协商和环路直觉摊开并给几组本机能做的小实验。VLAN、无线另章展开这里先把「有线二层」摸熟。一、概念以太网在认什么、管什么1.1 它解决的问题以太网以帧为单位、用MAC标识邻站、在局域网内交付的链路层技术族。速率从百兆到 100G 都有介质可以是铜缆、光纤甚至虚拟交换机上的 veth——骨架仍是「帧 MAC 常常还有交换」。它不管「跨很多个网络怎么选路」那是 IP 的事。它也不保证可靠投递FCS 错了就丢重传多半靠上层。日常排障时把它当成同一广播域里邻站之间怎么把比特收成一帧、再交给对的人。1.2 它管什么 / 默认不管什么它管默认不管本段链路的邻站寻址MAC跨网段选路那是路由成帧、类型字段、FCS 校验「一定到达」、保序、重传交换机内的学习 / 转发 / 洪泛加密那是 TLS / MACsec 等另话题速率、双工、链路是否 up端口号、进程监听传输层 / 应用经典边界再念一遍Link detected: no → 先查线、口、光模块、对端供电 同网段 ARP 全 FAILED → 可能 VLAN / 口隔离 / 对端关机下一章 ping 通但 443 不通 → 多半不是以太网本身的锅1.3 MAC邻站门牌不是「全世界唯一身份证」常见 48 位写成aa:bb:cc:dd:ee:ff。前半段常能看出厂商 OUI后半段区分设备——但排障时别迷信「绝对唯一」克隆、虚拟化、容器、高可用漂移都会改写或漂移 MAC。记住三件事跨路由器之后每一跳都会换一层链路封装帧上的目的 MAC 是「当前这一跳的邻站」不是远端服务器的 MAC交换机主要靠源 MAC 学习、目的 MAC 转发它一般不拆开帮你改 IPff:ff:ff:ff:ff:ff是广播——同广播域里人人都该听见能不能处理是另一回事1.4 Ethernet II 帧你天天在抓的那层信封现网最常见的是Ethernet IIDIX格式。直觉版目的MAC(6) | 源MAC(6) | EtherType(2) | 载荷 | FCS(4)线上还会有前导码Preamble/ SFD 帮着对齐比特流抓包工具通常从目的 MAC 开始给你看。字段人话字段你要知道的目的 MAC这一跳交给谁全 F 为广播组播有特定范围源 MAC谁发的——交换机用它「学习这人在哪个口」EtherType里面是啥0x0800IPv40x86DDIPv60x0806ARP…载荷常见承载 IP / ARP 等长度受 MTU 约束FCS帧校验序列错了接收侧通常直接丢上层可能表现为偶发重传还有一套经典 802.3 LLC/SNAP 的故事长度字段 vs EtherType 的判别现代 IP 网络里你更常撞到 Ethernet II。抓包时最外层「Ethernet」就是这份信封-e打开链路层地址后很多「同网段玄学」会突然变清楚。最小帧、最大帧有历史包袱早期还要给 CSMA/CD 留槽时间。今天全双工交换占主流你更常关心的是载荷默认按 1500 字节 IP MTU 来设计机房若开巨型帧两端与路径都要对齐——这和隧道章里的 MTU 故事是亲戚。常见Ethernet 载荷 ≤ 1500 → 对应 IP MTU 1500 巨型帧jumbo载荷可到 9000 量级实现各异 两端一个开一个不开 → 大包怪、小包正常1.5 单播 / 组播 / 广播类型目的 MAC 特征典型用途单播具体主机 MAC普通点到点通信广播ff:ff:ff:ff:ff:ffARP 请求、部分发现组播特定范围最低位等特征发现协议、部分流媒体广播会扩散到广播域——在没划 VLAN 的朴素交换网里往往就是「这些口串在一起的那片」。同域里 ARP、DHCP、误接环路都会让交换机与主机一起加班。下一章会看到ARP 请求正是靠广播「喊一嗓子」的。1.6 交换机 vs 路由器边界要清二层交换机路由器 / 三层设备主要看MAC 地址表IP / 路由表典型动作同网段同广播域内转发帧跨网段选下一跳改不改 IP 头一般不改TTL 等会变环路风险二层环 → 风暴 / MAC 抖动路由环 → TTL 耗尽家用「路由器」盒子里往往路由器 交换机 Wi‑Fi AP焊在一起。后面四个 LAN 口彼此像小交换机WAN 口才更像路由边界。排障时要问清楚坏的是交换口 / 链路协商还是路由 / NAT / Wi‑Fi。有些盒子系统设置里还能看到「AP 隔离」「访客网络」——那是在二层或策略上把口切开表现会像「都连着同一个 SSID / 同一台盒子却互 ping 不通」。二、原理学习、洪泛、环路与协商2.1 MAC 学习从源地址记住「人在哪个口」交换机并不预知全世界的 MAC。它靠偷看进来的帧口1 收到帧源MACAA → 表项AA → 口1 口3 收到帧源MACCC → 表项CC → 口3人话版谁从哪个口说话就把「人名MAC→ 门口编号」记下来。下次有帧要找 AA就不用满屋子喊直接从口 1 送出去。表项有老化时间不同设备默认从几十秒到几分钟不等人不说话久了条目会忘——再出现时重新学。主机休眠、笔记本合盖、虚拟机暂停都可能让表项过期醒来后第一阵流量里你会短暂看到更多洪泛直到表重新填满。学习还会被「异常」打脸同一 MAC 突然从另一个口进来表项会迁移到新口。正常场景包括笔记本换了墙上的口、虚拟机漂移异常场景包括环路导致 MAC 在多口之间乱跳——后面环路一节再展开。2.2 转发已知单播、未知单播、广播目的 MAC 在表里 → 从对应口送出已知单播 目的 MAC 不在表里 → 向除来源口外的端口洪泛未知单播 flood 目的是广播 / 部分组播 → 在广播域内扩散受 VLAN 等限制「未知单播洪泛」是很多人对交换机的第一误解以为交换机会像路由器一样「查不到就丢」。二层默认更像不认识这个人先问问整层楼——除了刚才说话那扇门。所以刚清空 MAC 表、或大量主机同时上线时交换机会更「吵」。表学满之后单播流量才安静下来。广播本身无法靠「学目的 MAC」消掉——广播的目的就是让域内都听见。2.3 为什么交换机「不是路由器」——用一次转发对比同一台接入交换机上主机 A 要访问同网段主机 B1. A 已通过 ARP 知道 B 的 MAC下一章 2. A 发出以太网帧目的B的MAC源A的MAC里面是 IP 包 3. 交换机看目的 MAC在表 → 从 B 所在口送出 4. IP 头里的源/目的 IP 全程不变TTL 也不因「过交换机」而减若 B 在另一个网段帧的目的 MAC 往往是网关的 MAC交换机只负责把帧送到网关口网关再改链路封装、查路由往外扔。把这两步混在一个脑模型里就会出现「交换机上能学到外网服务器 MAC」这种幻觉——学不到也不该学到。2.4 环路与 STP 直觉广播如何把网打爆早期以太网共享介质靠 CSMA/CD 听信道今天全双工点到点链路占主流冲突域被切得很碎。但二层环路并没有退休——两台交换机之间随手插两根线又没有任何环路保护时广播帧被反复复制 → 广播风暴 未知单播也可能被放大 MAC 表项在不同口之间抖动 → 闪断、极慢、CPU 打满有一次机房巡检两台接入之间多插了一根「备份」网线又没开环路防护监控大盘先是接口流量直线起飞再是一整层楼的电话开始响。看起来像遭受攻击其实是帧在环上滚雪球。园区网常用STP / RSTP / MSTP一类生成树在逻辑上堵住冗余边需要时再切换。数据中心有更多现代方案本专栏不展开协议细节。你只要先建立排障指纹整片广播域同时炸、交换机 CPU 飙高、同一 MAC 在多口乱跳——先怀疑环路再怀疑「是不是业务发布把流量打爆了」。生成树的直觉不是「让网络变快」而是「有冗余拓扑时先保证不要自己咬自己」。口状态若长期卡在 listening / blocking 一类不同厂商显示名不同也可能表现为「线插着却不通」——这时别只盯着 IP。2.5 速率与双工自协商以及那次「一边强制一边自动」链路两端要谈妥两件大事项目含义Speed100M / 1G / 10G…Duplex全双工 / 半双工Auto-negotiation是否自动谈上述参数现代设备默认自协商多数时候插上就能 work。坑在「有人好心强制」有一次两端一边把电口强制成100M full另一边保持自动。链路灯还是绿的ping小包偶发能通大文件传输却错包狂涨、速度像回到拨号时代。查了半天才发现是经典双工不匹配一端以为全双工一端实际落到半双工碰撞 / 错误计数在悄悄报警。ethtool eth0 # 关注Speed / Duplex / Auto-negotiation / Link detected示意输出健康千兆口Settings for eth0: ... Speed: 1000Mb/s Duplex: Full Auto-negotiation: on ... Link detected: yes若你看见Speed: 100Mb/s却预期是千兆先查线缆品类有些线只能跑到 100M、水晶头、口脏污、对端是否限速再查是否有人写了强制速率。2.6 FCS、错包与「慢」的物理味道FCS 不对的帧网卡 / 交换机通常直接丢掉。你在ip -s link或ethtool -S里看到的rx errors、frame、crc、collisions名称因驱动而异往上爬时常见根因包括双工不匹配 线缆质量差 / 过长 / 干扰 光模块不匹配、光衰过大 网卡或交换口硬件故障 异常巨型帧 / MTU 不一致表现也可能是丢大包链路显示 up 不等于「这一跳很干净」。有线故障里「极慢、偶断、重传多」常常比「彻底 link down」更磨人——后者至少灯灭了前者还得盯计数器。2.7 巨型帧与 MTU和网络层交界以太网载荷默认常按1500字节 IP MTU。机房存储、部分 HPC / 东西向流量会开jumbo frame把载荷抬到 9000 一类量级具体以设备为准。要求很朴素、却容易忘发送端、接收端、中间交换机路径 对巨型帧的支持与配置要一致不一致时的症状像隧道章小包正常大包失败或极慢有时只在某一跳开始丢。云上的「虚拟以太网」未必把宿主机巨型帧能力完整暴露给你——别假设公有云弹性网卡默认 9000。三、应用从家里到机房到云3.1 家用光猫、小交换机、随手换口光猫/路由器 LAN 口 → 小交换机 → 多台电脑 / NAS / 电视盒子你换网线、换口本质是换交换端口IP 可能仍是 DHCP 租约那一个但链路协商会重来交换机要重新学习你的 MAC。家里若串了两台傻瓜交换机又绕成环一样能风暴——廉价设备往往没有靠谱的环路保护。3.2 园区 / 公司接入电脑 → 接入交换机 → 汇聚 → 核心 → 出口路由器口上常绑VLAN、端口安全、802.1X、DHCP Snooping 一类能力。「插上却上不了网」不一定是 IP 配错也可能是口在 guest VLAN、没通过认证、MAC 数超限被打到隔离 VLAN。这时ethtool可能显示 link up邻居表却一直空——别只在主机上改地址问问网管这个口允许什么。3.3 数据中心与服务器双上行服务器双上行、TOR 交换机、聚合链路bonding / LAG……细节繁多但排障仍常从这几行开始光模块是否亮、对端是否 up ethtool 速率 / 双工是否预期 RX/TX errors、FCS、drop 是否在涨 聚合口是否一边 down 一边 up 导致哈希倾斜「业务机看着 CPU 不高却打不满带宽」有时是单队列 / 单流哈希撞到一根成员链路上——那是性能话题的入口本篇先要求你能证明链路层有没有在丢、有没有在半速跑。3.4 云上的「虚拟以太网」云主机的eth0后面往往是虚拟交换机 覆盖网络。你仍可用ip link ethtool eth0 # 视虚拟化实现信息可能简化甚至很少安全组 / 网络 ACL 是另一层过滤「虚拟网卡 up 但业务不通」要同时想策略。虚拟场景里广播、混杂模式、MAC 反欺骗规则也可能和物理机房不一样——但MAC 学习 / 洪泛的基本剧情仍在只是演员换成了 vSwitch。3.5 和下一章的衔接帧发出去之前还缺一块拼图主机已经知道下一跳 IP还要知道下一跳 MAC才会把目的 MAC 填进帧头。这块翻译工作是 ARPIPv6 侧常是 ND。以太网保证「有帧、有交换」ARP 保证「帧上的门牌填得对」。同网段不通时两章要连着看。四、问题定位有线链路怎么查4.1 故障速查现象以太网侧常见根因先做什么完全不通灯不亮 /NO-CARRIER线、口、供电、光模块、对端关机换线换口ip link看 LOWER_UPLink up 但极慢、错包涨双工不匹配、线劣、干扰、坏口ethtool盯rx/tx errors速率只有 100M预期千兆线序/线材、强制速率、口能力查协商与线缆对齐两端配置同交换机部分主机互访失败VLAN / 口隔离 / 风暴边缘对照口配置抓广播是否异常整片网同时卡死、交换机 CPU 高二层环路、广播风暴找环、看 MAC 抖动、临时拆冗余线大包失败、小包正常MTU / 巨型帧不一致两端与中间路径对齐 MTUping 通业务不通多半不是二层主因转端口 / 防火墙 / 应用4.2 决策树有线「不通 / 极慢」 │ ├─ Link detected: no / NO-CARRIER │ → 换线、换口、查对端、查光衰/模块 │ ├─ Speed / Duplex 与预期不符或一端强制一端自动 │ → 统一自协商或统一强制避免混用 │ ├─ ip -s link / ethtool -S 错包、碰撞持续上涨 │ → 双工、线缆、干扰、坏网卡/坏口 │ ├─ 同网段 ARP 失败 / 邻居 FAILED │ → 下一章同时怀疑 VLAN、口隔离、对端没上线 │ ├─ 整片广播域同时炸、MAC 多口乱跳 │ → 环路 / 风暴先物理拆环再谈业务 │ └─ 链路干净、邻居也正常 → 转路由、防火墙、应用4.3 常用命令Linuxip -br link ip -s link show eth0 # RX/TX errors, dropped, overruns… ethtool eth0 ethtool -S eth0 | head -n 40 # 驱动统计字段名因卡而异持续观察错误是否增长比看一眼绝对值有用watch -n1 ip -s link show eth0 | sed -n 1,12p抓帧看 MAC 与类型sudo tcpdump -ni eth0 -e -c 20 # -e 打印链路层地址留意目的是否广播、EtherType 是否预期4.4 和「网卡中断 / 多队列」的关系 foreshadow 多队列网卡上不同队列常对应不同中断性能调优会看/proc/interrupts、RPS/XPS 一类旋钮。本专栏横切篇会再碰这里只需知道链路层之上驱动与中断决定收包效率——链路 up 且无错包仍可能被软中断或单队列卡住上限。五、动手把帧、协商和计数器摸实下面以常见 Linux /iproute2ethtool为例。接口名请换成你机器上的ip -br link查看。部分云主机 / Wi‑Fi 网卡对ethtool支持有限选有线口做更有感觉。实验 A读链路状态与协商参数ip -br link ethtool eth0在纸上填接口名__________ 状态UP / LOWER_UP__________ Speed__________ Duplex__________ Auto-negotiation__________ Link detected__________期望有线插好时Link detected: yes办公千兆口常见1000Mb/sFullAuto-negotiation: on。若NO-CARRIER或Link detected: no先别排 IP——物理/链路还没交付成功。示意$ ip -br link lo UNKNOWN 00:00:00:00:00:00 LOOPBACK,UP,LOWER_UP eth0 UP 52:54:00:ab:cd:ef BROADCAST,MULTICAST,UP,LOWER_UP实验 B盯错误计数——「安静」还是「在流血」先拍一张快照过 3060 秒再拍一次或用watchip -s link show eth0 # 记录 RX errors / dropped / overruns 与 TX 侧计数 sleep 30 ip -s link show eth0期望空闲或轻载时错误类计数基本不动。若你一边跑iperf3/ 大文件拷贝一边看见errors持续增加优先走双工与线缆方向而不是先重启业务进程。可选看驱动详细统计字段名五花八门搜索crc、frame、align、collisionethtool -S eth0 | rg -i err|crc|frame|drop|collision|fec实验 C用tcpdump -e看见以太网头在授权环境、尽量选流量不多的口sudo tcpdump -ni eth0 -e -c 15示意输出字段随版本略有差异12:01:03.112233 aa:bb:cc:dd:ee:01 ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: ... 12:01:03.112401 aa:bb:cc:dd:ee:fe aa:bb:cc:dd:ee:01, ethertype ARP (0x0806), length 42: ... 12:01:03.112520 aa:bb:cc:dd:ee:01 aa:bb:cc:dd:ee:fe, ethertype IPv4 (0x0800), length 98: ...你要能指着屏幕说出谁是源 MAC、谁是目的 MAC 这一帧是广播还是单播 EtherType 是 ARP 还是 IPv4/IPv6若满屏都是ff:ff:ff:ff:ff:ff且速率异常高结合交换机 CPU / 业务是否全员遭殃把「风暴 / 环路」提到优先怀疑列表。实验 D可选对比 MTUip link show eth0 | rg mtu ping -c 2 -s 1472 -M do 192.168.1.1 # 147228≈1500地址换成你的网关 ping -c 2 -s 8000 -M do 192.168.1.1 # 若路径不支持巨型帧通常失败期望在默认 1500 路径上大ping以 DF 方式会失败或提示需要分片不要在生产随手改交换机巨型帧——这是思想实验 受控环境实验。本章小结以太网用帧在局域网交付MAC 标识邻站 交换机学源 MAC、按目的 MAC 转发未知单播则洪泛 广播域决定 ARP 等能吵多远环路可把吵闹变成灾难 速率/双工靠协商一端强制一端自动是经典慢速坑 FCS/错包计数是有线「在流血」的信号 巨型帧与 MTU 必须路径一致 先看 link 与 ethtool再怪业务
返回列表