前几天同事跑过来,说办公室一台电脑上不了网。现象很典型:聊天软件收发消息都正常,浏览器却打不开任何网页。我过去看了一眼,ping 网关是通的,ping 公网 IP 也通,但用域名访问就是不行。敲了一条 nslookup,发现解析出来一个明显不对的地址。清掉 DNS 缓存、把首选 DNS 改回自动获取,问题当场消失。就这么个基础问题,不懂原理的人折腾一上午,最后多半要重装系统。
很多人觉得“网络基础”就是背背 TCP/IP、认认路由器,真碰到故障还是两眼一抹黑。实际上,绝大多数网络故障的根子,恰恰出在最基础的几件事上:IP 配错、掩码算错、网关失效、DNS 解析异常、路由缺失。这篇我打算换个讲法——不从协议栈开始念经,而是从一次网页访问讲起,把 IP、子网掩码、DNS、交换机、路由器和 TCP 握手串成一条线,再落到实际排障的方法和真实案例上。适合刚入行的运维、想考网络基础认证的学习者,也适合那些天天用网但一出问题只能求助的普通办公族。
1. 先搞清楚一次网页访问背后的完整链路
1.1 从输入域名到页面显示,中间经过了多少道工序
我先问一个问题:你在浏览器地址栏输入一个网址、按下回车,到页面显示出来,这中间网络层面到底发生了什么?能完整把这十步讲清楚的人,网络基础基本就过关了。
第一步,浏览器先看这个地址合不合法,提取出协议类型和域名。第二步,查域名对应的 IP——这就是 DNS 要做的事,浏览器先去自己缓存里翻,翻不到就去 hosts 文件里找,再找不到交给操作系统配置的 DNS 服务器,由它一层层问上去,最终拿到一个 IP。第三步,浏览器用这个 IP 去连目标服务器的 80 或 443 端口,正式通信前先做 TCP 三次握手。第四步,握手完成,浏览器构造一个 HTTP 请求,包含请求方法、路径、头部信息等,发给服务器。第五步,数据从浏览器出来,一层层往下封装:传输层加 TCP 头、网络层加 IP 头、数据链路层加以太网头,最后变成比特流从网卡发出去。第六步,这串比特流先到交换机,交换机根据 MAC 地址表把帧转发到网关路由器。第七步,路由器查路由表,决定从哪个接口转发出去,一路经过多个路由器,最终到达目标服务器所在的网络。第八步,服务器收到请求,处理完把响应数据再一层层封装,原路返回你的电脑。第九步,浏览器收到响应,按 HTML、CSS、JavaScript 逐步解析渲染。第十步,页面显示出来,同时连接可能继续保持,也可能按协议规范关闭。
这十步里,每一步都对应一个或几个基础知识点。比如“交换机根据 MAC 地址转发”对应二层交换,“路由器查路由表”对应三层路由,“TCP 三次握手”对应传输层,“DNS 查询”对应应用层。所以别把网络基础理解成孤立的名词,它是一个完整流程上的不同环节。
1.2 OSI七层模型与TCP/IP四层模型:别死记,按需理解
教科书上一定会讲 OSI 七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。很多初学者背完就忘,因为实际工作中没人按七层来排查问题。真正广泛使用的是 TCP/IP 四层模型:网络接口层、网络层、传输层、应用层。
我给你的建议是,七层只记两件事:第一,它是参考模型,用来帮助理解“每一层各管什么”;第二,实际排障时最多用到四层就够。核心记忆点是:
- 应用层管“数据长什么样”,典型协议有 HTTP、HTTPS、DNS、DHCP、FTP。
- 传输层管“从哪个进程到哪个进程”,用端口号区分,典型协议是 TCP 和 UDP。
- 网络层管“从哪个 IP 到哪个 IP”,负责寻址和路由选择,核心协议是 IP,辅助有 ICMP、ARP。
- 链路层管“同一条链路内怎么传帧”,用 MAC 地址标识设备接口。
对应关系上,物理层和数据链路层大致对应 TCP/IP 的网络接口层;会话层和表示层的功能在现代网络里基本被应用层协议自己吸收了,所以不用单独记。真正的排障思路是“自下而上”:先看链路通不通,再看 IP 通不通,再看端口通不通,最后看应用层返回什么。
2. IP、子网掩码与DNS:地址体系是最常翻车的地方
2.1 IP地址结构、分类与私有地址段
我修过的故障里,至少三成和 IP 地址配置错误有关。所以这一节值得你花最多时间。
IPv4 地址是 32 位二进制,写成点分十进制,比如 192.168.1.10。这 32 位分成两部分:网络部分和主机部分。网络部分标识你所在的那个“网段”,主机部分标识网段里的“哪一台设备”。问题来了,32 位里前多少位是网络部分?这就需要子网掩码来划分,比如 255.255.255.0 表示前 24 位是网络部分,后 8 位是主机部分,写成 CIDR 就是 /24。
传统上 IP 分 A、B、C 三类:A 类前 8 位是网络位,地址范围 1.0.0.0 到 127.255.255.255;B 类前 16 位是网络位,范围 128.0.0.0 到 191.255.255.255;C 类前 24 位是网络位,范围 192.0.0.0 到 223.255.255.255。这些分类在现代无类路由(CIDR)时代已经不太重要,但有三种特殊地址必须记住:
- 127.0.0.1 是回环地址,代表设备自己,ping 通则说明本机协议栈正常。
- 私有地址段有三段:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16,这些地址只能在局域网内部使用,不能直接在互联网上路由。
- 169.254.x.x 是自动专用 IP,设备没拿到 DHCP 地址时会自己分配一个,看到这个地址基本能断定 DHCP 出了问题。
判断一个网段里有多少可用主机,公式是 2 的主机位数次方减 2,减掉的是网络地址和广播地址。比如 /24 网段,主机位 8 位,可用主机数 254 台。这个公式非常重要,后面划分时全靠它。
2.2 子网划分手算:把 192.168.1.0/24 切成4个子网
子网划分表面上是数学题,实际上是工程问题。我给你一个必须能手算的例子。
现有 192.168.1.0/24,需要等分成 4 个子网。要分 4 个,就需要从主机位借 2 位,因为 2 的 2 次方等于 4。借完后前缀从 /24 变成 /26,子网掩码从 255.255.255.0 变成 255.255.255.192。这里有个快速算法:把 255.255.255.192 的最后一个 192 用 256 减,得到 64,这个 64 就是每个子网的“块大小”,也就是它能容纳的地址数量。
四个子网分别是:192.168.1.0/26、192.168.1.64/26、192.168.1.128/26、192.168.1.192/26。每个子网里的具体地址怎么算?以 192.168.1.64/26 为例,块大小 64,所以网络地址是 .64,下一个子网的网络地址是 .128,那么本子网的广播地址是下一个网络地址减 1,即 .127。可用主机地址从 .65 到 .126,一共 62 个。
我再给你一个更极端的例子:点对点链路常用 /30 子网。主机位只有 2 位,可用主机数是 2 的 2 次方减 2,等于 2。一个子网里恰好放两个地址,一台设备一个,正好用于路由器之间的互联。很多人不理解为什么 /30 只有 2 个可用 IP,就是因为网络地址和广播地址各占了一个。搞懂这几个例子,市面上绝大多数子网划分题你都能应对。
2.3 DNS解析流程:从域名到IP的那一跳
DNS 是很多人忽视的重灾区。上面那个故障案例里,聊天软件能用是因为它直连服务器 IP 或者内部自己做了 IP 记录,不走域名解析;浏览器打不开网页是因为所有 HTTP 访问都要先把域名解析成 IP。一个 DNS 挂了,表现就是“有的应用正常,有的应用全挂”。
完整 DNS 解析流程是这样的:客户端先查本地 DNS 缓存,没有就查 hosts 文件,再没有就把请求发给本地配置的 DNS 服务器(递归服务器)。递归服务器自己也没有时,会从根 DNS 服务器开始,一级一级往下问:根服务器告诉它“.com 的权威服务器在哪”,.com 权威服务器告诉它“example.com 的权威服务器在哪”,最终拿到真正的解析结果,再返回给客户端,同时缓存一份。
这个过程里常见问题有三种。第一种是 DNS 服务器本身不可达,表现为 nslookup 超时,解决方法是换一个可用的 DNS 地址。第二种是 DNS 缓存污染或缓存了过期记录,表现是清缓存前解析结果不对、清完后恢复正常。第三条是 hosts 文件被写入异常条目,很多人装了某些软件后 hosts 被改,访问特定域名时被解析到错误 IP。排查时先 nslookup 看解析结果对不对,再清缓存验证,基本能定位。
3. 交换、路由与传输层:数据转发的三个关键环节
3.1 交换机凭什么能把帧送到正确端口:MAC地址表
同一局域网里的两台电脑通信,靠的是交换机。交换机是二层设备,它不认识 IP,只看 MAC 地址。它的核心数据结构叫 MAC 地址表,记录的是“哪个 MAC 地址从哪个端口学到的”。
MAC 地址表怎么建立?靠自学。当一台设备发出一个数据帧时,交换机会读取帧头里的源 MAC 地址和进入的端口号,把对应关系写进表里。之后如果收到目的 MAC 在这张表里的帧,就直接从对应端口转发;如果目的 MAC 不在表里,就向除了入端口以外的所有端口泛洪,等目标设备回包后再把新 MAC 地址学进表里。
这里有个非常经典的排查点:MAC 地址表会老化,一般默认 300 秒没通信就删除。如果局域网里有人私改 IP 或者出现地址冲突,MAC 地址表会频繁变化,表现就是网络时通时断。查这类问题,在交换机上查看 MAC 地址表的变化情况是最直接的手段。另外,交换机隔离冲突域但不隔离广播域,局域网内广播帧多了会拖慢所有人,这也是 VLAN 技术出现的原因,不过那是进阶内容了。
3.2 路由器如何选择下一跳:路由表与最长前缀匹配
跨网段通信必须靠路由器。路由器是三层设备,看的是 IP 地址。每个路由器维护一张路由表,里面写着“去哪个网段,从哪个接口出,下一跳是谁”。
路由表里的路由来源主要有三种:直连路由、静态路由、动态路由。直连路由是路由器自己接口所在网段,不需要配;静态路由是管理员手写的,适合小网络;动态路由靠路由协议(比如 OSPF)自动学习,适合大网络。日常排障里最常检查的是静态路由和默认路由是否配错。
路由器选路有个核心原则叫“最长前缀匹配”。目的 IP 同时匹配路由表里多个条目时,前缀越长越精确的条目优先。举例,路由器上有两条路由,一条是 192.168.1.0/24,另一条是 192.168.1.128/25。去往 192.168.1.130 的包会匹配后一条,因为 /25 比 /24 更精确。如果你错误配置了一条 /16 的汇总路由,很可能会把本应走精确路由的流量引到错误方向。
另一样东西必须理解:默认路由。它的写法是 0.0.0.0/0,表示“所有没匹配上的目的地址都走这里”。对于普通家用路由器,默认路由就是“出口网关”,指向运营商那侧。如果你发现一台设备的默认路由丢了,必然上不了外网,这属于路由层面的经典故障。
3.3 TCP三次握手与四次挥手:连接是怎么建立的
传输层里,TCP 提供的是可靠、有连接、按序到达的传输服务,UDP 提供的是无连接、不可靠但高效的传输。HTTP、HTTPS、邮件、文件传输这类需要完整性的应用走 TCP;视频通话、实时游戏、DNS 查询这类更强调速度或本身简单短小的应用走 UDP。
TCP 三次握手的具体过程值得你把报文细节记下来。第一步,客户端发送一个 SYN 包,随机初始化序号,假设 Seq=1000,标志位 SYN=1。第二步,服务器收到后回复 SYN+ACK 包,自己的序号假设 Seq=2000,确认号 Ack=1001,表示“我收到你的 1000 了,下次请从 1001 开始发”。第三步,客户端再回一个 ACK 包,Seq=1001,Ack=2001,握手建立。为什么要三次而不是两次?核心是确认双方的收发能力都对端可见。两次握手时,服务器无法确认客户端收到了自己的 SYN,可能客户端根本不知道服务器准备好了,连接就悬空了。
四次挥手则是断开连接的过程。主动方先发 FIN,被动方回 ACK,被动方再发 FIN,主动方最后回 ACK。其中被动方发完 ACK 到发 FIN 之间可能隔了一段时间,因为还有数据没传完。主动方收到 FIN 后会进入 TIME_WAIT 状态,等待一段时间确保网络里残留的数据包消失。排查连接问题时,netstat 看到大量 TIME_WAIT 是正常的,但看到大量 SYN_SENT 就说明对方端口可能没监听或防火墙拦截了。
3.4 UDP、NAT与DHCP:轻量协议与家庭网络的幕后功臣
说完 TCP,再看 UDP。UDP 没有握手过程,发出去就完了,所以延迟低,适合实时音视频。DNS 查询也用 UDP 的 53 端口,因为大多数域名解析请求就是一个问一个答,没必要建立完整连接。如果你遇到 DNS 解析超时,有时候是因为 UDP 被限制或丢包,换个 TCP 模式的 DNS 查询反而能通,这也是一种排障思路。
NAT(网络地址转换)是家庭网络离不开的技术。因为公网 IPv4 地址数量紧张,局域网里全是私有地址,这些地址没法直接在互联网上路由。NAT 的作用就是在路由器上做一个映射:内网设备访问外网时,路由器把私有源地址和端口改成自己公网接口的地址和端口,并记录一张映射表;外网回来的包根据这张表再转回对应内网设备。这就是为什么内网主机访问外网“只需要一个公网 IP”的原因。
DHCP 则是自动发地址的管家。新设备接入网络时,发送 DHCP Discover 广播找 DHCP 服务器;服务器回 DHCP Offer 提供可用地址;设备回 DHCP Request 请求使用这个地址;服务器最后确认 DHCP Ack。这四步记不住也没关系,你只要知道:DHCP 分配的要素包括 IP 地址、子网掩码、默认网关、DNS 服务器。一个常见故障是 DHCP 地址池耗尽,新设备拿不到地址,表现就是“别人都能上网,新来的上不了”,检查 DHCP 服务器的租约是排查方向。
4. 网络排障必备:工具、命令与判断思路
4.1 先看通不通,再看丢不丢:ping与ICMP的正确用法
ping 是最基础也最常用的工具,原理是发送 ICMP 回显请求,目标设备回 ICMP 回显应答。用 ping 能确认两件事:目标 IP 是否可达、往返延迟和丢包情况。
我建议初学者掌握几个关键用法。第一,持续 ping 时会看到延迟和 TTL 的变化,TTL 值每次减一,可以帮助判断路径上经过了几个路由器。第二,先 ping 127.0.0.1 确认本机协议栈正常,再 ping 自己网段的 IP 确认链路,再 ping 网关确认能出本网段,最后 ping 公网 IP 确认外网链路。这个顺序是从近到远逐层排除。第三,不要一看到“请求超时”就判断对方关机,很多设备配置了防火墙规则,直接丢弃 ICMP 包,但 HTTP 服务是正常的。这时候该换个方式验证,比如用 telnet 测端口或抓包看实际情况。
4.2 卡在哪一跳:tracert的解读技巧
tracert(Linux 上是 traceroute)用来查看数据包从本机到目的地址经过的路径。原理是利用 TTL 机制:发送 TTL=1 的包,第一个路由器收到后 TTL 减到 0,回一个 ICMP 超时消息,于是本机知道了第一跳;再发 TTL=2 的包,拿到第二跳,以此类推。
看 tracert 输出时注意到两种现象。一是中间某跳“超时”但下一跳正常,这通常说明中间路由器不回显 ICMP,防火墙拦截了,不一定是故障。二是连续多跳都超时、最后一跳也收不到,那才是真断了。断点时,看你最后能到达的跳数和它的 IP 段,基本能判断故障出在哪个环节——是运营商链路上还是目标服务器防火墙。相比 ping,tracert 信息量更大,能把“通但慢”和“根本不通”区别开。
4.3 抓包看证据:三次握手一次看清
排障到了最后一步,往往要抓包看证据。抓包工具现在免费开源的产品很多,最常见的那款基本上人人装。它的核心操作只有几个:选对网卡、设好过滤规则、开始抓包、停止分析。
抓包的第一课是抓 TCP 握手。你启动抓包,然后在浏览器访问任意网站,再停止。过滤出目标 IP,就能看到 SYN、SYN+ACK、ACK 三个包,红色标记通常代表异常,比如只有 SYN 发出但没有回应,说明连接被丢被拦。抓包还能直接看到 DNS 查询和响应,快速判断是“解析很慢”还是“解析失败”。真正的网络排查,很多时候一句话解释不清,抓到包一看立刻明白。
4.4 高频命令速查表
我整理了一张表和每个命令最常用来查什么的说明,建议收藏:
| 命令 | 作用 | 典型场景 |
|---|---|---|
| ping / ping -t | 测试可达性和丢包延迟 | 判断链路和 IP 层是否通 |
| ipconfig /all | 查看本机 IP、掩码、网关、DNS | 确认本机配置是否正常 |
| ipconfig /flushdns | 清空 DNS 缓存 | DNS 缓存污染时 |
| nslookup 域名 | 查询域名解析结果 | 判断 DNS 解析对不对 |
| tracert 目标IP | 查看路径经过的路由 | 定位断点和延迟点 |
| netstat -ano | 查看端口监听和连接状态 | 判断端口是否被占用、TCP 状态 |
| arp -a | 查看 ARP 缓存表 | 排查 IP 和 MAC 对应关系异常 |
| route print | 查看本机路由表 | 检查默认路由是否缺失 |
这些命令在不同系统里名字略有差异,但功能类似,学会一套到另一套触类旁通。
5. 三个真实故障案例:从现象一步步定位根因
5.1 案例一:聊天软件正常、网页打不开:多半是DNS的事
现象:办公室一台电脑,聊天软件收发消息完全正常,浏览器打开网页报“无法解析服务器地址”。很多人遇到这问题会去查网关、查防火墙,绕一大圈。
排查过程:我首先 ping 网关,通,延迟正常。再 ping 一个公网 IP,通,说明外网链路没问题。这就把范围缩小到“域名解析”环节。执行 nslookup 查一个常见域名,返回结果迟迟不出来,最后超时。再查本机 DNS 配置,发现首选 DNS 被改成了一个不可用的地址,可能是之前装某个软件改掉的。把 DNS 改成有效地址后,执行清缓存命令,网页立刻能打开。
原理很简单:聊天软件可能走的是 IP 直连或自带解析,不依赖系统 DNS;浏览器则必须通过系统 DNS 把域名翻译成 IP,DNS 不可用,自然什么都打不开。遇到这类“部分应用正常、部分不正常”的现象,第一反应就应该是 DNS。
5.2 案例二:手动改了IP之后连不上网:掩码和网关的锅
现象:有人手动配置了一个 IP 想固定地址,结果配置后内网其他机器能访问,但上不了外网。
排查过程:先看配置,IP 是 192.168.1.88,掩码却填成了 255.255.255.0,网关 192.168.1.1,表面上没问题。但 ping 网关发现通,ping 公网地址不通。打开路由表一看,只有一条 /24 的直连路由,没有默认路由。再检查才发现,手动配置时“默认网关”那一栏没填,或者填了却在保存时被清空。补上默认网关后,外网立即恢复。
这个案例教会一件事:上网不仅需要 IP 和掩码在同网段,还需要默认网关指向能带你去外网的那台设备。掩码错了可能造成本机以为目标地址在同一个网段,从而不把包交给网关,直接发 ARP 广播找对方,结果找不到,表现为“内网部分能通、外网不通”。所以手动配 IP 时,四个要素缺一不可:IP、掩码、网关、DNS。
5.3 案例三:跨网段访问时断时续:链路质量与路由配置综合排查
现象:办公室有两个网段,192.168.1.0/24 和 192.168.2.0/24,中间用路由器互联。最近从 1 网段访问 2 网段的服务器,时断时续,网页偶尔打不开,ping 偶尔丢包。
排查过程:先持续 ping 对端服务器地址,发现确实有规律性地丢包。接着 ping 中间路由器的接口地址,结果也有丢包。说明问题不在目标服务器,而在链路的某个环节。查看交换机端口统计,发现连接路由器那个端口出现大量CRC错误和冲突帧,换了一根网线后错误计数不再增长,丢包消失,问题解决。
这里要强调两点。第一,跨网段故障不能只看目标 IP,要分段排查,先确认到每一跳的连通性,再用排除法缩小范围。第二,物理层问题会被误判成 IP 层问题,看到 ping 丢包就怀疑路由配置,结果查半天配置没问题,最后发现是网线老化。所以排障顺序一定是从物理层往上层查,先确保链路可靠,再分析逻辑配置。
5.4 故障排查顺序速查表
我把常见现象、优先怀疑对象和对应命令整理成一个速查表,平时排查可以直接照着做:
| 现象 | 优先排查方向 | 常用命令/手段 |
|---|---|---|
| 完全无法上网 | 物理链路、DHCP、网关 | ping 127.0.0.1、ipconfig、ping 网关 |
| 部分应用正常但网页打不开 | DNS | nslookup、清 DNS 缓存 |
| 跨网段不通 | 路由表、网关配置 | tracert、route print |
| 时断时续、丢包 | 物理层、链路质量 | 持续 ping、查看端口错误计数 |
| 内网慢 | 广播风暴、环路、交换机端口 | 查看交换机 CPU、端口统计 |
| 端口不通但 IP 通 | 防火墙、服务未启动 | telnet IP 端口、netstat -ano |
6. 动手实验清单与避坑忠告
6.1 在家就能做的四个小实验
网络基础只靠看书是学不会的,必须动手。我推荐四个零成本或低成本实验,在家拿一台路由器和两台电脑就能完成。
实验一:手动配置静态 IP。关掉 DHCP,给两台电脑分别配 192.168.1.2 和 192.168.1.3,掩码 255.255.255.0,网关指向路由器内网口 IP,互相 ping 一下。再把掩码改成 255.255.255.128,观察两台设备是否还能直接互通,体会掩码对网段划分的影响。
实验二:抓包看三次握手。在一台电脑上开启抓包软件,另一台电脑访问某个网站,停止抓包,过滤出 TCP 流量,找到 SYN、SYN+ACK、ACK 三个包,逐个字段对照理论看一遍。看懂了这三个包,TCP 基础就有了六成。
实验三:改 DNS 观察解析变化。把电脑 DNS 改成不同地址,执行 nslookup 查同一个域名,比较解析结果和响应速度有没有区别。再手动向 hosts 文件里写入一条错误映射,访问该域名看被引导到错误地址,彻底理解 hosts 和 DNS 的关系。
实验四:搭一个局域网内的小型网站服务。在一台电脑上启动简易 Web 服务,监听 80 端口,用另一台电脑浏览器访问它的内网 IP,确认能访问后,再在本机用 telnet 测端口模拟访问,体会“端口通不等于服务好,服务好不等于端口通”的区别。
6.2 新手最容易踩的四个坑
第一个坑是改配置前不备份。改网关、改路由表之前最好把原有配置截图或导出,否则改坏了没法回退,只能凭记忆猜。第二个坑是同时改多个参数。一次只改一个变量,改完验证一个结果,否则故障出现时你根本不知道是哪个改动引起的。第三个坑是一上来就怀疑设备坏了。统计下来大多数故障纯粹是配置问题,先检查软配置,再怀疑硬件。第四个坑是不看日志、只猜原因。交换机、路由器、操作系统都有日志,里面有大量线索,比瞎猜强得多。
最后特别提醒一句:所有实验优先在模拟环境、实验环境或自己家里做,别拿生产环境的设备练手。改配置前确认自己有恢复手段,这是所有网络从业者必须刻在脑子里的习惯。
我自己学网络最大的体会是:别试图把每一层都背到完美再动手,带着问题去学才记得牢。很多概念,比如 ARP 到底解决什么问题、NAT 为什么需要端口映射,只有在你亲手抓包、亲手配错、亲手修复之后,才会真正理解。如果你现在一头雾水,建议先做第一和第二个实验,一边做一边对照文章里的知识点,很快就会有一条清晰的脉络浮出来。网络基础这座山,爬上去之后回头看,门槛其实不高,关键是别只背不练。