【Linux网络】数据链路层
那么同一个子网中一个主机怎么把数据交给另一台主机其实就是局域网通信的问题这就需要数据链路层来解决这个问题在这里插入图片描述1. 认识以太网1.1 什么是以太网以太网Ethernet”代表的是一整套通信技术规范用于指导设备在局域网LAN中如何互相通信。这就像普通话是一种“语言标准”来自不同地方的人只要都说普通话就能交流。因此你可以用以太网标准组建家庭网络、公司网络甚至数据中心网络它们都是不同的“具体网络”但都遵循以太网标准。它主要规范了数据链路层如帧格式、MAC地址、链路访问控制等部分物理层内容如网线种类、接口、拓扑结构、速率等换句话说以太网 一套规则而不是一个实际存在的网络。以太网的核心工作机制CSMA/CD早期共享式以太网使用一种称为 CSMA/CD载波侦听多路访问/冲突检测 的协议来管理网络访问。其工作方式通俗来讲就是“先听后发、边发边听、冲突退避”多点接入所有设备都连接在一条共享的总线上。载波侦听任何设备在发送数据前必须先检测总线是否空闲。如果空闲才可发送如果繁忙则等待。冲突检测由于信号传播有延迟两个设备可能同时检测到空闲并发送数据导致“冲突”。设备在发送时会持续检测信道一旦发现冲突便立即停止发送。退避重传发生冲突后双方会等待一段随机的时间再重新尝试发送这有效避免了连续冲突。随着以交换机为核心的星型网络成为主流每个设备独享一条链路冲突基本被避免CSMA/CD的作用也随之减弱但其作为以太网的基础协议仍被保留。拓扑结构的演变从总线到星型以太网的物理布局拓扑经历了重要演变早期总线型拓扑所有计算机通过一根同轴电缆粗缆10Base-5或细缆10Base-2串联起来。结构简单但任一节点故障都可能影响整个网络难以排查故障。现代星型拓扑所有设备通过双绞线或光纤集中连接到一台集线器Hub 或交换机Switch 上。这大大提高了网络的可靠性。需要注意的是使用集线器的网络在逻辑上仍是一个总线网所有端口属于一个冲突域而交换机则为每个端口创建一个独立的冲突域性能更优。以太网的发展史也是其速度和介质不断升级的历史下面的表格清晰地展示了这一历程。以太网类型标准速率常用传输介质最大网段长度典型标准以太网IEEE 802.310 Mbps同轴电缆 (10Base5/2), 双绞线 (10Base-T)500米 (10Base5), 100米 (10Base-T)快速以太网IEEE 802.3u100 Mbps双绞线 (100Base-TX), 光纤 (100Base-FX)100米 (TX), 2000米 (FX多模)千兆以太网IEEE 802.3z/ab1000 Mbps双绞线 (1000Base-T), 光纤 (1000Base-LX/SX)100米 (T), 5公里 (LX单模)万兆以太网IEEE 802.3ae10 Gbps光纤40公里 (ER单模)为什么以太网能成为绝对主流与令牌环网等对比vs. 令牌环网IBM主导简单与成本以太网尤其是采用CSMA/CD和星型拓扑后设计更简单硬件实现成本更低。速度发展以太网在速度升级的道路上10M - 100M - 1000M步伐更快、更成功形成了强大的生态系统。开放性以太网标准更开放吸引了众多厂商生产兼容设备促进了激烈竞争和价格下降。而令牌环网相对封闭。最终性价比和演进能力让以太网胜出。vs. 无线LANWi-Fi它们不是取代关系而是互补关系。Wi-Fi标准802.11系列本身也借鉴了以太网的帧格式和思想。以太网的优势提供稳定、高速、低延迟、高安全的有线连接。适用于对可靠性要求高的设备如服务器、台式机、网络存储、监控摄像头等。Wi-Fi的优势提供移动性和部署便利性。适用于手机、笔记本、智能家居等移动设备。现代网络通常是 “有线以太网作骨干无线Wi-Fi作延伸” 的混合架构。1.2 以太网帧格式以太网的帧格式如下所示在这里插入图片描述前导码与帧起始定界符图中未显示但实际存在长度8字节通常不算是“帧”的正式部分但在物理层传输时必不可少。作用前7字节交替的 1 和 010101010...用于时钟同步使接收方网卡能够调整其接收时序与发送方的信号同步。最后1字节帧起始定界符10101011标志着同步序列的结束下一字节就是真正的帧开始目标MAC地址。目的MAC地址长度6字节48位。作用指明该帧的接收者。可以是一个单播地址某台具体设备的网卡、一个组播地址一组设备或广播地址FF:FF:FF:FF:FF:FF所有设备。关键交换机根据此地址决定将帧从哪个端口转发出去。源MAC地址长度6字节48位。作用指明该帧的发送者。必须是发送网卡的单播地址。接收方据此知道是谁发来的帧以便回复。类型长度2字节。作用这是Ethernet II帧的关键标识字段用于指明帧内“数据”字段中承载的上层协议是什么。常见值0x0800表示数据部分是IPv4 数据包。0x0806表示数据部分是ARP 请求/应答报文。0x86DD表示数据部分是IPv6 数据包。0x8100表示带有802.1Q VLAN 标签的帧。注意在早期的IEEE 802.3标准中这个字段被称为“长度”指后续数据字段的字节数。但Ethernet II用“类型”来区分更具灵活性。当这个值大于0x0600十进制1536时就被解释为“类型”因为数据长度不可能超过1500字节。这是两者兼容的关键。数据与填充长度46 ~ 1500 字节。这是以太网帧的有效载荷部分。最小46字节这个限制源于早期的CSMA/CD机制。为了保证冲突检测能正常工作整个帧从目的MAC到FCS必须不小于64字节1446464。如果上层传来的数据本身不足46字节链路层会自动在后面添加填充字节全0以满足长度要求。最大1500字节这是以太网的最大传输单元。如果IP包太大网络层IP协议就必须对其进行分片。内容承载着上层网络层及以上的完整协议数据单元如IP数据包。帧校验序列长度4字节32位。作用用于错误检测。发送方根据从“目的MAC地址”到“数据与填充”字段的所有内容通过CRC算法计算出一个值填入FCS字段。接收方用同样的算法重新计算如果结果与接收到的FCS不符就说明帧在传输过程中发生了比特错误该帧会被直接丢弃不会上传给上层协议。这是一个非常可靠的检错机制。如何分离报头和有效载荷分离报头和有效载荷依赖于以太网帧格式固定这一特点。接收方通过读取固定长度的报头就能确定有效载荷的起始位置。分离的关键在于报头各字段的长度是固定的接收方像拆解一个结构固定的包裹一样按顺序取出相应部分即可。如何分用“分用”是指接收方在剥离以太网报头后如何决定将有效载荷数据部分交给哪个上层协议去处理。这个过程完全依赖于报头中的 “类型”字段。如果 “类型”字段值 0x0800- 这表示数据部分是一个IP 数据报。网卡驱动程序会将有效载荷交给操作系统内核中的 IP 协议模块 处理。如果 “类型”字段值 0x0806- 这表示数据部分是一个ARP 请求/应答。有效载荷会被交给操作系统内核中的 ARP 协议模块 处理。如果 “类型”字段值 0x8035- 这表示数据部分是一个RARP 请求/应答。有效载荷会被交给 RARP 协议模块 处理。1.3 认识MTUMTU是Maximum Transmission Unit的缩写即最大传输单元。它指的是数据链路层的帧如以太网帧其数据载荷部分所能承载的上层协议数据的最大长度。核心点MTU限制的是第三层网络层数据包的大小。对于以太网这个“上层数据”通常就是 IP 数据包。计算以太网帧的MTU是1500字节这意味着一个完整的 IP数据包IP头部 IP数据部分不能超过1500字节才能被塞进一个以太网帧里发送。为什么以太网的标准MTU是1500字节这是一个历史与技术权衡的结果。早期的共享式以太网为了有效检测冲突CSMA/CD机制规定了以太网帧的长度最小为64字节最大为1518字节。从一个完整的以太网帧1518字节中减去帧首部目的MAC源MAC类型共14字节和帧尾部校验序列4字节剩下承载IP数据包的最大空间就是 1518 - 18 1500字节。这个值作为标准被RFC规定下来并沿用至今。巨型帧在高速数据中心网络中1500字节的MTU可能显得效率低下因为每个数据包的处理开销是固定的。为此出现了巨型帧技术允许MTU值大幅增加通常可达9000字节。这减少了数据包数量降低了协议处理开销提升了大块数据传输的吞吐量。但需要注意的是巨型帧尚未成为国际标准需要网络路径上的所有设备都支持并配置相同的巨型帧大小才能正常工作。MTU对IP协议的影响由于数据链路层MTU的限制对于较大的IP数据包要进行分包.将较大的IP包分成多个小包并给每个小包打上标签;每个小包IP协议头的 16位标识(id) 都是相同的;每个小包的IP协议头的3位标志字段中第2位置为0表示允许分片第3位来表示结束标记(当前是否是最后一个小包是的话置为1否则置为0);到达对端时再将这些小包会按顺序重组拼装到一起返回给传输层;一旦这些小包中任意一个小包丢失接收端的重组就会失败但是IP层不会负责重新传输数据;在这里插入图片描述在这里插入图片描述MTU对UDP协议的影响让我们回顾一下UDP协议首先UDP 协议本身非常简单它不提供分片、重传等复杂机制因此当数据大小超过路径 MTU 时其带来的影响是直接且显著的。数据分片与重组当 UDP 数据报的总长度UDP 首部 8 字节 数据超过 1472 字节在标准以太网 MTU1500 的情况下时IP 层会主动对数据报进行分片 。这个过程对 UDP 层是透明的。接收方需要在 IP 层将所有分片重组为完整的数据报后才能提交给传输层 。可靠性急剧下降分片机制极大地放大了 UDP 数据报丢失的风险。由于 IP 协议本身是无连接的、不可靠的任何一个分片在传输途中丢失或出错都会导致整个原始 UDP 数据报无法重组。接收方的 IP 层会直接丢弃所有已到达的分片这意味着整个 UDP 数据报彻底丢失 。分片越多数据报成功传输的概率呈指数级下降 。应用层的最佳实践因此在基于 UDP 的应用开发中如 DNS、DHCP、实时音视频一个非常重要的优化原则是应用程序应主动控制发送数据包的大小确保其封装成 IP 包后不超过路径 MTU。这可以避免 IP 分片从而保证数据的完整性和传输效率 。MTU对于TCP协议的影响让我们再回顾一下TCP协议与 UDP 的“被动”不同TCP 作为面向连接的可靠传输协议通过主动协商机制来规避 IP 分片。MSS 的职责TCP 引入了MSS 这一关键概念。MSS是指在TCP 报文段中数据部分的最大长度不包括 TCP 头和 IP 头 。它的核心目标正是在传输层就控制数据大小避免数据在网络层被分片 。连接建立的协商在 TCP 三次握手的过程中通信双方会在 SYN 报文和 SYN-ACK 报文的 TCP 头部的“选项”字段里告知对方自己能够接收的 MSS 值。这个值通常是基于其网络接口的 MTU 计算得出的例如标准以太网接口的典型 MSS 为 1500 - 20 - 20 1460 字节。最终双方会采用其中较小的那个 MSS 值作为本次连接的数据传输上限 。TCP 的可靠性保障即使在极少数情况下 TCP 数据仍需分片如路径 MTU 在连接过程中变小且路径 MTU 发现未生效TCP 的重传机制也能发挥作用。如果某个分片丢失导致 IP 层重组失败发送方最终会因为收不到确认而触发整个 TCP 报文段的重传从而保证数据的可靠交付 。MSS和MTU的关系在这里插入图片描述查看硬件地址和MTU在这里插入图片描述使用ifconfig命令即可查看ip地址、mac地址和MTU;2. ARP协议2.1 引入ARP协议关于MAC地址和局域网通信原理其实我们在之前的文章网络传输基本流程中就已经介绍过了在这里插入图片描述问题1主机A为什么要把数据交给主机E在局域网中数据帧是以MAC地址作为目标地址进行转发的。主机A发送数据时会根据路由表或ARP表确定下一跳设备。如果主机E在同一局域网内则直接发送如果不在同一网段则发送给默认网关如路由器由路由器负责转发。但图中主机E与主机A在同一局域网因此主机A直接将数据帧的目标MAC地址设置为MacE通过广播或单播方式发送。结论主机A把数据交给主机E是因为路由协议或ARP协议确定了主机E是目标主机且位于同一局域网内可以直接通信。问题2首先局域网是一个“碰撞域”同一时刻只能发送一个数据帧所以以太网是一个共享资源同时也是一个临界资源CSMA/CD机制设备发送数据前先监听信道是否空闲载波侦听发送过程中持续检测冲突。一旦冲突发生设备会发送一个冲突加强信号然后执行二进制指数退避算法随机等待一段时间后重发那么使用以太网的时候时间越长越好还是越短越好这里的“使用时间”可以理解为单个设备一次占用信道进行传输的持续时间。并非越长越好也非越短越好而是需要一个平衡点。时间过短的弊端如果设备占用信道的时间极短即发送的帧长度过小会导致传输效率低下。因为每个数据帧都有固定的开销如帧头、帧尾、前导码、帧间隔等。短帧使得有效数据占比降低大量信道时间被协议开销占用。更关键的是以太网帧有最小长度限制64字节这是为了确保有足够的时间进行有效的冲突检测。如果帧短于64字节可能在冲突信号返回发送方之前帧已发送完毕导致冲突无法被检测。时间过长的弊端如果某个设备长时间占用信道发送一个巨大的数据帧会导致其他设备等待时间过长网络响应性变差延迟增加。这在共享介质中对公平性和实时性应用如语音、视频是致命的。结论理想情况是让设备在一次信道占用中发送一个长度适中的帧如标准以太网MTU 1500字节对应的帧从而在传输效率和信道共享公平性之间取得最佳平衡。主机A发送数据帧越长越好还是越短越好对于单个主机发送的数据帧长度同样需要权衡。长帧的优点传输效率高。帧的固定开销如14字节帧头、4字节CRC校验等在一次传输中只产生一次。帧越长有效数据载荷如1500字节占总帧长如1518字节的比例越高效率可达96%以上。长帧的缺点增加冲突影响如果帧在发送过程中发生冲突整个长帧都需要重传浪费的信道时间更多。增加其他站点等待延迟长帧会长时间独占信道导致其他需要发送数据的站点等待影响网络实时性。缓冲区压力过长的帧可能超出接收方的缓冲区容量导致丢包。短帧的优缺点与长帧相反。短帧如64字节最小帧在冲突时损失小重传代价低且能更快地释放信道。但它的传输效率极低固定开销占比大。结论在共享式以太网中适中的帧长是最优选择。以太网标准将最大传输单元MTU定为1500字节正是这种权衡的结果——在保证较高传输效率的同时不至于因帧过长而对网络延迟和冲突代价产生过大负面影响 。如果应用数据很大会在网络层IP进行分片而不是在数据链路层使用超长帧。数据帧越多越好还是越少越好对于传输固定总量的数据帧的数量取决于帧的长度。帧数量少即使用长帧如上所述优点是效率高。缺点是会增加延迟和冲突风险。帧数量多即使用短帧优点是冲突时重传的代价小单个帧的传输延迟低。但缺点是整体效率低因为需要发送更多的帧每一帧都带来固定的协议开销。同时尝试发送的次数增加这本身就会略微提高发生冲突的概率。结论对于给定的数据总量在可能的情况下应优先选择数量较少但长度适中的标准帧而不是大量的小帧或少量巨大的帧。这能使整体吞吐量最大化。操作系统和协议栈通常会尽量封装接近MTU大小的数据包来优化性能。问题3网络层使用IP地址进行寻址但数据在数据链路层实际传输时依赖的是MAC地址物理地址。如果主机A只知道主机E的IP地址而不知道其MAC地址如何发送所以局域网通信时就需要一种局域网协议把IP地址转换为对应的MAC地址——ARP协议地址解析协议所以真正在网络物理层上流动的数据是数据帧2.2 ARP协议的作用虽然我们在这里介绍ARP协议但是需要强调ARP不是一个单纯的数据链路层的协议而是一个介于数据链路层和网络层之间的协议在这里插入图片描述和ARP协议类似的协议也有就比如ICMP协议、IGMP协议等不单纯属于网络层协议ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.在网络通讯时源主机的应用程序知道目的主机的IP地址和端口号却不知道目的主机的硬件地址;数据包首先是被网卡接收到再去处理上层协议的如果接收到的数据包的硬件地址与本机不符则直接丢弃;因此在通讯前必须获得目的主机的硬件地址;ARP协议的核心任务是完成网络层地址IP地址 到数据链路层地址MAC地址 的动态映射。由于IP地址是逻辑地址用于在网络层进行全局寻址而数据在物理网络中传输时最终依赖的是数据链路层的MAC地址来定位具体设备。ARP正是沟通这两层之间的“翻译官”。2.3 ARP数据报的格式在这里插入图片描述一个ARP数据包是嵌套在以太网帧中传输的。整个结构可以分为两大部分以太网帧头 和 ARP数据部分。以太网帧头共14字节 这是用于数据链路层传输的封装头。目的以太网地址6字节在ARP请求中此字段为广播地址FF:FF:FF:FF:FF:FF表示局域网内所有主机都会接收并处理此帧。在ARP应答中此字段为单播地址即发送ARP请求的那台主机的MAC地址。源以太网地址6字节总是填充为发送方主机的MAC地址。帧类型2字节这是一个关键字段用于告诉接收方数据部分承载的是什么协议。对于ARP协议该字段固定为 0x0806。接收方的网卡看到这个类型就会将数据交给系统的ARP协议模块处理。ARP数据部分共28字节 这是ARP协议真正的载荷包含了地址解析所需的全部信息。硬件类型2字节指明网络接口的类型。对于以太网该值固定为 1。协议类型2字节指明要映射的协议地址类型。对于IP地址该值固定为0x0800与IPv4的以太网类型相同。硬件地址长度1字节指明MAC地址的长度单位字节。对于以太网该值为 6。协议地址长度1字节指明协议地址的长度单位字节。对于IPv4该值为 4。操作码/OP2字节指明此ARP数据包的类型。最常见的有两种1代表ARP请求。2代表ARP应答。发送端以太网地址6字节发送方的MAC地址与以太网帧头中的源地址相同。发送端IP地址4字节发送方的IP地址。目的以太网地址6字节在ARP请求中此字段通常为全零00:00:00:00:00:00因为这正是要询问的信息。在ARP应答中此字段填充为接收方即被请求方的MAC地址。目的IP地址4字节想要查询的目标IP地址。2.4 ARP协议的工作流程在这里插入图片描述第一阶段ARP 请求广播触发与查询缓存触发如图所示路由器R准备发送一个IP数据包给IP地址为IPE的主机。但数据链路层传输需要MAC地址而路由器R只知道目标IPIPE不知道其MAC地址。查询ARP缓存路由器R首先会查询本地的ARP缓存表一个存储了近期IP-MAC映射关系的表。如果表中已有IPE对应的MAC地址则直接使用无需后续步骤。否则需要发起ARP请求。构造并广播ARP请求包构造请求路由器R会构造一个ARP请求数据包。这个包的核心信息是发送方IP路由器R自己的IP假设为IPX。发送方MAC路由器R自己的MAC地址。目标IP要查询的IPE。目标MAC此处填充全零00:00:00:00:00:00因为这就是要询问的内容。封装与广播将此ARP请求包封装到一个以太网帧中。该帧的目标MAC地址被设置为特殊的广播地址FF:FF:FF:FF:FF:FF。这意味着这个帧会被发送到局域网内的每一台主机主机A、B、C、D、E都会收到。在这里插入图片描述第二阶段ARP 应答单播接收与检查局域网内所有主机都会接收到这个广播帧。每台主机都会查看ARP请求包中的“目标IP”字段。主机A、B、C、D发现“目标IP”IPE与自己的IP地址不匹配于是丢弃该数据包。这正是图片中它们“无动于衷”的原因。目标主机响应主机E的IP地址就是IPE。它识别出这个请求是询问自己的于是准备响应。构造并发送ARP应答包构造应答主机E会构造一个ARP应答包。这个包包含了所请求的信息发送方IP主机E的IP地址IPE。发送方MAC主机E的MAC地址这就是路由器R想要的信息。目标IP路由器R的IP地址IPX。目标MAC路由器R的MAC地址从收到的请求包中获知。单播回应主机E将这个ARP应答包封装到一个以太网帧中并直接发送给路由器R使用路由器R的MAC地址作为目标地址而不再是广播。在这里插入图片描述最终步骤缓存与通信6.更新ARP缓存路由器R收到主机E的应答后获得了IP地址IPE对应的MAC地址。它会将这条IP- MAC的映射关系记录到自己的ARP缓存表中并设置一个有效时间例如20分钟。这样在后续一段时间内与主机E通信时就无需再次广播询问了。正常数据传输此时路由器R已经知道了主机E的MAC地址。它就可以将最初要发送的那个IP数据包内容是“你好”封装成以太网帧正确发送给主了注意使用arp -a命令可查看arp缓存表问题IP- MAC的映射关系记录到自己的ARP缓存表中是有一个时间段来记录的为什么不永久记录下来呢网络中的设备如笔记本电脑、手机可能会更换网络接口卡MAC地址随之改变、更换位置IP地址可能变化或直接离线。永久记录会导致过时、错误的映射使通信失败。永久保存所有映射关系会导致ARP缓存表无限膨胀占用大量内存并降低查询速度。问题mac帧如何经过ARP协议分离MAC帧的解封装当数据帧通过网络到达一台主机的网卡时首先在数据链路层进行处理剥离帧头和帧尾MAC帧的格式是固定的。设备会读取前14个字节包括6字节目的MAC地址、6字节源MAC地址、2字节类型字段和最后4个字节的CRC校验码。剩下的部分就是“有效载荷”。CRC校验使用CRC校验码检查数据在传输过程中是否出错。如果出错帧通常会被直接丢弃。关键决策查看类型字段这是决定“有效载荷”去向的关键。这个字段指明了有效载荷应该交给上层的哪个协议处理。如果类型字段是0x0800则表示有效载荷是一个IP数据报数据链路层会将其交给网络层的IP协议去处理。如果类型字段是0x0806这才表示有效载荷是一个ARP报文数据链路层会将其交给ARP协议处理。所以ARP协议的“分离”并不是ARP协议主动去剥离MAC帧而是数据链路层在完成本职工作后根据类型字段的指示将数据“分用”给了ARP协议。ARP协议的工作流程当数据被交到ARP协议后ARP协议会解析这个ARP报文通常是28字节固定长度 并根据报文中的操作码op字段 来采取行动ARP请求op1这是一个广播请求。当你需要与某台设备通信但不知道其MAC地址时会发送ARP请求。局域网上所有设备都会收到并处理此请求。如果你是接收方检查ARP请求报文中的目标IP地址是否与自己的IP地址匹配。如果匹配你就会将自己的MAC地址通过一个ARP应答op2 单播回复给请求方。同时你会将请求方的IP-MAC映射记录到自己的ARP缓存表中。如果你是无关主机发现目标IP与自己的IP不匹配则会丢弃这个ARP请求报文。ARP应答op2这是一个单播响应。当收到ARP应答时设备会从中获取发送方的IP地址和MAC地址并将这个映射关系缓存起来以便后续通信使用 。操作系统会维护一个ARP缓存表并设置老化时间以防止映射信息过时。所以处理任何ARP请求/应答先看操作码OPRARP协议是将目标主机的mac地址转换为IP地址相对于ARP协议是比较简单的这里提一下2.5 ARP欺骗步骤一在这里插入图片描述在攻击发生前网络处于正常、可信的状态主机A知道路由器R的IP地址ipR对应其真实的MAC地址macR。主机A的ARP缓存中存在正确条目ipR- macR。路由器R 也知道主机A的IP地址ipA对应其真实的MAC地址macA。路由器R的ARP缓存中存在正确条目ipA- macA。因此当主机A需要访问外部网络时数据包会通过正确的MAC地址macR直接发送给路由器R。步骤二在这里插入图片描述攻击者主机MMAC地址为 macM通过发送伪造的ARP报文篡改主机A和路由器R的ARP缓存。步骤一污染主机A的ARP缓存攻击行为主机M向主机A大量发送伪造的ARP应答包并宣称“我是IP地址 ipR路由器我的MAC地址是 macM”。原理由于ARP协议设计上无身份验证机制主机会默认信任收到的ARP应答A无法辨别这个应答是来自真正的路由器还是攻击者。结果主机A更新了自己的ARP缓存将路由器R的IP地址ipR错误地映射到了攻击者M的MAC地址macM。现在主机A错误地认为ipR- macM。步骤二污染路由器R的ARP缓存攻击行为同时主机M向路由器R大量发送伪造的ARP应答包并宣称“我是IP地址 ipA主机A我的MAC地址是 macM”。结果路由器R也更新了自己的ARP缓存将主机A的IP地址ipA错误地映射到了攻击者M的MAC地址macM。路由器R错误地认为ipA- macM。至此ARP欺骗完成主机M成功将自己“插入”了主机A与路由器R及外部网络的通信路径中。步骤三在这里插入图片描述在ARP缓存被毒化后所有流量都会“流经”攻击者主机M主机A想访问互联网它查询ARP缓存发现 ipR网关对应macM。于是它将本应发给路由器R的数据包全部发往了主机M的MAC地址macM。主机M截获这些数据包。此时它可以窃听、分析甚至篡改其中的内容例如登录密码、聊天记录。之后为了不中断连接引起怀疑它通常会将这些数据包原样转发给真正的路由器RmacR。外部网络的回复数据包从路由器R返回。路由器R查询自己的ARP缓存发现 ipA主机A对应 macM。于是它将回复包发往了主机M的MAC地址macM。主机M 再次截获返回的数据包同样可以进行窃听或篡改然后再转发给主机A。对于通信的双方主机A和路由器R来说网络连接看似正常但他们所有的流量都在不知不觉中被一个“中间人”主机M全程监控和操控。