Linux 网络基础:IP 地址、DNS、端口与连接过程

IP 地址标识网络中的通信地址,域名系统(DNS,Domain Name System)查询域名对应的地址等记录,端口则配合传输协议区分主机内的通信端点。访问网站时,名称解析、到目的地的路由和相应端口上的服务都要正常;能查到域名地址,并不等于已经能打开网页。

先区分地址、名称和端口,再结合网络连接故障诊断(英语)逐层排查。配置练习以常规 Ubuntu 26.04 LTS 或 Rocky Linux 9 系列虚拟机为参考,容器、WSL 和其他版本的网络及软件包配置可能不同。按虚拟机环境准备(英语)核对版本,并准备控制台恢复方式。

通过一次网页访问区分三种角色

以 https://example.com/ 为例:浏览器与操作系统按缓存和解析配置取得地址,选择发送数据的路由,再与服务端通信。HTTPS 默认端口为 443,实际传输可使用 TCP 配合传输层安全协议(TLS),也可使用基于 UDP 的 QUIC。DNS 查询成功后,网络路径、过滤规则、证书或应用仍可能阻止访问。

项目 作用 示例
IP 地址 发送数据包时使用的地址 192.0.2.10 或 2001:db8::10
DNS 查询名称对应的记录 A、AAAA、MX 等记录
端口与协议 区分主机内通信端点 TCP 443 与 UDP 443 相互区分

表中 IPv4 地址属于 RFC 5737 的文档示例范围 192.0.2.0/24,IPv6 地址属于 RFC 3849 的示例前缀 2001:db8::/32,不要当作真实实验服务器访问。TCP 与 UDP 有各自的端口空间,配置防火墙时须同时区分协议和端口号。

理解 IPv4、IPv6 与私有地址

互联网协议第 4 版(IPv4)使用 32 位地址,常以点分十进制表示;第 6 版(IPv6)使用 128 位地址,常以冒号分隔的十六进制组表示。同一网络接口可以拥有多个地址,也可以同时使用两种地址族。127.0.0.1 和 ::1 是回环地址,指向本机。仅监听回环地址的服务,其他计算机无法直接连接。

RFC 1918 规定的私有 IPv4 范围为 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16。不同家庭或公司可重复使用这些地址,它们不是在公共互联网中全局路由的唯一地址。访问外部网络时可通过网络地址转换(NAT)等安排实现。

不能把 IPv6 简化成“没有 NAT 的 IPv4”,也不能假设 IPv4 防火墙规则自动保护 IPv6。应分别检查两种地址族实际使用的路径、监听地址和过滤策略。

怎样阅读子网前缀与默认路由?

192.168.10.20/24 中的 /24 是无类别域间路由(CIDR,Classless Inter-Domain Routing)记法,表示前 24 位是网络前缀。该示例的网络前缀为 192.168.10.0/24,不是端口号。设备按目的地址匹配路由,通常优先采用更具体的前缀;策略路由等配置也会影响实际选择。

default via ... 表示没有更具体匹配时使用的下一跳。网关与 DNS 服务器可能恰好使用同一地址,但网关负责转发数据,DNS 负责名称查询,两者作用不同。用下面的只读命令观察本机:

ip -brief address
ip route
ip -6 route
getent ahosts example.com

ip -brief address 显示接口及地址概况;ip route 与 ip -6 route 分别查看 IPv4、IPv6 路由。接口名称、地址、默认下一跳都会因机器而异,IPv6 路由为空不一定表示 IPv4 也不能访问。getent ahosts 经系统名称服务配置查询地址,可能使用 /etc/hosts 等来源,并非纯 DNS 测试;同一地址也可能因不同套接字类型而出现多行。

ip 来自 iproute2 项目,Ubuntu 26.04 的包名是 iproute2,而 Rocky Linux 9 官方 BaseOS 软件源使用 iproute。分别用 dpkg-query -W iproute2 或 rpm -q iproute 核对已安装包及版本;源中存在包不代表本机已经安装。

分别验证名称解析与服务连接

DNS 的 A 记录给出 IPv4 地址,AAAA 记录给出 IPv6 地址;MX 记录用于邮件交换服务器信息。同一名称可对应多个地址,缓存及其有效期会影响查询结果。只有系统使用 systemd-resolved 时,下面的 resolvectl status 才适合查看其解析配置;命令不可用时,应检查该系统实际采用的 NetworkManager 或其他解析器配置。

resolvectl status
ss -lnt
curl -I --connect-timeout 5 --max-time 15 https://example.com/

ss -lnt 显示本机处于监听状态的 TCP 套接字,-n 让端口以数字显示。它既不是远程网站端口清单,也不列出 UDP 监听端点,因此不能据此判断远程 QUIC 服务。curl -I 对 HTTPS 地址发送 HEAD 请求以获取响应头;连接超时上限为 5 秒,整体时间上限为 15 秒。遇到 HTTP 状态码说明收到了 HTTP 响应,不代表网页业务一定成功。

若服务器拒绝 HEAD 而返回 405 等状态,应再用 GET 或浏览器确认,不能直接认定链接损坏。代理、证书信任和网络策略也会影响 curl 的结果。需要安装 curl 时,Ubuntu 可用 sudo apt install curl,Rocky Linux 可用 sudo dnf install curl;这些安装操作会修改系统,与上面的只读查询应分开处理。

根据证据选择下一项检查

  1. 接口没有可用地址:检查接口状态及虚拟机网络连接。
  2. 已有地址但缺少可用目的路由:检查路由、网关和对应地址族。
  3. 只有名称查询失败:检查解析器与系统名称服务配置。
  4. 名称和路由正常但连接失败:区分服务监听、网络过滤、TLS 和应用层问题;不要把本机监听情况当成远程服务器状态。

上面的两个代码块用于观察,不会修改网络配置。不要为解决名称查询失败就直接覆盖 DNS 文件,也不要为连接失败就关闭防火墙。先定位失败层,再备份并只更改有证据支持的设置。

官方参考

名称与层级结构见 DNS 概念:RFC 1034,IPv6 地址记录见 AAAA 记录:RFC 3596。IANA 服务名称与端口登记表区分协议和端口;ip-route(8) 上游手册解释路由查询,getent(1) 手册说明系统名称服务查询,curl 官方手册说明 HEAD 请求与超时选项。