计算机网络基础与运维排障指南

2623 字
计算机网络基础与运维排障指南

计算机网络是运维排障中最基础、也最容易被低估的一层。很多看起来像“服务坏了”的问题,实际原因可能是 DNS 没解析、端口没监听、防火墙没放行、服务只绑定了 127.0.0.1,或者反向代理无法连接后端。

本文围绕日常运维最常见的网络概念与命令进行整理,并将它们放到真实部署场景中理解。

网络访问的基本链路#

访问一个网站时,通常会经过下面几个步骤:

输入域名
DNS 解析域名为 IP
客户端连接服务器 IP 的指定端口
防火墙 / 安全组判断是否允许访问
Nginx / Web 服务接收请求
返回网页或转发给后端服务

如果页面打不开,需要沿着这条链路逐层排查,而不是只盯着应用本身。

IP 地址:定位哪一台机器#

IP 地址用于标识网络中的一台设备。

常见 IP 分为两类:

类型说明示例
私有 IP内网使用,通常不能直接从公网访问10.0.0.5172.16.0.10192.168.1.20
公网 IP可以通过互联网访问,通常绑定在云服务器上119.28.14.125

云服务器一般同时存在:

  • 内网 IP:用于同一云厂商内网通信。
  • 公网 IP:用于外部用户访问。

在 Linux 中查看本机 IP:

Terminal window
ip addr
ip a
hostname -I

hostname -I 输出更简洁,适合快速确认当前机器拥有的 IP 地址。

端口:定位机器上的哪一个服务#

如果 IP 是一台机器的地址,端口就是这台机器上不同服务的入口。

常见端口:

服务默认端口
SSH22
HTTP80
HTTPS443
MySQL3306
PostgreSQL5432
Redis6379
Jenkins8080
SonarQube9000

例如:

119.28.14.125:80

表示访问 119.28.14.125 这台服务器上的 80 端口。

在个人博客部署中,浏览器访问域名时通常会连接:

  • 80:HTTP
  • 443:HTTPS

如果这两个端口没有开放,网站就无法正常访问。

localhost、127.0.0.1 与 0.0.0.0#

这是网络排障中非常重要的一组概念。

localhost#

localhost 表示“当前这台机器自己”,通常对应:

127.0.0.1

需要注意:localhost 的含义取决于命令在哪里运行。

场景localhost 指向
Windows 浏览器Windows 本机
WSL 终端WSL 环境
Docker 容器当前容器
远程服务器远程服务器自己
Kubernetes Pod当前 Pod

因此,不能简单认为“localhost 就是自己的电脑”。它永远代表“当前运行环境本身”。

127.0.0.1#

服务绑定到 127.0.0.1 时,通常表示只允许本机访问。

例如:

127.0.0.1:5000

这意味着服务只监听本机回环地址。其他机器即使知道服务器 IP,也无法直接访问这个服务。

0.0.0.0#

服务绑定到 0.0.0.0 时,表示监听本机所有网络接口。

例如:

0.0.0.0:5000

在防火墙和安全组允许的情况下,外部机器可以通过服务器公网 IP 访问该服务。

常见例子:

app.run(host="0.0.0.0", port=5000)

如果 Flask、Node.js、Spring Boot 等服务只绑定 127.0.0.1,外部访问失败是正常现象。

DNS:把域名转换成 IP#

DNS 的作用是将域名解析为 IP 地址。

例如访问:

tiancheng-blog.com

浏览器会先查询这个域名对应的 IP,然后再连接服务器。

常用 DNS 排查命令:

Terminal window
nslookup tiancheng-blog.com
dig tiancheng-blog.com
host tiancheng-blog.com

如果没有 dignslookup

Terminal window
sudo apt update
sudo apt install dnsutils

常见 DNS 问题:

