yupanzi

网络诊断与运维技巧

· 4 分钟阅读

网络运维中常用的诊断和调试技巧。

HTTP 状态码

HTTP 状态码用来表示请求是否成功,以及出现了什么错误。

状态码分类

范围类型说明
1xx (100-199)信息性请求正在处理
2xx (200-299)成功请求正常处理完毕
3xx (300-399)重定向需要进一步操作
4xx (400-499)客户端错误请求有问题或无法实现
5xx (500-599)服务器错误服务器处理时出错

不常见的状态码

状态码说明备注
101切换协议服务器同意切换到请求的协议,常用于 WebSocket
104连接重置Nginx 定义,客户端取消了请求
429请求过多触发了频率限制
499客户端关闭连接Nginx 定义,客户端在服务器响应前关闭了连接

104 连接重置示例

('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

常见场景:AWS NAT Gateway 会在 30 秒内关闭空闲连接,导致客户端收到 104 错误。

参考:AWS NAT Gateway 文档

499 客户端关闭连接

这是 Nginx 自定义的状态码,表示客户端在服务器准备响应前就关闭了连接,通常发生在用户取消请求时。


TCP 端口连通性测试

需要测试远程服务器的某个端口(如 MySQL 的 3306)是否可访问。介绍几种常用的测试方法。

快速测试方法

使用 nc (推荐)

最简洁的方式:

nc -zv 192.168.1.100 3306

输出:

Connection to 192.168.1.100 3306 port [tcp/mysql] succeeded!

参数说明

  • -z:扫描模式,不发送数据
  • -v:显示详细信息

使用 telnet

传统方式:

telnet 192.168.1.100 3306

成功时会显示:

Trying 192.168.1.100...
Connected to 192.168.1.100.

退出方式:按 Ctrl + ],然后输入 quit

批量测试端口

nc 批量扫描

# 测试多个端口
for port in 3306 80 443 22; do
    nc -zv -w 3 192.168.1.100 $port
done

扫描端口范围

# 扫描 3000-3010 端口
nc -zv 192.168.1.100 3000-3010

高级测试方法

使用 nmap

功能最强大的扫描工具:

# 扫描单个端口
nmap -p 3306 192.168.1.100

# 扫描多个端口
nmap -p 3306,80,443 192.168.1.100

# 扫描端口范围
nmap -p 3000-4000 192.168.1.100

# 快速扫描(跳过主机发现)
nmap -Pn -p 3306 192.168.1.100

输出示例:

PORT     STATE SERVICE
3306/tcp open  mysql

使用 timeout 避免卡住

# 3 秒超时
timeout 3 bash -c "cat < /dev/null > /dev/tcp/192.168.1.100/3306"

# 检查返回值
if [ $? -eq 0 ]; then
    echo "端口 3306 开放"
else
    echo "端口 3306 关闭或超时"
fi

使用 /dev/tcp (内置方法)

不需要额外工具:

# Bash 内置 TCP 测试
(echo > /dev/tcp/192.168.1.100/3306) &>/dev/null && echo "开放" || echo "关闭"

编写测试脚本

#!/bin/bash

host="192.168.1.100"
port=3306
timeout=3

# 测试端口
if timeout $timeout bash -c "cat < /dev/null > /dev/tcp/$host/$port" 2>/dev/null; then
    echo "✓ $host:$port 可访问"
    exit 0
else
    echo "✗ $host:$port 不可访问"
    exit 1
fi

使用:

chmod +x test-port.sh
./test-port.sh

方法对比

方法优点缺点适用场景
nc简单快速需要安装日常测试
telnet通用性好难以脚本化交互式测试
nmap功能强大较慢,需要安装批量扫描
/dev/tcp无需工具仅 Bash 支持脚本中使用
timeout + /dev/tcp内置 + 超时控制语法复杂生产脚本

安装工具

CentOS/RHEL

yum install nc nmap telnet

Ubuntu/Debian

apt-get install netcat nmap telnet

macOS

brew install netcat nmap telnet

注意事项

  • telnet 连接成功后需要手动退出,不适合脚本
  • nc-w 参数可以设置超时时间
  • nmap 扫描大量端口可能触发防火墙告警
  • /dev/tcp 方法在某些受限环境下可能不可用
  • 使用 timeout 命令避免无限等待

相关文章