做网络这行越久越发现,很多人不是不会配设备,而是卡在“脑子里对数据包走到哪一步没有画面”。交换机、路由器、终端设备之间的信息传递原理,其实翻来覆去就是一套“封装、寻址、解封装”的流程,但很多培训教程上来就讲OSI七层模型,听完还是不知道一个数据包从电脑出发后,到底先经过谁、谁改了什么、谁只看一眼就放行。这篇内容我想从实际转发过程出发,把交换机、路由器和终端设备之间的配合逻辑完整捋一遍,适合刚入门网络的运维、想补基础的项目实施人员,也适合那些配过网但说不清原理的同行。读完你至少能回答三个问题:交换机凭什么知道该从哪个口出去?路由器是看什么做决定的?终端又是怎么判断把数据交给谁?
1. 信息传递的整体框架:先分清谁管“近处”,谁管“远方”
在拆细节之前,我习惯先让脑子里有一张全景图。无论网络多复杂,数据从一台终端到另一台终端,本质上就是做三件事:把数据从网卡送出去,中间经过几次“中转判断”,最后在目标设备上把数据还原出来。而交换机、路由器、终端这三个角色,恰好把这三件事拆得非常清晰。
1.1 信息传递的本质就是“包一层层套”
打个比方,数据就像快递包裹里的商品,光有商品本身没法运输,你得把它装进纸箱,填上收件地址,再交给快递网点。网络里的“商品”是应用产生的数据,比如一条网页请求;“纸箱”是IP报文,里面装着源IP和目标IP;“地址标签”是MAC地址,它负责局域网内从一个端口到另一个端口的传递;“快递网点”就是交换机或者路由器。
整个过程最核心的动作叫作封装。应用数据往下走,经过传输层加上端口号,经过网络层加上IP地址,再经过数据链路层加上MAC地址,最后变成01比特流从网线上发出去。到了对端,再按相反顺序拆开,把真正的数据交给应用程序。听起来复杂,实际就是每一层只关心自己该看的字段:交换机主要看MAC帧头,路由器主要看IP报文头,终端则要把所有层都看完。
1.2 三个设备各管一段,别把职责弄混
很多排查思路混乱,根源就是把交换机和路由器的职责搞混了。
交换机工作在数据链路层,它的核心能力是“MAC地址寻址”。在同一个局域网(或者说同一个广播域)内,任何两台设备之间传递数据,靠的是MAC地址而不是IP地址。交换机不需要知道目标IP具体对应哪台机器,它只根据目的MAC地址查自己的MAC地址表,决定从哪个物理端口把帧发出去。如果表里查不到,它就把帧从除接收端口以外的所有端口复制一份,这个行为叫泛洪。
路由器工作在网络层,它的核心能力是“IP路径选择”。当数据要离开当前局域网,去往另一个网段时,交换机的MAC寻址就不够用了,因为MAC地址只在本地有意义,出了本网段你根本不知道对方的MAC是什么。路由器干的事是查看IP报文里的目标IP地址,然后查路由表,决定把数据包从哪个出接口送出去,并且把下一跳设备的MAC地址重新封装一遍。
终端设备则两头通吃:它既要在数据链路层把自己的MAC封装好,也要在网络层把IP封装好。如果目标IP和自己在同一个网段,就直接通过ARP拿到对方MAC,把数据交给交换机转发;如果目标IP不在同一网段,就先把数据交给默认网关,由网关继续往上传。
1.3 先分清“二层”和“三层”,后面所有内容都顺了
我面试网络岗位时喜欢让对方用一句话解释二层和三层。最直接的说法是:二层是“在一个广播域内,根据MAC地址把帧从A口送到B口”;三层是“在不同网段之间,根据IP地址决定这个包下一站该去哪”。
这句话看起来简单,但很多人栽跟头都是因为没守住这条线。举个例子,你给路由器接口配了IP地址,又启用了交换功能,那这个设备收到一个二层广播帧时,如果它没开三层接口的ARP代理,它不会因为自己配置了同网段IP就主动回应广播。因为它知道,二层广播是要在整个网段里泛洪的,只有终端设备才会根据目的IP判断这个ARP请求是不是问自己。设备角色的定位一旦混了,排查起来就会南辕北辙。
2. 交换机的转发细节:MAC地址表、ARP与广播域
很多新手一看交换机配置觉得简单,无非是VLAN、端口、Trunk,但真正决定交换机工作好不好的,是它对二层帧的处理逻辑。这一节我把交换机的转发过程拆开讲,重点说清楚MAC地址表是怎么来的、ARP在中间扮演什么角色、VLAN又是如何改变转发范围的。
2.1 MAC地址表不是配出来的,是“学”出来的
交换机刚插上电,MAC地址表是空的,它根本不知道每台设备连在哪个端口上。那它怎么工作?答案是边转发边学习。
假设PC-A接在交换机的G0/0/1口,PC-B接在G0/0/2口,PC-A向PC-B发数据。交换机从G0/0/1口收到一个帧,首先查看帧头里的源MAC地址,把这个MAC和入端口对应关系记到MAC地址表里——这就是自学习。接着再查目标MAC地址,如果表里没有PC-B的MAC,交换机就把这个帧从除G0/0/1以外的所有端口复制发送出去,这个过程叫泛洪。PC-B收到后发现自己MAC匹配,就会回应。回帧从G0/0/2口进入交换机时,交换机同样先学习PC-B的MAC地址,那么下一次PC-A再发往PC-B,交换机查表就能精准地从G0/0/2口转发出去,不再泛洪。
这个过程就是“一开始广播找路,找到之后精准转发”。MAC地址表本身有老化时间,常见默认是300秒,意思是如果一段时间内某个MAC不再发数据,表项就被老化删掉。这样设计是为了适应网络拓扑变化,比如设备换了个端口接入,交换机不会一直沿用旧表项。
2.2 ARP:IP地址和MAC地址之间的“翻译官”
只看MAC地址表还不够,因为终端用户输入和配置的是IP地址,而以太网帧里填的是MAC地址。那么终端怎么知道目标IP对应的MAC是什么?靠ARP协议。
ARP的工作过程并不复杂。如果PC-A要和192.168.10.20通信,它先查自己的ARP缓存表,没有对应表项就发一个ARP广播请求,内容大致是“谁是192.168.10.20?请把你的MAC地址告诉我”。这个广播会到同一个局域网内所有设备,只有IP地址匹配的PC-B才会回一个ARP应答单播,内容是“我是192.168.10.20,我的MAC是xx:xx:xx:xx:xx:xx”。PC-A收到后把对应关系写进ARP缓存,然后正常封装二层帧发送数据。
这里有一个非常容易忽略的细节:交换机不参与ARP应答,它只负责把广播帧泛洪到所有端口,再把应答帧按MAC地址表转发回去。ARP表是终端和路由器才需要维护的。所以排查时如果发现设备能Ping通IP但显示“无法访问目标主机”,先看ARP缓存是否解析到了错误MAC,这种坑我在公司网络里踩过不止一次。
2.3 VLAN对信息传递范围的改变
默认情况下,交换机所有端口都在同一个广播域里,一台机器发ARP广播,全交换机的端口都能收到。为了隔离广播,就有了VLAN(虚拟局域网)。
划分VLAN之后,交换机把物理端口逻辑上分成多个独立的二层域。比如VLAN10里有PC-A和PC-C,VLAN20里有PC-B,那么PC-A的广播帧只会在VLAN10内泛洪,PC-B完全收不到。这意味着什么?信息传递的路径被改变了:原本交换机可以“看到”所有设备,现在它只在一个VLAN内学习MAC地址、维护MAC地址表,不同VLAN之间的二层通信彻底切断。
那么不同VLAN之间怎么通?必须依靠三层设备,要么接路由器的子接口,也就是单臂路由,要么用三层交换机配VLANIF接口作为各VLAN的网关。这带来一个常见操作误区:很多人给PC配好IP和网关,结果跨VLAN不通,就以为交换机端口配置错了,实际上应该先检查三层设备上有没有对应VLAN的网关地址,以及路由表是否可达。
2.4 交换机转发过程中的常见隐患
交换机平时很稳定,但转发链路上会有几种隐蔽问题。
第一种是MAC地址漂移。如果网络里出现环路,或者同一条线缆两头误接,交换机会在短时间内从不同端口学到同一个MAC地址,导致MAC地址表疯狂刷新,数据帧在多个端口之间反复转发。现象就是网络时通时断、延时抖动剧烈。需要开启STP/RSTP协议,并且查一下是否有非法设备把两个口短接。
第二种是单播泛洪。当MAC地址表老化、或者目标MAC长时间没通信导致表项丢失,交换机把所有单播帧当广播处理,帧在所有端口转发,一方面浪费带宽,另一方面大量无关设备会不断唤起中断,CPU占用也会受影响。所以网络中频繁出现大量广播或未知单播泛洪,要怀疑是否有设备在持续发往一个已经不在线的目标MAC。
第三种是Trunk口放行VLAN遗漏。跨交换机传递不同VLAN的帧时,Trunk链路必须允许对应VLAN通过。漏配是配置低错,但表现却很迷惑:同一VLAN内的设备跨交换机就Ping不通,单台交换机内部却一切正常。这种问题用抓包工具很难一眼看出,我通常直接查两端Trunk接口的allowed VLAN列表。
3. 路由器的转发细节:路由表、TTL与网关的真相
交换机把数据送到广播域的边界以后,如果目标IP不在本地网段,就需要路由器来接手。路由器的决策过程看起来很“傻瓜”:拧开IP报文头,读目标IP,查路由表,选择最长匹配的出接口,然后把报文重新封装发出去。但正是这个看似简单的动作,里面藏了一批值得展开说的知识点。
3.1 路由表三要素与最长前缀匹配
任何一条路由表项,核心就三件事:目标网络、出接口、下一跳地址。路由器收到一个报文时,提取出目标IP,跟路由表里的网络号逐个比对。比对规则不是“相等就行”,而是“前缀越长越优先”,这就是最长前缀匹配原则。
说个例子,假设路由表里有两条路由:一条是192.168.10.0/24,另一条是0.0.0.0/0默认路由。现在来了一个目标IP是192.168.10.5的报文,它同时匹配这两条路由,但/24的掩码比/0更长,更精确,所以路由器会选择走192.168.10.0/24那条,而不会因为默认路由更“懒”就直接丢给默认出口。这个机制保证了局部路径总是优先于兜底路径。
还有一个容易混淆的点:路由器查的是“目标IP所在网络”,不是“目标IP是多少”。因为路由表无法容纳所有单个IP,它只需要按网段方向转发。所以给设备规划IP时,子网掩码就是路由器做聚合判断的第一依据,掩码一旦配错,数据就会走向完全错误的下一跳。
3.2 跨越网段时,路由器改了什么、没改什么
这是全网最容易让人迷惑的地方。数据包在穿过路由器时,源IP和目标IP全程不变,变化的是二层帧头里的源MAC和目标MAC。
还用快递来类比:包裹上写的寄件人和收件人不会因为中转站而改变,但每个中转站会在包裹外面重新贴一张“上一站和下一站”的运输标签。路由器就是这样一个中转站,它从出接口把报文发往下一跳设备之前,需要重新封装一个新的以太网帧头,源MAC改成自己出接口的MAC,目标MAC改成下一跳设备的MAC。
所以你在抓包时会发现,同一个IP数据包,在PC侧抓到的帧头MAC是“PC发给网关”,而到了公网出口或服务器侧抓到的帧头MAC已经变成了“路由器发给路由器”,但IP头里源地址和目标地址始终没有变。明白了这一点,就不会再问“为什么中间经过这么多设备,IP地址不用改”这种基础问题了。
3.3 TTL与校验和:路由器还要给报文“续命”
路由器转发的时候,还会对IP头部里的TTL字段做减一操作。TTL的原始设计是防止报文在网络里死循环,每经过一个路由器就会减1,减到0时路由器把这个包丢弃,并回送一个ICMP超时报文给源端。
这个机制直接影响了我们排查链路质量时用的traceroute命令。traceroute就是故意构造一系列TTL从1开始递增的UDP包,每一跳路由器因为TTL超时回送ICMP,源端根据回包来源地址就能画出一条完整的路径。所以当某个节点没有回包时,除了可能是防火墙过滤了ICMP,也可能是路由器主动丢弃了TTL为0的报文。顺带提一句,路由器修改TTL之后还要重新计算IP头校验和,这个动作完全由硬件完成,很少出问题,但如果你做协议仿真或自研网络设备,校验和的算法务必严格按RFC来,不然包会被正常设备静默丢弃。
3.4 默认网关:终端手里最重要的“路由器地址”
很多人把默认网关理解成一个“出口设备”,实际上更准确地说,它是终端在配置IP时指定的一个三层地址,通常就是局域网内路由器接口的IP地址。终端判断逻辑非常简单:如果目标IP和自己处于同一网段,就直接通过ARP找目标设备MAC;否则就把报文交给默认网关,让网关去路由。
这里有一个常见坑:网关必须与终端IP在同一网段,且网关自身接口必须处于Up状态。如果PC配的网关地址虽然能Ping通,但它不属于本地网段,那么PC根本不会把它当网关用,数据会一直试图用ARP广播寻找一个不存在的目标MAC,结果是通往外网的流量全部超时。所以排查上外网问题时,第一步永远先用“ipconfig”看本机IP、掩码、网关三段信息是否自洽。
3.5 NAT:公网通信中“改写源地址”的特殊环节
虽然NAT不是路由器转发链路上必须的动作,但在绝大多数中小网络中,路由器出口都会启用NAT,让内网私有IP访问公网。信息传递到这里会多一步:路由器把内网报文的源IP地址和源端口替换成公网接口的IP和临时分配的新端口,同时保存一张转换表。回包到达路由器后,根据转换表把目标地址再改回原来的私有IP和端口,再交给内部交换机转发。
NAT让内网用户可以共享一个公网地址上网,但也带来一个副作用:公网上的服务器无法主动访问内网设备,因为内网所谓的“地址”在公网路由表里根本不存在。这不算缺陷,而是设计边界。明白这一点后,遇到“外网Ping不通内网服务器”的工单,就能快速解释清楚:不是路由坏了,是NAT的会话方向和连接发起方向导致的。
4. 终端设备在这套流程里做了什么
很多人觉得终端就是“发起请求然后收数据”,但实际上终端在信息传递中的参与度远比你想象得高。从输入一个网址到数据真正发出,终端内部按严格的顺序完成了一系列封装和查询动作,而且每一步都可能导致后续网络故障。
4.1 应用数据到网卡:一步步被“打包”
以用浏览器访问一个网页为例。浏览器通过HTTP构造一段请求数据,交给传输层。传输层协议选择TCP或UDP,并在头部加上源端口和目标端口。源端口由操作系统临时分配,比如49152到65535之间随机挑一个;目标端口则根据应用固定,HTTP通常用80或8080,HTTPS用443,DNS查询用53。
接着数据进入网络层,操作系统需要查路由表(终端的路由表非常简单,通常只有直连路由和默认路由),判断目标IP是否在本地网段。如果在本地,下一跳MAC就是目标设备;如果不在本地,下一跳MAC就是网关的MAC。然后网络层加上IP头,里面包含源IP和目标IP、TTL、协议号、校验和等字段。最后进入数据链路层,加上以太网帧头,包含源MAC、目标MAC和帧类型,再经过网卡转换成电信号发到网线上。
整个过程里,应用数据一次都没变,变的是外层包裹越来越多。这就是所谓“分层封装”。排查网络问题时,如果抓包能看到请求已经发出去但服务器没收到,问题通常出在中间设备;如果连抓包都看不到请求帧,多半是终端自己的路由判断或ARP解析出了问题。
4.2 终端怎么判断“直连”还是“走网关”
这个判断完全靠IP地址和子网掩码的按位与运算完成。比如终端IP是192.168.10.10,掩码是255.255.255.0,目标IP是192.168.10.88,两者与掩码运算后得到同一个网络号192.168.10.0,说明目标在同一个二层域内,直接发ARP找目标MAC。如果目标IP是203.0.113.88,运算后网络号是203.0.113.0,和本机网络号不一致,终端就会认为目标在“远方”,把发出的以太网帧目标MAC填成默认网关的MAC,而不是目标服务器的MAC。
这个“掩码运算决定下一跳”的机制,解释了为什么两台设备明明在同一台交换机上,却因为配置了不同的子网掩码,导致互相之间无法直接通信,必须借助路由器。很多新手遇到这个问题时,总觉得交换机端口有问题,其实二层链路完全正常,只是终端的路由判断让它们选择了不同方向。
4.3 终端上的ARP缓存和DNS缓存,别忽略
终端在数据发出前通常要做两次查询:一次是DNS,把域名解析成IP;另一次是ARP,把IP解析成MAC。DNS和ARP都会有缓存。
DNS缓存是把域名和IP对应关系暂存在本地,避免每次访问同一个域名都去请求DNS服务器。问题在于,如果网站换IP而本机缓存过期时间设置过长,你会持续访问到旧地址。排查时可以用“ipconfig /displaydns”查看缓存,用“ipconfig /flushdns”清掉重查。
ARP缓存同样有坑,最常见就是网关MAC发生了变化(比如更换路由器后),终端还在使用旧ARP表项,结果是数据帧被发到了一个已经不存在的MAC地址上。如果Ping网关通、Ping外网不通,同时确认路由和NAT都没问题,可以先试“arp -d”清空终端ARP缓存再重试,这个操作成本低,却经常能解决莫名其妙的间歇性故障。
4.4 收到响应后的解封装
当终端收到一个以太网帧,网卡先判断帧头里的目标MAC是否与自身MAC一致,不一致就丢弃(除非网卡开启了混杂模式用于抓包)。一致则交给系统内核,内核剥掉二层帧头,看IP头里的目标IP是不是本机地址,如果是再剥掉IP头,交给对应的传输层协议。传输层看到目标端口后,找到正在等待该端口的应用进程,最后把应用数据交给进程处理。
所以一次网络通信的完整循环,就是发送端的“封装、查询、转发”和接收端的“匹配、解封装、交付”。理解了这套动作,后面再看端到端通信演示就会轻松很多。
5. 一次完整通信过程的逐跳复盘
理论讲完,我挑一个典型拓扑从头到尾走一遍,把每一步涉及的设备动作明确列出来。请把下面出现的IP地址仅当作示例来看待,实际配置时请按你规划的内网地址和出口信息填写。
5.1 示例环境说明
PC-A是一台终端,IP是192.168.10.10/24,MAC示例为02:00:00:00:00:01,默认网关是192.168.10.1。它连接交换机SW-A的G0/0/1口。SW-A上划分了VLAN10,G0/0/1口属于VLAN10,上行口G0/0/24以Trunk方式连接路由器R1的子接口。R1的LAN侧子接口地址是192.168.10.1/24,WAN侧接口地址是203.0.113.1/24,并启用NAT。目标服务器S的IP是198.51.100.88/24,它连接在另一台路由器R2上,R2与R1之间通过一条直连链路相连,R1侧地址为203.0.113.254/30,R2侧地址为203.0.113.253/30。
5.2 第1步:PC-A发请求,交换机第一次转发
PC-A打开浏览器访问http://example.com,先查DNS缓存,没有就向配置的DNS服务器发送DNS查询。DNS解析完成后得到198.51.100.88,与自己的192.168.10.10/24做掩码运算,发现目标不在同一网段,于是决定交给默认网关192.168.10.1。
接着查ARP缓存,如果没有网关对应的MAC,就发ARP广播请求“谁是192.168.10.1”,R1的子接口收到后应答自己的MAC(示例02:00:00:00:00:02)。PC-A得到网关MAC,封装以太网帧:源MAC是02:00:00:00:00:01,目标MAC是02:00:00:00:00:02,IP报文的源IP是192.168.10.10,目标IP是198.51.100.88。
交换机SW-A从G0/0/1口收到这个帧,先学习源MAC 02:00:00:00:00:01对应G0/0/1,再查目标MAC 02:00:00:00:00:02。这个MAC是R1子接口的MAC,它之前已经通过其他帧学到位于G0/0/24口方向,因此交换机直接把这个帧从G0/0/24口发给了R1,整个过程中交换机的判断只看MAC,不关心IP目标是谁。
5.3 第2步:R1收到帧,查路由表并NAT
R1从子接口收到帧,剥掉二层帧头,看到目标IP是198.51.100.88。它在路由表里查找,发现有一条经203.0.113.254出接口发往198.51.100.0/24的路由。因为报文要从内网接口进来、外网接口出去,并且内网是私有地址,所以R1执行NAT转换,把源IP从192.168.10.10改为WAN口地址203.0.113.1,同时记录一张“内网192.168.10.10:端口号 映射到 203.0.113.1:新端口号”的表项。
然后R1需要把报文从WAN接口发给下一跳R2的接口203.0.113.253。它先查ARP缓存找203.0.113.253的MAC,如果没有就发ARP请求,得到R2的MAC后重新封装帧:源MAC改为自己的WAN接口MAC,目标MAC改为R2接口MAC,IP头里的源IP已经是203.0.113.1,目标IP保持198.51.100.88不变。
5.4 第3步:R2转发到服务器S,S回包
R2从接口收到帧,同样剥掉二层头,查看目标IP 198.51.100.88,匹配直连路由198.51.100.0/24,于是向同网段直接交付。R2查ARP缓存找到服务器S的MAC,封装二层帧发送出去。服务器S收到后,按协议栈解封装,把HTTP请求交给Web服务进程处理。
S回复响应时,目标IP是203.0.113.1(它看到的源地址是NAT转化后的公网地址),于是把回应帧发给自己的网关R2。R2查路由表,发现有去往203.0.113.0/24的直连路由,于是发给R1。R1收到后查NAT转换表,发现目标IP 203.0.113.1加对应端口正好命中内网192.168.10.10,于是把目标IP改回192.168.10.10,并通过VLAN10子接口把帧重新封装后发到交换机SW-A上。SW-A查MAC表,从G0/0/1口发给PC-A。PC-A解封装后,浏览器渲染出页面。
5.5 往返过程中哪些字段变了
为了更直观,我用一张表总结这个过程里IP和MAC的变化:
| 传递区间 | 源MAC | 目标MAC | 源IP | 目标IP |
|---|---|---|---|---|
| PC-A到R1途中 | 02:00...:01 | 02:00...:02 | 192.168.10.10 | 198.51.100.88 |
| R1到R2途中 | R1的WAN接口MAC | R2接口MAC | 203.0.113.1(NAT后) | 198.51.100.88 |
| R2到服务器S途中 | R2接口MAC | S的MAC | 203.0.113.1 | 198.51.100.88 |
| S回到R2途中 | S的MAC | R2接口MAC | 198.51.100.88 | 203.0.113.1 |
| R2回到R1途中 | R2接口MAC | R1的WAN接口MAC | 198.51.100.88 | 203.0.113.1 |
| R1到PC-A途中 | 02:00...:02 | 02:00...:01 | 198.51.100.88 | 192.168.10.10(NAT回译) |
IP地址只在NAT边界发生变化,MAC地址则在每一跳都会变化。这个表是我做网络培训时反复强调的,大部分数据传递困惑,看到这张表基本都能解开。
6. 常见问题与排查技巧实录
原理归原理,真实网络环境里的故障通常不会按教科书出牌。这里整理几个我实际遇到过的典型场景,每个问题都给出排查顺序,尽量可以直接照着做。
6.1 现象:能Ping通网关,但上不了外网
这是一个非常经典的定位问题。能Ping通网关,说明PC到交换机再到路由器LAN侧的链路、ARP、二层转发都没有问题。下一步要做的是“ping外网地址”,比如直接Ping公网示例地址203.0.113.1,不要Ping域名,因为要排除DNS因素。
如果直接Ping公网IP也通,那就是DNS配置、DNS解析或浏览器代理问题;如果公网IP不通,问题基本集中在路由器侧,重点查三件事:默认路由是否存在、NAT是否启用、WAN口地址是否真的可用。我见过太多案例,路由器配置了默认路由但忘了做NAT,内网能出去但回不来,表现就是“出去的时候一切正常,回包全部丢失”。用抓包软件在路由器WAN口抓包,如果能持续看到出去的包但没有回包,基本可以判断是NAT或回程路由的问题。
6.2 现象:跨VLAN互访不通
跨VLAN通信必须走三层网关,所以先确认PC的网关地址配的是不是三层交换机的VLANIF地址。接着在各VLAN终端上分别Ping自己的网关,如果Ping不通,问题在二层:端口是否划分到正确的VLAN、Trunk口是否放行该VLAN、终端的VLAN是否与交换机端口VLAN一致。
如果Ping网关都通,再从一个终端Ping另一个终端的IP地址。不通时,到三层交换机上查看路由表,看是否存在两个VLAN网段的路由。对于单臂路由接外部路由器的情况,还要检查路由器的子接口封装是否和交换机Trunk口匹配,VLAN ID是否一致。这个故障里最容易忽略的是“终端的子网掩码填错”,比如两个段本来隔着路由器但掩码填成16位,终端会认为对方在同一网段,直接走ARP,结果自然失败。
6.3 现象:时通时断,抓包看到大量重复ACK或重传
这种问题往往不是配置错误,而是链路质量问题。可以先用ping加持续参数观察丢包率,再到交换机上看端口计数里的CRC错误、FCS错误、丢包计数。CRC错误多,先怀疑物理层:网线质量、水晶头接触不良、电磁干扰、双绞线绞合度不够。FCS错误则更多指向对端设备发送帧时已经损坏。
如果是无线环境,时通时断还可能是信道干扰或信号弱,信号强度看着不低,但误码率和重传率已经很高。我建议先固定终端到某个测试位置,用有线对比,能快速区分是无线问题还是上层问题。
6.4 排查命令四件套:ping、arp、route、traceroute
不会用命令排查,就永远只能瞎猜。我最常用的四个命令是ping、arp、route、traceroute,在不同系统里参数略有差异。
先ping网关验证本段链路,再ping远端验证跨网段路径;如果通了,继续ping域名验证DNS;然后看arp表确认网关MAC是否在预期接口,看route表确认默认路由和回程路由方向,最后用traceroute定位具体卡在哪一跳。抓包工具是兜底手段,尤其是很难用肉眼判断协议交互时。但注意,抓包要抓对位置:排查内网问题时在终端抓;排查NAT问题时在路由器WAN口抓;排查跨交换机VLAN问题时,在Trunk链路上抓才能看到VLAN标签。
6.5 常见问题速查表
| 现象 | 优先检查方向 | 常见根因 |
|---|---|---|
| 能通网关,外网不通 | 路由、NAT、DNS | 默认路由丢失、NAT未配置、DNS不可达 |
| 同一交换机内跨VLAN不通 | 网关VLANIF、Trunk放行 | VLANIF未配、Trunk端口未放行VLAN |
| 时通时断、延迟抖动 | 物理链路、端口计数 | 网线质量问题、环路、双工不匹配 |
| 两台同网段PC不通 | ARP、VLAN、本机防火墙 | ARP表异常、设备隔离、防火墙拦截 |
| 上外网慢但Ping公网IP正常 | DNS、代理、MTU | DNS解析慢、MTU过大导致分片丢包 |
| 服务器对外服务访问不了 | 端口映射、NAT、安全策略 | 端口映射错误、回程路由缺失 |
这张表不能覆盖所有情况,但能帮你快速定位大概率方向,剩下的再靠抓包确认。
7. 最后想分享的几点经验
我自己带团队时最常说的一句话是:网络排查不是背命令,而是把信息传递过程具象化。每当故障不好定位时,我都会在纸上画出源IP、目标IP、源MAC、目标MAC,然后一步一步想清楚“当前这个节点到底在看哪层的东西”。只要把“交换机看MAC、路由器看IP、终端看全部”这条主线抓住,绝大多数问题都能有条理地排查下去。
还有一个小技巧是,在允许的条件下,抓包时一定要把“跟随TCP流”功能用起来。单看一个包没意义,只有把同一会话里所有包按顺序串起来,你才能看到请求请求到哪断了、回包回在哪一步消失。从我处理过的案例来看,很多“网络慢”本质上是应用层等待过长,底层转发很快,只是表现像网络问题。这种时候不要急着怀疑交换机路由器,先看服务器处理时间和TCP握手时延。
信息传递原理看起来枯燥,但它是整个网络技术体系的地基。如果这篇文章能让你脑子里多一张“数据包行走地图”,那我的目的就达到了。以后遇到设备间通信问题,请先从地图上找“当前包走到的位置”,再动手查配置。虽然不能保证一次解决所有故障,但至少不会让排查过程漫无目的地瞎转。