现象可能原因
域名无法访问,IP 可以访问DNS 没配置或未生效
域名解析到旧 IPDNS 缓存未刷新
www 可以访问,根域名不能访问只配置了 www 记录
根域名可以访问,www 不能访问没配置 www 记录

个人博客常见 DNS 配置:

主机记录类型
@A服务器公网 IP
wwwA 或 CNAME服务器公网 IP 或根域名

查看端口监听状态#

服务是否能被访问,首先要确认端口是否真的在监听。

Terminal window
ss -tuln

参数含义:

参数含义
-tTCP
-uUDP
-llistening,正在监听
-n显示数字端口,不反查服务名

查看进程信息:

Terminal window
sudo ss -tulnp

示例:

LISTEN 0 511 0.0.0.0:80
LISTEN 0 511 0.0.0.0:443
LISTEN 0 128 0.0.0.0:22

含义:

  • 80 正在监听:HTTP 服务可接收请求。
  • 443 正在监听:HTTPS 服务可接收请求。
  • 22 正在监听:SSH 可以连接。
  • 0.0.0.0 表示监听所有网卡。

如果只看到:

127.0.0.1:3000

说明该服务只允许本机访问,外部不能直接访问。

ping:测试基础连通性#

ping 用于测试网络连通性和延迟。

Terminal window
ping -c 4 tiancheng-blog.com

-c 4 表示只发送 4 次请求。

ping 可以帮助判断:

  • 域名是否能解析。
  • 网络是否大致连通。
  • 延迟是否异常。

但要注意:

Ping 不通,不一定代表网站不可访问。

原因是很多服务器、防火墙或云安全组会禁用 ICMP,但 HTTP/HTTPS 仍然正常。

因此,检查网站服务时,curl 往往比 ping 更直接。

curl:检查 HTTP / HTTPS 服务#

curl 是运维排查 Web 服务时最常用的工具之一。

查看网页内容:

Terminal window
curl https://tiancheng-blog.com

只查看响应头:

Terminal window
curl -I https://tiancheng-blog.com

常见状态码:

状态码含义运维排查方向
200请求成功服务正常
301 / 302重定向检查 HTTP 跳转 HTTPS、域名跳转
400请求格式错误检查请求参数或代理配置
401未认证检查登录认证
403没有权限检查目录权限、Nginx 配置、安全策略
404页面不存在检查文件路径、路由、静态资源
500服务内部错误检查应用日志
502网关无法连接后端检查后端服务是否启动、端口是否正确
503服务不可用检查服务状态和负载
504网关等待后端超时检查后端响应速度、代理超时配置

例如静态博客部署后出现 403 Forbidden,常见原因包括:

  • Nginx 的 root 指向目录没有 index.html
  • 文件权限不允许 Nginx 读取。
  • 静态文件没有解压到正确目录。
  • Nginx 配置的站点目录和实际上传目录不一致。

防火墙与云安全组#

服务器上服务正常监听,不代表外部一定可以访问。请求还需要通过:

  • 云平台安全组 / 防火墙
  • Linux 本机防火墙
  • Nginx 或应用本身配置

以云服务器部署网站为例,至少需要开放:

端口用途
22SSH 登录
80HTTP 访问与证书申请
443HTTPS 访问

查看 UFW 状态:

Terminal window
sudo ufw status

允许端口:

Terminal window
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

如果使用云服务器控制台,还需要在安全组里放行对应端口。只在服务器里开放端口,但云安全组没放行,外部仍然访问不了。

Nginx 场景下的网络排查#

静态博客部署时,Nginx 通常负责监听 80443,并把请求映射到本地文件目录。

常用检查命令:

Terminal window
sudo nginx -t
sudo systemctl status nginx
sudo systemctl reload nginx

检查 Nginx 是否监听端口:

Terminal window
sudo ss -tulnp | grep nginx

检查网页是否能从服务器本机访问:

Terminal window
curl -I http://127.0.0.1
curl -I http://localhost

