IP地址、子网掩码、网关、DNS:一文打通网络配置与排障
很多刚接触网络的人都有过这样一段经历电脑突然打不开网页了微信还能收消息刷一遍浏览器没用重启路由器也没用最后发现只是 DNS 配置被人改掉了或者是新装了一台 Linux 服务器ip addr看 IP 地址明明配置好了但就是 ping 不通外网查了一晚上原来网关地址少写了一位。这些问题的根源通常不是记不住 IP 地址、子网掩码、网关、DNS 的定义而是脑子里没有建立“数据包从本机出去之后到底发生了什么”的完整画面。我的判断是这四个参数不是四个孤立的知识点而是一条数据通路的四个环节。只要你能用自己的话讲清楚“一个数据包从 PC 到服务器经过哪几步、每一步用到哪个参数、哪个环节可以跳过”网络排障就已经成功了一半。这篇文章会用 60 分钟左右的阅读和动手时间从最基础的概念讲起然后落到 Windows、Linux、华为/H3C 设备的配置实验最后给出一套可以直接套用的排障顺序。无论你是准备 HCIA、HCIP、H3CNE、CCNA 这类网络方向认证还是日常开发和运维需要处理网络问题这套思路都适用。1. 这篇文章真正要解决的问题先做一个共识网络工程师面试、运维日常排查、开发联调环境里最常出现的三类问题其实都指向同一件事——你把 IP 地址、子网掩码、网关、DNS 的概念背熟了但在实际拓扑里不会排错。比如下面几个场景电脑能 ping 通网关但打不开网页问题在哪两台电脑接在同一个交换机上IP 分别是192.168.1.10/24和192.168.2.10/24不配网关能不能通信虚拟机网络模式选错了导致新建的虚机怎么都 ping 不通网关。Linux 服务器配置了 DNS重启网络后又还原成原来的值是系统问题还是配置方法问题如果你能准确回答这些问题那本文对你的价值更多是“把知识体系串一遍”。如果你看到这些问题时只能说出“IP 是地址、掩码是划分网段的、网关是出口、DNS 是解析域名的”但真要动手配置和排障时没有头绪那这篇文章就是为你准备的。本文的价值不在于堆概念而在于给你一条完整链路先理解四个概念再用一个最小实验拓扑把它们串起来最后整理出一套“分层测试”的排障方法。你在任何网络环境里遇到问题都可以按这套方法定位。2. 四个核心概念IP地址、子网掩码、网关、DNS2.1 IP地址主机在逻辑网络中的唯一标识IP 地址是网络层第三层的逻辑地址。IPv4 是一个 32 位二进制数习惯用点分十进制表示比如192.168.1.10。所谓“逻辑地址”是相对于网卡物理地址 MAC 而言的。MAC 地址出厂就烧在网卡上没有层次结构只能靠交换机逐台学习而 IP 地址带有“网络位 主机位”的结构让路由器可以把大量地址聚合成一条路由这是互联网能规模化的基础。IP 地址分为公网地址和私网地址。公网地址可以在互联网上全局路由私网地址只能在局域网内部使用。最常见的私网网段有三个10.0.0.0/8172.16.0.0/12192.168.0.0/16家用路由器默认给大家分配的就是192.168.x.x这类私网地址。在配置静态 IP 时首先要确认你填的是公网地址还是私网地址因为私网地址如果没有 NAT 转换是不能直接出现在公网链路上的。这也是很多人在公司内网手动配了个172.16开头的地址后发现无法上外网的原因——很可能是网段规划里根本没有这一段。2.2 子网掩码判断“同一个网段”的尺子子网掩码的形式类似255.255.255.0它本身没有独立意义要结合 IP 地址一起理解。它的作用是把 IP 地址切成两段前面的“网络位”决定物理或逻辑上属于哪个子网后面的“主机位”决定这个子网里能容纳多少台设备。用子网掩码和 IP 做“按位与”运算得到的就是网络号。举个例子IP 地址192.168.1.10子网掩码255.255.255.0网络号192.168.1.0如果另一台机器是192.168.1.20/24它的网络号也是192.168.1.0就说明两台机器在同一个子网里不用经过网关直接用交换机二层转发就能通信。现代网络更常用 CIDR 表示法也就是在 IP 后面加一个斜杠和前缀长度比如/24就等价于255.255.255.0表示前 24 位是网络位。容易出错的地方在于同一个 IP 配上不同的掩码所属网段完全不同。例如192.168.1.10/24和192.168.1.10/16前者网络号是192.168.1.0后者网络号是192.168.0.0。所以在排查“为什么互相 ping 不通”时不要只盯着 IP 地址还要看掩码是否一致。2.3 网关跨网段通信必须经过的“门”网关Gateway的完整叫法是默认网关它是一个三层设备的接口地址负责把本网段的流量转发到其他网段。家庭网络里最典型的就是路由器 LAN 口地址192.168.1.1在企业网络里网关可能是三层交换机上的 VLANIF 地址也可能是防火墙的内网接口地址。网关有一个非常重要的约束它必须和终端设备在同一个子网内。如果你的电脑配的是192.168.1.10/24网关却写成192.168.2.1那么电脑会把网关地址判断成“非本网段”从而无法正常发送数据。很多人把网关理解成“路由器的 IP”这个说法不完全准确。更准确的理解是网关是这个网段内负责“代转发”的那台三层设备的接口地址。数据包要离开当前网段时发送方会先把包交给网关再由网关根据路由表逐跳转发。所以网关配置错误的典型现象是能 ping 通自己网段里的机器但 ping 不通外网。2.4 DNS把域名翻译成IP的“通讯录”DNSDomain Name System域名系统解决的是“人容易记住域名机器只认 IP”的矛盾。你访问www.csdn.net时系统要先向 DNS 服务器询问这个域名对应的 IP 地址拿到结果后再发起真正的 HTTP 请求。DNS 的配置很简单通常就是填一个或两个服务器 IP比如223.5.5.5、114.114.114.114也可以用企业内网 DNS 或路由器地址。真正复杂的是 DNS 查询过程客户端向本地 DNS 发起递归查询如果本地 DNS 没有缓存它会向根服务器、顶级域服务器、权威服务器逐级迭代查询最终把结果返回给客户端。为什么 DNS 引起的故障特别隐蔽因为它的故障表现经常是“网络看起来通了但业务访问失败”。比如电脑能 ping 通百度 IP但浏览器输www.baidu.com打不开这种时候首先就应该怀疑 DNS。要记住一个经验只要是用域名访问失败而用 IP 访问正常问题大概率在 DNS 解析环节。2.5 四者怎样串成一条完整链路把四个概念放到一次真实访问里就会非常清楚。假设你打开浏览器访问一个网站操作系统先检查 hosts 文件和本地 DNS 缓存如果没有记录就向配置的 DNS 服务器发起域名解析请求。拿到域名对应的目标 IP 后客户端用子网掩码计算目标 IP 是否和自己在同一网段。如果在同一网段直接通过 ARP 找到对方 MAC 地址进行二层通信如果不在同一网段把数据包交给默认网关。网关收到包后查路由表经过一跳或多跳转发最终到达目标服务器。目标服务器的响应包再按同样的逻辑反向路由回来。这个流程里IP 地址决定“找谁”子网掩码决定“要不要经过网关”网关决定“下一跳去哪”DNS 决定“目标是谁”。四者各管一段缺一个都走不通。3. 数据通信中四者如何协同工作3.1 同一网段内的通信过程先说最简单的场景PC-A 是192.168.1.10/24PC-B 是192.168.1.20/24两台设备接在同一台二层交换机上。PC-A ping PC-B 时它先拿自己的掩码和 PC-B 的 IP 做运算发现网络号相同于是直接发送 ARP 广播请求“谁是 192.168.1.20”。PC-B 回应自己的 MAC 地址后PC-A 就把数据帧直接封装上 PC-B 的 MAC 地址发送出去。整个过程不需要网关参与。这个场景也是理解二层交换的基础。交换机收到数据帧后学习源 MAC再根据目的 MAC 转发。如果在同一广播域里只要 IP 和掩码配置正确二层链路能通就能通信。所以排查同网段不通时检查顺序应该是物理链路、VLAN、防火墙而不是网关和 DNS。3.2 跨网段通信与网关转发如果 PC-A 是192.168.1.10/24想访问 PC-C 的192.168.2.10/24情况就完全不同。PC-A 用掩码计算后发现自己和 PC-C 不在同一网段于是不再发 ARP 找 PC-C而是把数据包交给默认网关192.168.1.1。网关收到包后查询路由表找到通往192.168.2.0/24的下一跳把包从对应接口转发出去。这里有一个容易误解的地方PC 端并不需要知道去往目标网段的完整路径它只需要知道默认网关。真正做路由决策的是网关设备。所以在终端上配置跨网段通信时核心就是三条IP 正确、掩码正确、默认网关正确。至于中间经过了几台路由器终端完全感知不到。3.3 域名解析在整个流程中的位置域名解析虽然发生在访问开始之前但它决定的数据包的目标地址。如果把一次网络访问比作寄快递DNS 就是“根据收件人姓名查收件地址”的环节。没有这一步数据包即使发出去了也不知道该往哪个 IP 上送。在排障时要特别注意 DNS 的“优先顺序”配置了错误的 DNS 服务器并不影响 ping IP、ping 网关和整个路由过程所以在看到“ping 通但访问域名失败”时不要浪费时间检查网线和路由直接看 DNS。4. 实验环境准备与最小拓扑设计4.1 拓扑设计为了把概念落到命令上我们设计一个最小但完整的跨网段实验拓扑左边是 PC1Windows地址192.168.1.10/24网关192.168.1.1右边是 PC2Linux地址192.168.2.10/24网关192.168.2.1中间是两台路由器 R1 和 R2互连接口网段为192.168.12.0/24R1 的G0/0/0接口是192.168.1.1/24G0/0/1接口是192.168.12.1/24R2 的G0/0/0接口是192.168.12.2/24G0/0/1接口是192.168.2.1/24实现目标PC1 能 ping 通 PC2PC2 能解析外网域名在路由器能出网的前提下。这个拓扑用华为 eNSP、H3C Cloud Lab、EVE-NG 都可以搭也可以拿两台真实路由器来做。4.2 实验环境与工具一台 Windows 电脑用来做 PC1。一台 Linux 虚拟机或服务器推荐 CentOS/RHEL 系发行版或欧拉、麒麟这类国产 Linux命令体系接近。网络模拟器或真实路由器用于配置路由器和交换机。版本不用刻意追求最新重点是把命令逻辑走通。如果没有模拟器也可以用虚拟机软件创建两台虚机把网卡模式设为桥接或自定义虚拟网络再用一台虚机做软路由同样能完成跨网段通信实验。有一点必须说明本文给出的命令以“华为 VRP 风格、H3C Comware 风格”为主Cisco 的命令关键字略有差异但思路上完全一致。实际设备版本不同命令细节可能会有出入建议以设备自带手册为准。5. 从理论到实验核心配置实操5.1 Windows 终端静态 IP 配置与验证Windows 图形化配置路径是“设置 - 网络和 Internet - 更改适配器选项 - 双击网卡 - 属性 - IPv4”把自动获取改为手动填入 IP、掩码、网关和 DNS 即可。如果需要在命令行下批量配置可以用管理员身份打开 CMD执行:: 查看当前网卡名称常见的是“以太网”或“WLAN” netsh interface show interface :: 配置静态 IP、子网掩码、网关 netsh interface ip set address name以太网 static 192.168.1.10 255.255.255.0 192.168.1.1 :: 配置 DNS 服务器 netsh interface ip set dns name以太网 static 223.5.5.5注意netsh配置是直接覆盖网卡原有地址的如果你不想改设备当前网络建议先在实验环境验证。配置完成后执行ipconfig /all确认 IPv4 地址、子网掩码、默认网关、DNS 服务器四项都正确。这里最容易犯的错是只改了 IP 地址忘了填网关导致能访问本网段但不能访问外网。5.2 Linux 终端配置 IP、网关、DNSRHEL/CentOS 7 及以上版本、欧拉、麒麟等系统推荐用 NetworkManager 的nmcli命令配置网络因为它能把配置持久化到系统配置文件里避免重启后丢失。# 查看当前连接名称常见的是 ens160 或 eth0 nmcli connection show # 配置 IP、网关、DNS均设置为手动 nmcli connection modify ens160 ipv4.method manual \ ipv4.addresses 192.168.2.10/24 \ ipv4.gateway 192.168.2.1 \ ipv4.dns 223.5.5.5 114.114.114.114 # 重新激活连接让配置生效 nmcli connection up ens160 # 查看结果 ip addr show ens160 ip route show cat /etc/resolv.conf如果系统版本较老或团队习惯使用传统配置文件方式也可以直接编辑/etc/sysconfig/network-scripts/ifcfg-ens160TYPEEthernet BOOTPROTOnone NAMEens160 DEVICEens160 ONBOOTyes IPADDR192.168.2.10 PREFIX24 GATEWAY192.168.2.1 DNS1223.5.5.5 DNS2114.114.114.114修改后执行systemctl restart network或者nmcli connection reload使其生效。这里要提醒一点在 RHEL/CentOS 8 及以上版本中传统 network-scripts 已被弱化更稳妥的是用nmcli。如果手动修改/etc/resolv.conf重启网络后被 NetworkManager 覆盖是常见问题正确做法是改连接配置里的 DNS 项。5.3 路由器和三层交换机接口配置下面以华为/H3C 风格命令为例。先配置 R1 的两个接口和路由system-view sysname R1 # interface GigabitEthernet0/0/0 ip address 192.168.1.1 255.255.255.0 undo shutdown quit # interface GigabitEthernet0/0/1 ip address 192.168.12.1 255.255.255.0 undo shutdown quit # ip route-static 192.168.2.0 255.255.255.0 192.168.12.2R2 的配置类似system-view sysname R2 # interface GigabitEthernet0/0/0 ip address 192.168.12.2 255.255.255.0 undo shutdown quit # interface GigabitEthernet0/0/1 ip address 192.168.2.1 255.255.255.0 undo shutdown quit # ip route-static 192.168.1.0 255.255.255.0 192.168.12.1这段配置中有几个关键点。第一路由器接口 IP 必须与终端处在同一个子网否则终端会把网关地址判定为不可达。第二互联接口192.168.12.0/24必须两端配置在同一网段否则 R1 和 R2 无法建立直连路由。第三去程和回程都需要有路由只配 R1 的静态路由而忘记 R2 的回程路由PC1 发出的包可以到 PC2但 PC2 的回应包找不到回去的路现象仍然是 ping 不通。如果实验环境只有一台三层交换机也可以配置 VLANIF 管理地址。常见的命令是system-view interface Vlanif 1 ip address 192.168.1.2 255.255.255.0 quit这样交换机就拥有了一个三层管理地址电脑把网关指向它以后可以远程管理交换机。要注意的是实际交换机通常不建议直接使用 VLAN 1 做管理 VLAN生产环境里应该单独规划管理 VLAN并配合 SSH、ACL 限制管理源地址。5.4 DNS 解析验证终端和路由配置完成后在 Windows 命令行或 Linux Shell 里执行# 查询域名解析结果 nslookup www.csdn.net # Linux 下也可以使用 dig如果没有 dig 则先安装 bind-utils dig www.csdn.net如果实验环境中的路由器无法访问公网 DNSnslookup会超时。这不代表配置语法错误而是说明当前设备无法到达 DNS 服务器或没有递归权限。更稳妥的验证方式是在能出网的主机上先确认ping 223.5.5.5通再用nslookup指向该地址。如果ping 223.5.5.5能通但nslookup失败再检查是防火墙拦截了 UDP/TCP 53 端口还是上游 DNS 服务本身有问题。6. 运行结果与效果验证如何判断配置成功6.1 分层测试法网络排障最怕没有章法地乱试。推荐的做法是“从下往上、从近到远”分层测试。每一步都有一个明确结论测试不通过就把问题锁定在当前层。测试命令通意味着什么不通时优先排查方向ping 127.0.0.1本机 TCP/IP 协议栈正常网卡驱动、协议栈被破坏ping 自己IP网卡和 IP 配置正常IP 地址冲突、网卡被禁用ping 网关IP本网段二三层链路正常物理链路、VLAN、网关接口、本机防火墙ping 对端IP跨网段路由正常路由器接口、静态路由、回程路由nslookup 域名DNS 解析正常DNS 服务器可达性、上游 DNS、防火墙 53 端口这套测试法最大的好处是“前置条件明确”。例如你 ping 不通网关就不要急着研究 DNS 和路由先把链路问题解决。6.2 使用 tracert / traceroute 确认路径如果跨网段通信不通但网关本身能通可以用路径跟踪命令确认数据包停在哪一跳。# Windows tracert -d 192.168.2.10 # Linux traceroute -n 192.168.2.10-d和-n都表示不做域名反解直接显示 IP速度更快。输出结果里如果第一跳是网关第二跳是192.168.12.2说明中间路由正常如果长期卡在某一条请求超时就重点检查那一跳对应的设备接口、路由表和回程路由。这里提醒一点路由设备常会丢弃 ICMP 超时消息tracert中某几跳显示* * *并不代表链路一定断了。更可靠的是看最终是否到达目标地址以及每一跳的趋势。6.3 用 IP 与掩码计算确认网段手工算网络号虽然基础但排障时容易出错。可以写一个小脚本来验证# 文件路径check_same_subnet.py import ipaddress a ipaddress.ip_interface(192.168.1.10/24) b ipaddress.ip_interface(192.168.2.10/24) print(A 所在网段:, a.network) print(B 所在网段:, b.network) print(是否同网段:, a.network b.network)python3 check_same_subnet.py运行结果会清楚显示两个地址是否在同一子网。这个脚本在判断“两台机器为什么不能直连”时非常实用尤其在规划多个 VLAN 互访时用它做快速确认能避免掩码口算出错。7. 常见问题与排查思路问题现象可能原因排查方式解决方案能 ping 通 IP 但浏览器打不开网页DNS 配置错误或 DNS 服务器不可达nslookup解析域名看返回的 DNS 服务器换用正确的 DNS检查防火墙 53 端口能 ping 通网关但 ping 不通外网 IP网关设备缺少 NAT 或出接口路由在路由器上 ping 外网 IP查看路由表配置默认路由和 NAT 转换Linux 修改 DNS 后重启网络即还原NetworkManager 覆盖了/etc/resolv.conf查看连接配置里的 DNS 项用nmcli修改连接 DNS而不是直接改 hosts虚拟机新建后 ping 不通网关虚拟网络模式选错或虚拟网卡未桥接检查虚拟网络编辑器、虚机网卡模式和宿主机防火墙根据网络拓扑选择桥接或自定义虚拟网络IP 地址冲突手动地址与 DHCP 地址池重叠ipconfig查看获取地址查看网关 ARP 表规划 DHCP 保留地址静态 IP 避开 DHCP 地址池Windows 事件日志出现 DNS Client Events 1014客户端无法联系配置的 DNS 服务器ping DNS 服务器 IP检查服务器状态更换可达 DNS检查到 DNS 服务器的 53 端口策略把 DNS 改成 8.8.8.8 后时有时无公共 DNS 在不同网络下可达性和延迟不稳定用ping 8.8.8.8和nslookup对比优先使用运营商分配的 DNS公共 DNS 只做备份交换机配置了管理 IP 仍无法远程管理终端与交换机不在同一网络或管理口未加 ACL检查终端 IP、VLAN、远程管理协议将终端接入管理 VLAN放通 SSH/Telnet 权限表格里列出的都是实际工程项目里高频出现的问题下面挑几个重点展开说。第一能 ping 通 IP 但打不开网页这是 DNS 问题的经典信号。很多人会先去抓包、查路由绕一大圈才想起 DNS。正确做法是先nslookup一个已知域名看看有没有返回 IP。没有返回就直接把 DNS 改成可用的服务器地址。第二Linux DNS 重启还原。这几乎是初学者必踩的坑。直接编辑/etc/resolv.conf在当时是生效的但 NetworkManager 接管网络后会在连接重载时重新生成这个文件。解决办法是改连接的 DNS 配置也就是用nmcli connection modify设置ipv4.dns或者在 DHCP 客户端配置里修改请求参数而不是去手工改一个会被覆盖的文件。第三DNS 改成 8.8.8.8 到底有没有危险。从技术角度看公共 DNS 本身没有危害但在国内网络环境下直接使用 8.8.8.8 可能出现延迟偏高、解析结果不优的问题。更稳妥的选择是企业内网优先用内部 DNS日常开发环境优先用运营商自动下发的 DNS或者223.5.5.5、114.114.114.114这类国内公共 DNS 作为备份。不要在生产环境随意指定陌生 DNS尤其是涉及关键业务解析时。8. 最佳实践与工程建议8.1 IP 地址规划尽量有序无论实验还是生产IP 地址规划都应该有一定章法。服务器、终端、网络设备、打印机可以分成不同网段静态地址集中在某个小范围内预留DHCP 动态分配使用另一段。这样遇到 IP 冲突时只要查一下规划表就能很快缩小范围。一个常见的坏习惯是所有设备都用/24网段静态地址和 DHCP 地址也完全不区分。刚开始设备少没感觉等网络规模变大地址冲突会越来越多。更合理的做法是结合 VLAN 规划把服务器、终端、管理网分开既能管控访问权限也方便排查。8.2 DNS 配置遵循“就近和管理优先”原则DNS 服务器本身不是越知名越好而是越“就近、可控”越好。企业内网建议搭建内部 DNS并把内部域名的解析放在内网 DNS 上公网域名通过转发器交给上游处理。如果没有内网 DNS至少采用本地运营商分配的 DNS因为运营商 DNS 对本地区域域名和 CDN 节点的解析结果通常更准确。公共 DNS 作为备用是推荐的但不要只填一个 DNS也不要把主备 DNS 填成两个都无法达到的地址。一般建议填写两个主 DNS 一个备用 DNS 一个这样单一 DNS 故障时不会完全失去解析能力。8.3 网络变更前先备份和确认回滚方案网络设备配置和服务器网络配置都属于高危变更。远程修改设备 IP、网关、DNS 前必须考虑“如果配置写错自己会不会连不上设备”。尤其是远程管理设备时一旦把管理 IP 改错设备可能直接从网络中消失。生产环境的稳妥做法是先在测试环境完整验证一遍命令登录设备后先备份当前配置例如华为设备执行display current-configuration保存一份再逐条修改每改一条就确认一步如果修改的是远程管理地址最好保留一个带外管理通道或者确保交换机重启后能自动恢复配置。权限上坚持最小化原则不随意用管理员身份运行未知脚本。8.4 多厂商网络命令差异与认证备考提示华为、H3C、Cisco 的命令存在差异但核心网络概念完全一致。华为 VRP 和 H3C Comware 的命令风格很接近Cisco IOS 在接口命名、路由协议配置上差异更大。例如华为是display ip routing-tableCisco 是show ip route华为静态路由命令是ip route-staticCisco 是ip route。备考 HCIA、HCIP、H3CNE、CCNA 时不建议死记硬背命令列表而是先理解“每个命令解决什么问题”。你只要知道静态路由要告诉路由器“目标网段、下一跳”那在哪个厂商设备上都能找到对应命令。反之如果只是背命令而不理解路由转发原理换一台设备就容易卡住。9. 总结与后续学习方向这次把 IP 地址、子网掩码、网关、DNS 从概念讲到实验最终落到一个排障框架先判断目标是否同网段再确认网关是否可达最后验证 DNS 是否正常。在这个框架下大多数终端网络问题都能在几分钟内定位到具体环节。下一步建议你亲手做两件事。第一用模拟器搭一个简单的“PC1 - R1 - R2 - PC2”拓扑自己配置 IP、网关、静态路由再把某一条路由删掉观察 ping 不通时tracert停在哪一跳加深对路由回程的理解。第二把 Windows 和 Linux 的静态 IP 配置命令各练一遍特别是nmcli的持久化配置方式再人为制造一个 DNS 配置错误走一遍“ping IP 通、nslookup 失败”的排查流程。这个实验做完你就不会再被“上不了网”这种模糊问题卡住。如果继续深入建议按这个顺序学习VLAN 与交换机二层转发、路由协议静态路由、OSPF、NAT、DHCP 协议细节。这些都是数据通信的基础也是多厂商网络认证的必考内容。你在实际项目里遇到的各种“诡异网络问题”最后都会回到今天讲的这四件事上。