本次加餐课程主要讲解两大核心内容一是ARP协议的完整工作过程即IP地址转换为MAC地址的实现原理二是ARP欺骗原理也就是通过ARP欺骗实现局域网中间人攻击的核心逻辑。本次仅讲解纯理论原理不涉及实操攻击手段。前提知识补充与回顾所有跨网段的网络通信当拆解为独立的每一跳时每一跳本质上都是在某个局域网内完成的数据链路层MAC层通信。在网络通信中数据需要从上到下逐层封装传输最终在数据链路层必须依靠MAC地址完成局域网内的交付而我们只能在网络层拿到目的 IP地址这里就出现了一个关键缺口。第一种场景当通信目标主机IP和本机不在同一网段时我们没法直接发给目标主机只能先查路由表找到下一跳路由器的IP。但即便知道了下一跳IP要在局域网里把数据发过去还是必须拿到这台路由器的MAC地址否则无法封装MAC帧、无法交付。第二种场景报文经过多跳路由终于到达目标主机所在的局域网此时路由器只知道目标主机的IP却不知道它的MAC地址同样没法在局域网里精准找到这台主机、完成最后一跳交付。注意这里的每一跳都是为了到达指定路由器并不是说到达内网的某一个主机可以想想QQ 为什么要将服务器部署在公网中为什么需要 NAT 技术我们聊天是将消息传输到远端处于 公网 IP 的 QQ 服务器况且我们在代码中填写的本来就是 公网 IP然后是对端和这个服务器本来有连接了再有 NAT 地址转化表来实现消息的推送更具体的过程是1. 先把角色定死跨国聊天你在中国家里 / 手机内网192.168.x.x 或运营商内网没有公网 IP只有路由器 / 基站有公网 IP。外国好友在国外同样是内网设备他那边也只有路由器有公网 IP。聊天软件服务器微信 / 电报 / WhatsApp公网服务器有固定公网 IP双方都能连到它。2. 你发消息给外国好友真实流程不是直接 P2P第一步你 → 公网服务器一定能通你代码 / 软件里填的是聊天服务器的公网 IP不是好友 IP。你的数据包源你的内网 IP: 端口 → 路由器 NAT 改成路由器公网 IP: 随机端口目的服务器公网 IP: 服务端口互联网只认公网 IP一路送到服务器。第二步服务器 → 外国好友关键点来了好友是内网外网不能主动发起连接到内网路由器默认挡住陌生入站包。所以服务器不能直接 “推” 给好友只能好友先主动连服务器登录、心跳建立一条 “长连接”好友路由器记录路由器公网IP:端口 → 好友内网IP:端口NAT 映射表服务器把你的消息发给这条长连接好友路由器收到目的是自己公网 IP: 端口的包查 NAT 表转发给好友内网 IP内网里再用 ARP 找 MAC精确到好友主机。第三步好友回复你对称逻辑好友发消息 → 他路由器 NAT → 公网服务器 → 你的长连接 → 你路由器 NAT → 你内网主机。3. 所以你们可能困惑的“最强也只能到好友的公网路由器啊怎么到内网主机”答靠 “主动连接 NAT 映射表 长连接”不是外网主动敲门是内网先开门。外网主动发 → 路由器不认识丢包安全机制内网先连外网服务器 → 路由器记好这个端口是给这个内网主机的服务器回包 → 路由器一看目的端口在表里 → 直接转给内网主机。4. 所以什么时候才是 “直接发到对方路由器公网 IP”只有两种情况对方是公网服务器云主机IP 就是主机 IP直接到无内网转发做了端口映射 / 内网穿透路由器上手动配好 “公网端口 → 内网主机”外网才能主动进来家用聊天软件不会这么做不安全。还有其实对于说 IP 和 MAC为啥不都使用 IP其实要也可以但是带来的代价是灾难的不仅仅是效率方面还有一些设计以及耦合方面。【可以自行查阅 AI】所以整条传输链路都是如此每经过一台路由器都要先查路由表得到下一跳IP再确认双方是否在同一网段接着必须把IP转成MAC才能封装数据继续转发。如果没有IP到MAC的转换数据链路层就无法识别接收方整个传输链条就会断掉。所以局域网内必须有一种协议专门负责把已知的IP地址解析成对应的MAC地址用来完成逐跳转发和最后交付这个协议就是ARP 地址解析协议。我们已经通过路由表查到了下一个路由器的 IP 地址为什么不能把报文直接发给路由器而是先要知道它的MAC地址呢原因很简单路由表管的是网络IP层真正在局域网里传送数据的是数据链路层 (以太网 /MAC)两层分工不一样。路由表查到下一跳IP只是告诉我们 “逻辑上要发给这个IP”但报文最终要在局域网里传输必须封装成以太网帧而以太网帧只认MAC地址不认IP地址。同样数据链路层也看不懂IP地址它只能识别源MAC、目的MAC只能靠MAC地址判断这个帧该发给谁。所以就算我们知道了下一跳路由器的IP地址也没法直接发必须先通过ARP地址解析查到这个路由器IP地址对应的MAC地址把MAC填进帧头链路层才能把数据真正送到下一跳路由器的网卡上。我们再重新梳理一下也就是最开始在网络IP层我们已经拿到数据报文了也通过当前主机的路由表查到了下一跳路由器的IP地址知道逻辑上要发给谁。但网络层往下交付必须交给数据链路层并封装成MAC帧而以太网MAC帧只认MAC地址、不认IP地址因为它需要物理上的目标地址才能在局域网里传输。所以我们必须把我们已经知道的下一跳路由器的IP地址转化成对应MAC地址这个转换就是ARP协议做的事。拿到MAC地址后数据链路层把源MAC、目的MAC封装进帧头再把IP报文包在里面。这时我们就同时拥有网络层下一跳IP用来路由选路 数据链路层下一跳MAC用来局域网实际投递 之后就能把封装好的MAC帧在局域网里精准转发给下一跳路由器了。这里再补充一下路由表的相关知识:我们日常使用的电脑、手机等主机和路由器一样内部同样拥有路由表并不是只有路由器才具备路由功能。主机的路由表全程只记录网络层IP地址相关的路由信息不会存储MAC地址它的核心任务就是判断收到的报文该从本机哪个网卡发出、下一跳该转发给哪个IP地址。主机判断目标主机是否与自己同网段、确定下一跳IP的逻辑是依靠本机IP地址 子网掩码进行计算比对当主机要发送报文时会先用子网掩码分别对自身IP和目标IP做运算判断二者是否处于同一局域网网段。如果目标主机和本机处于同一个网段路由表会匹配到直连路由报文直接在当前局域网内交付主机通过ARP查询目标IP对应的MAC地址封装成MAC帧后直接发给局域网内的目标主机。如果目标IP不在同一网段主机路由表会匹配默认路由也就是当前发送主机所在局域网的出入口路由器网关。当本机路由表里所有网段规则都匹配不到目标IP时就会把报文统一发给这个默认网关 (出入口路由器)由出入口路由器继续向外转发去外网寻找目标主机。因此这个默认路由里记录的IP就是局域网网关、也就是出入口路由器的内网IP。注意这套同网段计算逻辑不分内网 / 公网内网、公网主机全部通用这套算法绝大多数场景你主机算出来同网段 内网局域网。① 内网场景你图里 192.168.30.5本机 IP192.168.30.5、掩码255.255.255.0目标192.168.30.3掩码与运算后网段一致192.168.30.0→同内网网段ARP 查 MAC 直发不走网关。② 访问公网服务器跨网段目标是聊天服务器公网 IP掩码运算后网段和本机 192.168.30.0 不一致→跨网段匹配默认路由数据包发给网关路由器。云服务器自带公网 IP同样拿「本机公网 IP 子网掩码」和回包目的 IP 做与运算同网段内网 ARP 直投不同网段丢给上层运营商网关。IP 掩码算网段是通用底层规则只用来区分「是不是本地局域网」和 IP 是私网 / 公网属性没关系 算出来同网段 当前二层局域网大概率内网少数服务器机房局域网是公网网段不同网段 走网关跨网转发。路由表只完成网络层的IP选路确定报文该交给哪一个IP而不会处理数据链路层的地址。至于这个下一跳IP对应的物理MAC地址路由表并不负责记录会交给ARP协议完成IP到MAC的地址解析拿到MAC地址后主机再封装成完整以太网帧通过网卡真正把数据发送出去。电脑路由表里记录的是目标网段、下一跳IP、本机出口网卡只处理网络层IP信息不存MAC地址。路由表来源分为三类第一直连路由电脑配置本机IP 子网掩码后系统自动算出本机所在局域网网段生成直连路由表示该网段内所有IP都在本地局域网可直接发送。第二默认路由目标网段记为0.0.0.0/0代表所有路由表中匹配不到的目标IP统一交给网关 (出入口路由器内网IP) 转发由路由器去往其他网段寻找目标主机。第三手动静态路由或动态路由协议学习家用电脑很少用到。整个发包流程是主机先发数据包查询路由表确定下一跳IP再通过ARP协议把下一跳IP解析成MAC地址最后封装成MAC帧交给数据链路层发送。首先我们来明确一下路由表中目标网段、下一跳 IP、本机出口网卡这三个部分的作用:目标网段的作用目标网段用来匹配你要发的目标IP判断这条路由规则管不管它。比如你的直连路由目标网段是192.168.2.0/24意思就是凡是目标IP属于这个网段都走这条规则直接在局域网发默认路由目标网段是0.0.0.0/0意思是前面所有网段都匹配不上时所有剩下的IP都走这条规则发给网关。它就是路由表的「筛选条件」用来决定用哪一条路由。下一跳 IP 怎么来的下一跳IP不是拆报文现找是路由表规则里预先写死的 直连路由没有下一跳IP直接局域网投递 默认路由下一跳IP固定写出入口路由器内网IP如192.168.2.1 静态路由你手动填、或 DHCP / 动态协议下发好的。 你发包时先拿目标IP去匹配目标网段匹配成功后路由表直接告诉你下一跳发往这个IP、从本机这个网卡出去。下一跳IP是规则自带的不是拆包现算。本机出口网卡就是你电脑往外发数据走哪个硬件接口比如你电脑有有线网卡、无线网卡路由表会写明这条路由从有线网卡发或从无线网卡发。数据最终从这个网卡出去再封装MAC帧、发给下一跳IP对应的MAC地址。我们在来看这幅图用户 A192.168.2.2要给用户 B172.168.2.2发数据时会先查自己的路由表。它发现目标IP和自己不在同一网段于是匹配到默认路由下一跳就是局域网的出入口路由器192.168.2.1。接下来用户 A 通过ARP协议拿到出入口路由器左侧网口的MAC地址macLeft把数据封装成MAC帧源MAC是自己的macA目的MAC是macLeft再把这个帧发送给出入口路由器。出入口路由器收到数据帧后会先解封装拆掉MAC帧头拿到里面的IP数据包再读取其中的目标IP172.168.2.2。出入口路由器再查自己的路由表判断目标IP不在左侧局域网需要转发到右侧网段。于是路由器通过ARP协议拿到下一跳设备或目标主机所在局域网的路由器的MAC地址这里就是右侧网口macRight对应的目标MAC把IP数据包重新封装成新的MAC帧源MAC变成路由器右侧网口的macRight目的MAC变成目标设备的MAC再把这个新帧发往下一跳。这个过程会在每一台路由器上重复每到一台设备都先解封装MAC帧拿到IP报文中的目的IP地址再查路由表找到下一跳IP然后通过ARP拿到对应的MAC地址重新封装MAC帧再发送一站一站接力传递。直到数据到达用户 B 所在局域网的最后一台出入口路由器。这台路由器查路由表发现目标IP(172.168.2.2和自己的右侧网口172.168.2.1在同一网段于是它直接通过ARP协议查到用户 B 的MAC地址macB把IP数据包封装成源MAC为macRight、目的MAC为macB的MAC帧直接发送给用户 B。用户 B 收到后逐层解封装最终把数据交付给应用层完成通信。真正的路由器拥有多个独立网口每个网口可以单独配置不同网段的IP地址分别对接不同的局域网这也是路由器能够实现跨网段转发的核心前提。路由器不会像交换机一样对未知数据向所有端口泛洪发送它的转发逻辑极其精准当数据包从某一个网口进入路由器后路由器会解封装数据帧读取报文的目标IP地址再查询自身路由表。路由表会明确匹配出该目标IP对应的唯一出口网口路由器只会在这个指定网口通过ARP解析对应设备的MAC地址、重新封装数据帧并转发数据绝对不会向自身其他闲置网口发送数据。简单来说路由器多个网口各司其职每个网口对应一个独立网段依靠路由表精准选路实现不同局域网之间的数据隔离与定向转发。一、ARP 协议基础认知1.1 协议层级定位在TCP/IP四层协议栈中ARP协议不属于网络层也不属于传输层、应用层隶属于数据链路层。它位于MAC帧协议之上、IP协议之下是一层隐性的地址管理协议上层的网络层、传输层、应用层完全感知不到它的存在。简单来说MAC帧是数据链路层的基础承载协议而ARP是同层级内的辅助解析协议专门负责IP地址与MAC地址的映射解析是局域网通信的底层支撑。1.2 ARP 协议核心作用IP地址是网络层的逻辑地址用于跨网络路由转发MAC地址是数据链路层的物理地址仅用于局域网内数据帧传输。数据包在网络中转发时源IP、目的IP全程不变而源MAC、目的MAC每经过一跳设备就会发生变化。路由器转发数据包时仅能通过IP报文获取目标主机的IP地址但无法直接获取其MAC地址。而局域网内的数据传输必须封装MAC帧才能完成因此需要ARP协议将已知的目标IP地址解析为对应的目标MAC地址完成数据帧封装与局域网转发。1.3 ARP报文核心字段解析ARP报文依附于MAC帧传输MAC帧头部为数据链路层封装帧载荷部分为完整的ARP报文核心关键字段如下硬件类型2字节标识底层网络硬件类型值为1代表以太网当前局域网主流类型适配以太网、令牌环网、无线局域网等不同硬件网络。协议类型2字节标识需要解析的上层协议地址值为0800代表IPv4地址即实现“IP地址转MAC地址”。硬件地址长度1字节硬件地址即MAC地址以太网固定为6字节统一填6。协议地址长度1字节协议地址即IP地址IPv4固定为4字节统一填4。OP操作字段2字节核心区分字段值为1代表ARP请求值为2代表ARP应答是主机判断报文类型的唯一依据。发送端MAC地址、发送端IP地址记录报文发起方的物理地址与逻辑地址由请求方主动填充。目的MAC地址、目的IP地址记录目标主机的地址请求阶段未知目标MAC默认填充全F广播地址仅填充已知的目标IP地址。对于这的目的IP地址分两种场景对应1、同网段通信本机→同局域网电脑ARP 目的 IP 对端主机内网 IPARP 解析拿到对方主机 MAC直接二层发给目标终端。2、跨网段通信本机→外网需要走网关本机和目标 IP 不在一个网段本机 ARP 查询的目的 IP 是【网关 LAN 口 IP】此时 ARP 目的 IP 网关 IP解析出网关 MACIP 包头的目的 IP不变依旧是远端最终目标主机的公网 IP数据先封装 MAC 发给网关后续由路由器跨网转发去找最终目的 IP。ARP 报文内的目的 IP你图最右字段用来查 MAC 的 IP同网段 终端 IP跨网段 网关 IP。内层 IP 数据包的目的 IP全程不变的最终收件 IP永远是你代码填写的目标主机 IP从头到尾跨互联网不会改动NAT 除外。配套MAC帧头部关键字段帧类型字段0800代表载荷为IP报文0806代表载荷为ARP报文设备通过该字段判断将报文交付给IP层或ARP层处理。二、ARP协议完整工作流程实战场景2.1 场景设定外网数据包发送至路由器R报文目标IP为局域网内主机E的IPIPe。路由器可通过路由表确定报文需转发至主机E但路由器无主机E的ARP缓存未知其MAC地址MACe无法封装MAC帧因此触发ARP解析流程。核心前提局域网内所有主机A、B、C、D、E和路由器均支持TCP/IP协议栈均可发起、接收、处理ARP报文。任何主机既可以主动向他人发起ARP请求也可以接收他人的ARP请求与应答。2.2 第一步路由器构建并发送ARP广播请求路由器在自身ARP层构建标准ARP请求报文字段填充规则硬件类型1以太网、协议类型0800IPv4、硬件地址长度6、协议地址长度4OP字段1标记为ARP请求发送端MAC路由器MACMACr、发送端IP路由器IPIPr目的MAC全F广播地址、目的IP主机E的IPIPe。ARP报文构建完成后向下交付至数据链路层封装MAC帧头部MAC帧源地址MACr目的地址全F广播帧类型0806标记载荷为ARP报文。封装完成后路由器将数据帧以广播形式发送至整个局域网局域网内所有主机A、B、C、D、E均可接收该报文。2.3 第二步局域网主机批量处理ARP请求所有主机接收数据帧后统一执行解封装流程剥离MAC帧头部通过帧类型0806判定为ARP报文将载荷交付至本机ARP层处理。所有主机处理ARP报文的第一步优先判断OP字段确认是请求还是应答。本次报文OP1为ARP请求。随后各主机对比报文中的目的IP地址主机A、B、C、D自身IP与目标IPe不匹配直接在ARP层丢弃报文不做任何响应主机E自身IP与目标IPe匹配认定该请求是针对自身保留报文并准备构建应答。2.4 第三步主机E构建并发送ARP单播应答主机E在ARP层构建ARP应答报文字段填充规则基础字段不变硬件类型1、协议类型0800、地址长度6/4OP字段2标记为ARP应答发送端MAC主机E的MACMACe、发送端IP主机E的IPIPe目的MAC路由器MACMACr、目的IP路由器IPIPr。应答报文向下封装MAC帧帧类型依旧为0806源MACMACe目的MACMACr。此时无需广播直接以单播形式发送给路由器。局域网内其他主机收到该应答帧后因MAC目的地址与自身不匹配直接在数据链路层丢弃报文仅路由器可接收处理。2.5 第四步路由器更新ARP缓存完成通信路由器接收应答报文解封装后交付至ARP层优先读取OP字段确认OP2为有效应答。随后解析报文内容成功获取IPe与MACe的一一映射关系。至此ARP解析流程完成路由器将原本无法封装的IP报文封装上MACe目的地址完成局域网转发实现路由器与主机E的正常通信。三、ARP缓存机制详解3.1 缓存作用若每次通信都重复执行完整的ARP广播、应答流程会极大占用局域网带宽、降低通信效率。因此所有主机、路由器都会维护一张ARP缓存表存储局域网内IP地址与MAC地址的映射关系。首次ARP解析完成后设备会永久缓存该映射条目后续同一目标IP的通信直接查询缓存获取MAC地址无需重复发起ARP请求。3.2 缓存时效ARP缓存并非永久有效通用时效为20-30分钟不同系统可自定义配置。设置时效的核心原因局域网设备是动态变化的设备断开、更换网卡、修改IP都会导致IP与MAC的映射关系变更。若缓存永久保存会出现映射失效、设备无法通信的问题。定时过期可自动清理失效条目保证映射关系实时准确。3.3 缓存查看方式Windows、Linux系统均可通过arp -a命令查看本机ARP缓存表直观看到当前已缓存的IP-MAC映射关系。通过批量ping局域网网段主机可触发全网ARP解析获取局域网所有在线设备的映射信息。C:\Users\A1983arp -a Interface: 192.168.44.1 --- 0x3 Internet Address Physical Address Type 192.168.44.254 00-50-56-fe-a2-df dynamic 192.168.44.255 ff-ff-ff-ff-ff-ff static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 224.0.0.252 01-00-5e-00-00-fc static 239.255.255.250 01-00-5e-7f-ff-fa static 255.255.255.255 ff-ff-ff-ff-ff-ff static Interface: 192.168.10.1 --- 0x6 Internet Address Physical Address Type 192.168.10.254 00-50-56-fa-51-03 dynamic 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 224.0.0.252 01-00-5e-00-00-fc static 239.255.255.250 01-00-5e-7f-ff-fa static 255.255.255.255 ff-ff-ff-ff-ff-ff static Interface: 10.106.52.7 --- 0x12 Internet Address Physical Address Type 10.106.0.1 80-05-88-d5-c8-99 dynamic 10.106.255.255 ff-ff-ff-ff-ff-ff static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 224.0.0.252 01-00-5e-00-00-fc static 239.255.255.250 01-00-5e-7f-ff-fa static 255.255.255.255 ff-ff-ff-ff-ff-ff static四、RARP协议简单补充RARP即逆地址解析协议原理与ARP相反作用是通过已知MAC地址解析对应的IP地址。RARP实现逻辑简单无需复杂的广播匹配仅需单播询问即可且当前网络场景中极少使用因此仅做概念了解不深入讲解。五、ARP欺骗原理中间人攻击5.1 正常通信基础场景局域网内存在主机A、网关路由器R主机A缓存路由器IPIPr对应路由器MACMACr路由器缓存主机A IPIPa对应主机A MACMACa正常通信时主机A的外网数据先发送至路由器路由器转发至外网双向通信正常。5.2 欺骗核心前提ARP协议存在核心漏洞设备接收ARP应答时不会验证应答的合法性只会无条件覆盖更新本地ARP缓存且无需提前发起ARP请求主动发送的ARP应答也会被设备接纳。同时ARP缓存遵循「最新覆盖旧数据」原则新的应答报文会直接替换原有映射条目。5.3 ARP欺骗完整过程局域网内接入攻击主机M中间人拥有独立IPIPm、MACMACm通过伪造虚假ARP应答实现双向欺骗欺骗主机A主机M伪造ARP应答报文冒充网关路由器告知主机A「网关IPr对应的MAC地址为MACm」。主机A接收应答后更新ARP缓存将网关的MAC地址错误记录为攻击主机的MAC。欺骗路由器R主机M再次伪造ARP应答报文冒充主机A告知路由器「主机A的IPa对应的MAC地址为MACm」。路由器同步更新ARP缓存错误记录主机A的MAC为攻击主机MAC。欺骗完成后双向映射关系全部被篡改主机AIPr → MACm错误映射路由器RIPa → MACm错误映射。5.4 中间人劫持通信效果欺骗完成后主机A所有外网流量都会优先发送给攻击主机M而非真实路由器。攻击主机M收到报文后可直接转发给真实路由器路由器回包时也会先发送给M再由M转发给主机A。整个通信过程中主机A和路由器均无法感知中间人M的存在所有双向通信数据都会经过M转发攻击者可窃取、监听、篡改通信数据这就是典型的ARP中间人攻击。ARP欺骗是局域网最常用的中间人攻击方式核心原理就是利用ARP协议无验证、动态更新缓存的漏洞伪造虚假映射关系劫持流量。ARP 中间人欺骗四大核心危害1. 数据窃听最基础危害主机 A 上网所有明文数据账号密码、Cookie、聊天明文、表单信息全经过攻击机 M攻击者直接抓包抓取网页登录密码、银行卡账号、邮箱账号、内网传输文件。HTTPS 虽加密内容但可窃取域名、访问记录。2. 数据篡改、钓鱼劫持M 转发报文前可修改数据包网页劫持A 访问正常网站M 篡改响应跳转钓鱼页面高仿支付宝、网银、企业 OA骗取账号密码文件投毒A 下载软件 / 文档M 替换文件为捆绑木马的恶意程序篡改支付链接跳转虚假收款地址。3. 断网 DOS 攻击单向 ARP 欺骗攻击者伪造 ARP把网关 IP 绑定一个无效 MAC主机 A 的流量全发往不存在的设备A 直接断网无法上网造成局域网大面积瘫痪。4. 内网横向渗透拿到一台主机流量权限后利用抓取的凭据、会话 Cookie继续对内网其他设备实施 ARP 欺骗逐步控制全局域网终端、服务器窃取服务器机密数据、业务资料。顺带补充防护要点网关 / 主机静态绑定 ARPIP-MAC 固化不自动学习 ARP交换机开启 DAI动态 ARP 检测、端口安全部署内网防火墙、终端安全软件拦截异常 ARP 报文。
ARP 的具体过程与 ARP 欺骗 [ 网络加餐 ]
本次加餐课程主要讲解两大核心内容一是ARP协议的完整工作过程即IP地址转换为MAC地址的实现原理二是ARP欺骗原理也就是通过ARP欺骗实现局域网中间人攻击的核心逻辑。本次仅讲解纯理论原理不涉及实操攻击手段。前提知识补充与回顾所有跨网段的网络通信当拆解为独立的每一跳时每一跳本质上都是在某个局域网内完成的数据链路层MAC层通信。在网络通信中数据需要从上到下逐层封装传输最终在数据链路层必须依靠MAC地址完成局域网内的交付而我们只能在网络层拿到目的 IP地址这里就出现了一个关键缺口。第一种场景当通信目标主机IP和本机不在同一网段时我们没法直接发给目标主机只能先查路由表找到下一跳路由器的IP。但即便知道了下一跳IP要在局域网里把数据发过去还是必须拿到这台路由器的MAC地址否则无法封装MAC帧、无法交付。第二种场景报文经过多跳路由终于到达目标主机所在的局域网此时路由器只知道目标主机的IP却不知道它的MAC地址同样没法在局域网里精准找到这台主机、完成最后一跳交付。注意这里的每一跳都是为了到达指定路由器并不是说到达内网的某一个主机可以想想QQ 为什么要将服务器部署在公网中为什么需要 NAT 技术我们聊天是将消息传输到远端处于 公网 IP 的 QQ 服务器况且我们在代码中填写的本来就是 公网 IP然后是对端和这个服务器本来有连接了再有 NAT 地址转化表来实现消息的推送更具体的过程是1. 先把角色定死跨国聊天你在中国家里 / 手机内网192.168.x.x 或运营商内网没有公网 IP只有路由器 / 基站有公网 IP。外国好友在国外同样是内网设备他那边也只有路由器有公网 IP。聊天软件服务器微信 / 电报 / WhatsApp公网服务器有固定公网 IP双方都能连到它。2. 你发消息给外国好友真实流程不是直接 P2P第一步你 → 公网服务器一定能通你代码 / 软件里填的是聊天服务器的公网 IP不是好友 IP。你的数据包源你的内网 IP: 端口 → 路由器 NAT 改成路由器公网 IP: 随机端口目的服务器公网 IP: 服务端口互联网只认公网 IP一路送到服务器。第二步服务器 → 外国好友关键点来了好友是内网外网不能主动发起连接到内网路由器默认挡住陌生入站包。所以服务器不能直接 “推” 给好友只能好友先主动连服务器登录、心跳建立一条 “长连接”好友路由器记录路由器公网IP:端口 → 好友内网IP:端口NAT 映射表服务器把你的消息发给这条长连接好友路由器收到目的是自己公网 IP: 端口的包查 NAT 表转发给好友内网 IP内网里再用 ARP 找 MAC精确到好友主机。第三步好友回复你对称逻辑好友发消息 → 他路由器 NAT → 公网服务器 → 你的长连接 → 你路由器 NAT → 你内网主机。3. 所以你们可能困惑的“最强也只能到好友的公网路由器啊怎么到内网主机”答靠 “主动连接 NAT 映射表 长连接”不是外网主动敲门是内网先开门。外网主动发 → 路由器不认识丢包安全机制内网先连外网服务器 → 路由器记好这个端口是给这个内网主机的服务器回包 → 路由器一看目的端口在表里 → 直接转给内网主机。4. 所以什么时候才是 “直接发到对方路由器公网 IP”只有两种情况对方是公网服务器云主机IP 就是主机 IP直接到无内网转发做了端口映射 / 内网穿透路由器上手动配好 “公网端口 → 内网主机”外网才能主动进来家用聊天软件不会这么做不安全。还有其实对于说 IP 和 MAC为啥不都使用 IP其实要也可以但是带来的代价是灾难的不仅仅是效率方面还有一些设计以及耦合方面。【可以自行查阅 AI】所以整条传输链路都是如此每经过一台路由器都要先查路由表得到下一跳IP再确认双方是否在同一网段接着必须把IP转成MAC才能封装数据继续转发。如果没有IP到MAC的转换数据链路层就无法识别接收方整个传输链条就会断掉。所以局域网内必须有一种协议专门负责把已知的IP地址解析成对应的MAC地址用来完成逐跳转发和最后交付这个协议就是ARP 地址解析协议。我们已经通过路由表查到了下一个路由器的 IP 地址为什么不能把报文直接发给路由器而是先要知道它的MAC地址呢原因很简单路由表管的是网络IP层真正在局域网里传送数据的是数据链路层 (以太网 /MAC)两层分工不一样。路由表查到下一跳IP只是告诉我们 “逻辑上要发给这个IP”但报文最终要在局域网里传输必须封装成以太网帧而以太网帧只认MAC地址不认IP地址。同样数据链路层也看不懂IP地址它只能识别源MAC、目的MAC只能靠MAC地址判断这个帧该发给谁。所以就算我们知道了下一跳路由器的IP地址也没法直接发必须先通过ARP地址解析查到这个路由器IP地址对应的MAC地址把MAC填进帧头链路层才能把数据真正送到下一跳路由器的网卡上。我们再重新梳理一下也就是最开始在网络IP层我们已经拿到数据报文了也通过当前主机的路由表查到了下一跳路由器的IP地址知道逻辑上要发给谁。但网络层往下交付必须交给数据链路层并封装成MAC帧而以太网MAC帧只认MAC地址、不认IP地址因为它需要物理上的目标地址才能在局域网里传输。所以我们必须把我们已经知道的下一跳路由器的IP地址转化成对应MAC地址这个转换就是ARP协议做的事。拿到MAC地址后数据链路层把源MAC、目的MAC封装进帧头再把IP报文包在里面。这时我们就同时拥有网络层下一跳IP用来路由选路 数据链路层下一跳MAC用来局域网实际投递 之后就能把封装好的MAC帧在局域网里精准转发给下一跳路由器了。这里再补充一下路由表的相关知识:我们日常使用的电脑、手机等主机和路由器一样内部同样拥有路由表并不是只有路由器才具备路由功能。主机的路由表全程只记录网络层IP地址相关的路由信息不会存储MAC地址它的核心任务就是判断收到的报文该从本机哪个网卡发出、下一跳该转发给哪个IP地址。主机判断目标主机是否与自己同网段、确定下一跳IP的逻辑是依靠本机IP地址 子网掩码进行计算比对当主机要发送报文时会先用子网掩码分别对自身IP和目标IP做运算判断二者是否处于同一局域网网段。如果目标主机和本机处于同一个网段路由表会匹配到直连路由报文直接在当前局域网内交付主机通过ARP查询目标IP对应的MAC地址封装成MAC帧后直接发给局域网内的目标主机。如果目标IP不在同一网段主机路由表会匹配默认路由也就是当前发送主机所在局域网的出入口路由器网关。当本机路由表里所有网段规则都匹配不到目标IP时就会把报文统一发给这个默认网关 (出入口路由器)由出入口路由器继续向外转发去外网寻找目标主机。因此这个默认路由里记录的IP就是局域网网关、也就是出入口路由器的内网IP。注意这套同网段计算逻辑不分内网 / 公网内网、公网主机全部通用这套算法绝大多数场景你主机算出来同网段 内网局域网。① 内网场景你图里 192.168.30.5本机 IP192.168.30.5、掩码255.255.255.0目标192.168.30.3掩码与运算后网段一致192.168.30.0→同内网网段ARP 查 MAC 直发不走网关。② 访问公网服务器跨网段目标是聊天服务器公网 IP掩码运算后网段和本机 192.168.30.0 不一致→跨网段匹配默认路由数据包发给网关路由器。云服务器自带公网 IP同样拿「本机公网 IP 子网掩码」和回包目的 IP 做与运算同网段内网 ARP 直投不同网段丢给上层运营商网关。IP 掩码算网段是通用底层规则只用来区分「是不是本地局域网」和 IP 是私网 / 公网属性没关系 算出来同网段 当前二层局域网大概率内网少数服务器机房局域网是公网网段不同网段 走网关跨网转发。路由表只完成网络层的IP选路确定报文该交给哪一个IP而不会处理数据链路层的地址。至于这个下一跳IP对应的物理MAC地址路由表并不负责记录会交给ARP协议完成IP到MAC的地址解析拿到MAC地址后主机再封装成完整以太网帧通过网卡真正把数据发送出去。电脑路由表里记录的是目标网段、下一跳IP、本机出口网卡只处理网络层IP信息不存MAC地址。路由表来源分为三类第一直连路由电脑配置本机IP 子网掩码后系统自动算出本机所在局域网网段生成直连路由表示该网段内所有IP都在本地局域网可直接发送。第二默认路由目标网段记为0.0.0.0/0代表所有路由表中匹配不到的目标IP统一交给网关 (出入口路由器内网IP) 转发由路由器去往其他网段寻找目标主机。第三手动静态路由或动态路由协议学习家用电脑很少用到。整个发包流程是主机先发数据包查询路由表确定下一跳IP再通过ARP协议把下一跳IP解析成MAC地址最后封装成MAC帧交给数据链路层发送。首先我们来明确一下路由表中目标网段、下一跳 IP、本机出口网卡这三个部分的作用:目标网段的作用目标网段用来匹配你要发的目标IP判断这条路由规则管不管它。比如你的直连路由目标网段是192.168.2.0/24意思就是凡是目标IP属于这个网段都走这条规则直接在局域网发默认路由目标网段是0.0.0.0/0意思是前面所有网段都匹配不上时所有剩下的IP都走这条规则发给网关。它就是路由表的「筛选条件」用来决定用哪一条路由。下一跳 IP 怎么来的下一跳IP不是拆报文现找是路由表规则里预先写死的 直连路由没有下一跳IP直接局域网投递 默认路由下一跳IP固定写出入口路由器内网IP如192.168.2.1 静态路由你手动填、或 DHCP / 动态协议下发好的。 你发包时先拿目标IP去匹配目标网段匹配成功后路由表直接告诉你下一跳发往这个IP、从本机这个网卡出去。下一跳IP是规则自带的不是拆包现算。本机出口网卡就是你电脑往外发数据走哪个硬件接口比如你电脑有有线网卡、无线网卡路由表会写明这条路由从有线网卡发或从无线网卡发。数据最终从这个网卡出去再封装MAC帧、发给下一跳IP对应的MAC地址。我们在来看这幅图用户 A192.168.2.2要给用户 B172.168.2.2发数据时会先查自己的路由表。它发现目标IP和自己不在同一网段于是匹配到默认路由下一跳就是局域网的出入口路由器192.168.2.1。接下来用户 A 通过ARP协议拿到出入口路由器左侧网口的MAC地址macLeft把数据封装成MAC帧源MAC是自己的macA目的MAC是macLeft再把这个帧发送给出入口路由器。出入口路由器收到数据帧后会先解封装拆掉MAC帧头拿到里面的IP数据包再读取其中的目标IP172.168.2.2。出入口路由器再查自己的路由表判断目标IP不在左侧局域网需要转发到右侧网段。于是路由器通过ARP协议拿到下一跳设备或目标主机所在局域网的路由器的MAC地址这里就是右侧网口macRight对应的目标MAC把IP数据包重新封装成新的MAC帧源MAC变成路由器右侧网口的macRight目的MAC变成目标设备的MAC再把这个新帧发往下一跳。这个过程会在每一台路由器上重复每到一台设备都先解封装MAC帧拿到IP报文中的目的IP地址再查路由表找到下一跳IP然后通过ARP拿到对应的MAC地址重新封装MAC帧再发送一站一站接力传递。直到数据到达用户 B 所在局域网的最后一台出入口路由器。这台路由器查路由表发现目标IP(172.168.2.2和自己的右侧网口172.168.2.1在同一网段于是它直接通过ARP协议查到用户 B 的MAC地址macB把IP数据包封装成源MAC为macRight、目的MAC为macB的MAC帧直接发送给用户 B。用户 B 收到后逐层解封装最终把数据交付给应用层完成通信。真正的路由器拥有多个独立网口每个网口可以单独配置不同网段的IP地址分别对接不同的局域网这也是路由器能够实现跨网段转发的核心前提。路由器不会像交换机一样对未知数据向所有端口泛洪发送它的转发逻辑极其精准当数据包从某一个网口进入路由器后路由器会解封装数据帧读取报文的目标IP地址再查询自身路由表。路由表会明确匹配出该目标IP对应的唯一出口网口路由器只会在这个指定网口通过ARP解析对应设备的MAC地址、重新封装数据帧并转发数据绝对不会向自身其他闲置网口发送数据。简单来说路由器多个网口各司其职每个网口对应一个独立网段依靠路由表精准选路实现不同局域网之间的数据隔离与定向转发。一、ARP 协议基础认知1.1 协议层级定位在TCP/IP四层协议栈中ARP协议不属于网络层也不属于传输层、应用层隶属于数据链路层。它位于MAC帧协议之上、IP协议之下是一层隐性的地址管理协议上层的网络层、传输层、应用层完全感知不到它的存在。简单来说MAC帧是数据链路层的基础承载协议而ARP是同层级内的辅助解析协议专门负责IP地址与MAC地址的映射解析是局域网通信的底层支撑。1.2 ARP 协议核心作用IP地址是网络层的逻辑地址用于跨网络路由转发MAC地址是数据链路层的物理地址仅用于局域网内数据帧传输。数据包在网络中转发时源IP、目的IP全程不变而源MAC、目的MAC每经过一跳设备就会发生变化。路由器转发数据包时仅能通过IP报文获取目标主机的IP地址但无法直接获取其MAC地址。而局域网内的数据传输必须封装MAC帧才能完成因此需要ARP协议将已知的目标IP地址解析为对应的目标MAC地址完成数据帧封装与局域网转发。1.3 ARP报文核心字段解析ARP报文依附于MAC帧传输MAC帧头部为数据链路层封装帧载荷部分为完整的ARP报文核心关键字段如下硬件类型2字节标识底层网络硬件类型值为1代表以太网当前局域网主流类型适配以太网、令牌环网、无线局域网等不同硬件网络。协议类型2字节标识需要解析的上层协议地址值为0800代表IPv4地址即实现“IP地址转MAC地址”。硬件地址长度1字节硬件地址即MAC地址以太网固定为6字节统一填6。协议地址长度1字节协议地址即IP地址IPv4固定为4字节统一填4。OP操作字段2字节核心区分字段值为1代表ARP请求值为2代表ARP应答是主机判断报文类型的唯一依据。发送端MAC地址、发送端IP地址记录报文发起方的物理地址与逻辑地址由请求方主动填充。目的MAC地址、目的IP地址记录目标主机的地址请求阶段未知目标MAC默认填充全F广播地址仅填充已知的目标IP地址。对于这的目的IP地址分两种场景对应1、同网段通信本机→同局域网电脑ARP 目的 IP 对端主机内网 IPARP 解析拿到对方主机 MAC直接二层发给目标终端。2、跨网段通信本机→外网需要走网关本机和目标 IP 不在一个网段本机 ARP 查询的目的 IP 是【网关 LAN 口 IP】此时 ARP 目的 IP 网关 IP解析出网关 MACIP 包头的目的 IP不变依旧是远端最终目标主机的公网 IP数据先封装 MAC 发给网关后续由路由器跨网转发去找最终目的 IP。ARP 报文内的目的 IP你图最右字段用来查 MAC 的 IP同网段 终端 IP跨网段 网关 IP。内层 IP 数据包的目的 IP全程不变的最终收件 IP永远是你代码填写的目标主机 IP从头到尾跨互联网不会改动NAT 除外。配套MAC帧头部关键字段帧类型字段0800代表载荷为IP报文0806代表载荷为ARP报文设备通过该字段判断将报文交付给IP层或ARP层处理。二、ARP协议完整工作流程实战场景2.1 场景设定外网数据包发送至路由器R报文目标IP为局域网内主机E的IPIPe。路由器可通过路由表确定报文需转发至主机E但路由器无主机E的ARP缓存未知其MAC地址MACe无法封装MAC帧因此触发ARP解析流程。核心前提局域网内所有主机A、B、C、D、E和路由器均支持TCP/IP协议栈均可发起、接收、处理ARP报文。任何主机既可以主动向他人发起ARP请求也可以接收他人的ARP请求与应答。2.2 第一步路由器构建并发送ARP广播请求路由器在自身ARP层构建标准ARP请求报文字段填充规则硬件类型1以太网、协议类型0800IPv4、硬件地址长度6、协议地址长度4OP字段1标记为ARP请求发送端MAC路由器MACMACr、发送端IP路由器IPIPr目的MAC全F广播地址、目的IP主机E的IPIPe。ARP报文构建完成后向下交付至数据链路层封装MAC帧头部MAC帧源地址MACr目的地址全F广播帧类型0806标记载荷为ARP报文。封装完成后路由器将数据帧以广播形式发送至整个局域网局域网内所有主机A、B、C、D、E均可接收该报文。2.3 第二步局域网主机批量处理ARP请求所有主机接收数据帧后统一执行解封装流程剥离MAC帧头部通过帧类型0806判定为ARP报文将载荷交付至本机ARP层处理。所有主机处理ARP报文的第一步优先判断OP字段确认是请求还是应答。本次报文OP1为ARP请求。随后各主机对比报文中的目的IP地址主机A、B、C、D自身IP与目标IPe不匹配直接在ARP层丢弃报文不做任何响应主机E自身IP与目标IPe匹配认定该请求是针对自身保留报文并准备构建应答。2.4 第三步主机E构建并发送ARP单播应答主机E在ARP层构建ARP应答报文字段填充规则基础字段不变硬件类型1、协议类型0800、地址长度6/4OP字段2标记为ARP应答发送端MAC主机E的MACMACe、发送端IP主机E的IPIPe目的MAC路由器MACMACr、目的IP路由器IPIPr。应答报文向下封装MAC帧帧类型依旧为0806源MACMACe目的MACMACr。此时无需广播直接以单播形式发送给路由器。局域网内其他主机收到该应答帧后因MAC目的地址与自身不匹配直接在数据链路层丢弃报文仅路由器可接收处理。2.5 第四步路由器更新ARP缓存完成通信路由器接收应答报文解封装后交付至ARP层优先读取OP字段确认OP2为有效应答。随后解析报文内容成功获取IPe与MACe的一一映射关系。至此ARP解析流程完成路由器将原本无法封装的IP报文封装上MACe目的地址完成局域网转发实现路由器与主机E的正常通信。三、ARP缓存机制详解3.1 缓存作用若每次通信都重复执行完整的ARP广播、应答流程会极大占用局域网带宽、降低通信效率。因此所有主机、路由器都会维护一张ARP缓存表存储局域网内IP地址与MAC地址的映射关系。首次ARP解析完成后设备会永久缓存该映射条目后续同一目标IP的通信直接查询缓存获取MAC地址无需重复发起ARP请求。3.2 缓存时效ARP缓存并非永久有效通用时效为20-30分钟不同系统可自定义配置。设置时效的核心原因局域网设备是动态变化的设备断开、更换网卡、修改IP都会导致IP与MAC的映射关系变更。若缓存永久保存会出现映射失效、设备无法通信的问题。定时过期可自动清理失效条目保证映射关系实时准确。3.3 缓存查看方式Windows、Linux系统均可通过arp -a命令查看本机ARP缓存表直观看到当前已缓存的IP-MAC映射关系。通过批量ping局域网网段主机可触发全网ARP解析获取局域网所有在线设备的映射信息。C:\Users\A1983arp -a Interface: 192.168.44.1 --- 0x3 Internet Address Physical Address Type 192.168.44.254 00-50-56-fe-a2-df dynamic 192.168.44.255 ff-ff-ff-ff-ff-ff static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 224.0.0.252 01-00-5e-00-00-fc static 239.255.255.250 01-00-5e-7f-ff-fa static 255.255.255.255 ff-ff-ff-ff-ff-ff static Interface: 192.168.10.1 --- 0x6 Internet Address Physical Address Type 192.168.10.254 00-50-56-fa-51-03 dynamic 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 224.0.0.252 01-00-5e-00-00-fc static 239.255.255.250 01-00-5e-7f-ff-fa static 255.255.255.255 ff-ff-ff-ff-ff-ff static Interface: 10.106.52.7 --- 0x12 Internet Address Physical Address Type 10.106.0.1 80-05-88-d5-c8-99 dynamic 10.106.255.255 ff-ff-ff-ff-ff-ff static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 224.0.0.252 01-00-5e-00-00-fc static 239.255.255.250 01-00-5e-7f-ff-fa static 255.255.255.255 ff-ff-ff-ff-ff-ff static四、RARP协议简单补充RARP即逆地址解析协议原理与ARP相反作用是通过已知MAC地址解析对应的IP地址。RARP实现逻辑简单无需复杂的广播匹配仅需单播询问即可且当前网络场景中极少使用因此仅做概念了解不深入讲解。五、ARP欺骗原理中间人攻击5.1 正常通信基础场景局域网内存在主机A、网关路由器R主机A缓存路由器IPIPr对应路由器MACMACr路由器缓存主机A IPIPa对应主机A MACMACa正常通信时主机A的外网数据先发送至路由器路由器转发至外网双向通信正常。5.2 欺骗核心前提ARP协议存在核心漏洞设备接收ARP应答时不会验证应答的合法性只会无条件覆盖更新本地ARP缓存且无需提前发起ARP请求主动发送的ARP应答也会被设备接纳。同时ARP缓存遵循「最新覆盖旧数据」原则新的应答报文会直接替换原有映射条目。5.3 ARP欺骗完整过程局域网内接入攻击主机M中间人拥有独立IPIPm、MACMACm通过伪造虚假ARP应答实现双向欺骗欺骗主机A主机M伪造ARP应答报文冒充网关路由器告知主机A「网关IPr对应的MAC地址为MACm」。主机A接收应答后更新ARP缓存将网关的MAC地址错误记录为攻击主机的MAC。欺骗路由器R主机M再次伪造ARP应答报文冒充主机A告知路由器「主机A的IPa对应的MAC地址为MACm」。路由器同步更新ARP缓存错误记录主机A的MAC为攻击主机MAC。欺骗完成后双向映射关系全部被篡改主机AIPr → MACm错误映射路由器RIPa → MACm错误映射。5.4 中间人劫持通信效果欺骗完成后主机A所有外网流量都会优先发送给攻击主机M而非真实路由器。攻击主机M收到报文后可直接转发给真实路由器路由器回包时也会先发送给M再由M转发给主机A。整个通信过程中主机A和路由器均无法感知中间人M的存在所有双向通信数据都会经过M转发攻击者可窃取、监听、篡改通信数据这就是典型的ARP中间人攻击。ARP欺骗是局域网最常用的中间人攻击方式核心原理就是利用ARP协议无验证、动态更新缓存的漏洞伪造虚假映射关系劫持流量。ARP 中间人欺骗四大核心危害1. 数据窃听最基础危害主机 A 上网所有明文数据账号密码、Cookie、聊天明文、表单信息全经过攻击机 M攻击者直接抓包抓取网页登录密码、银行卡账号、邮箱账号、内网传输文件。HTTPS 虽加密内容但可窃取域名、访问记录。2. 数据篡改、钓鱼劫持M 转发报文前可修改数据包网页劫持A 访问正常网站M 篡改响应跳转钓鱼页面高仿支付宝、网银、企业 OA骗取账号密码文件投毒A 下载软件 / 文档M 替换文件为捆绑木马的恶意程序篡改支付链接跳转虚假收款地址。3. 断网 DOS 攻击单向 ARP 欺骗攻击者伪造 ARP把网关 IP 绑定一个无效 MAC主机 A 的流量全发往不存在的设备A 直接断网无法上网造成局域网大面积瘫痪。4. 内网横向渗透拿到一台主机流量权限后利用抓取的凭据、会话 Cookie继续对内网其他设备实施 ARP 欺骗逐步控制全局域网终端、服务器窃取服务器机密数据、业务资料。顺带补充防护要点网关 / 主机静态绑定 ARPIP-MAC 固化不自动学习 ARP交换机开启 DAI动态 ARP 检测、端口安全部署内网防火墙、终端安全软件拦截异常 ARP 报文。