如果本机访问成功,但外部访问失败,通常重点检查:

  • 云安全组是否开放 80 / 443
  • DNS 是否解析到正确公网 IP。
  • 服务器公网 IP 是否正确。
  • 是否存在运营商、浏览器缓存或 DNS 缓存。

如果本机访问也失败,则重点检查:

  • Nginx 是否启动。
  • Nginx 配置是否正确。
  • 站点目录是否存在。
  • 目录内是否有 index.html
  • 文件权限是否正确。

一套常用排查流程#

网站无法访问时,可以按以下顺序排查:

1. 确认域名解析#

Terminal window
dig tiancheng-blog.com
nslookup tiancheng-blog.com

确认结果是否指向正确的服务器公网 IP。

2. 确认服务器端口监听#

Terminal window
sudo ss -tulnp

确认 80443 是否处于监听状态。

3. 确认本机访问#

在服务器上执行:

Terminal window
curl -I http://127.0.0.1
curl -I https://tiancheng-blog.com

如果本机访问异常,优先查 Nginx 和站点文件。

4. 确认防火墙和安全组#

检查云控制台是否开放:

TCP 80
TCP 443
TCP 22

同时检查服务器防火墙:

Terminal window
sudo ufw status

5. 查看日志#

Nginx 日志通常在:

Terminal window
/var/log/nginx/access.log
/var/log/nginx/error.log

查看最近错误:

Terminal window
sudo tail -n 50 /var/log/nginx/error.log

实时查看日志:

Terminal window
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

日志能直接说明请求是否到达 Nginx,以及失败原因是什么。

常见故障与判断方式#

现象优先检查
域名打不开,IP 可以打开DNS 解析
IP 也打不开防火墙、安全组、Nginx 是否监听
HTTP 可以,HTTPS 不行证书、443 端口、Nginx SSL 配置
首页能打开,静态资源 404资源路径、部署目录、构建产物
返回 403文件权限、Nginx root、目录内是否有 index.html
返回 502Nginx 代理的后端服务是否启动
返回 504后端响应慢、代理超时
SSH 能连,网站不能访问80/443 是否开放,Nginx 是否运行

运维视角下的核心理解#

网络问题不应只看“能不能打开页面”,而应该拆成几层:

DNS 是否正确
IP 是否可达
端口是否开放
服务是否监听
防火墙是否放行
代理配置是否正确
应用是否正常响应
日志是否有错误

每一层都有对应工具:

层次常用命令
DNSdignslookuphost
连通性ping
HTTP / HTTPScurl -I
端口监听ss -tulnp
服务状态systemctl status
Nginx 配置nginx -t
日志tail -fjournalctl

小结#

计算机网络基础在运维中主要解决三个问题:

  1. 请求有没有找到正确的机器。
  2. 请求有没有进入正确的端口。
  3. 请求进入服务后有没有被正确处理。

对应到核心概念:

  • IP:定位机器。
  • 端口:定位服务。
  • DNS:把域名转换成 IP。
  • localhost / 127.0.0.1:当前机器本身。
  • 0.0.0.0:监听所有网络接口。
  • ping:测试基础网络连通性。
  • curl:测试 HTTP / HTTPS 服务响应。
  • ss:查看端口监听情况。
  • 防火墙 / 安全组:决定请求能否进入服务器。

在实际运维中,排查网络问题的关键不是记住单个命令,而是建立“从域名到服务”的链路思维。只要能按链路逐层定位,绝大多数网站访问异常、端口不通、反向代理错误和部署问题都可以被快速缩小范围。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

计算机网络基础与运维排障指南
https://tiancheng-blog.com/posts/network-basics-for-ops/
作者
TianCheng
发布于
2026-07-09
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
TianCheng
Hello, I'm TianCheng.
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
15
分类
6
标签
44
总字数
37,448
运行时长
0
最后活动
0 天前
站点信息
部署平台
Tencent Cloud Lighthouse
主题版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录