Linux+Windows 网络排查核心命令(netstat+ss)完整使用文档
本文档汇总了 Linux 系统中 netstat(经典工具)和 ss(新一代工具)命令的完整用法,同时兼容 Windows 系统 netstat 差异用法,补充了网络排查的实操场景、易错点、问题定位思路,扩展了常见故障排查案例,适合新手快速上手,也可作为日常网络排查的速查手册,重点适配此前 Ubuntu 与 Windows 文件传输(Samba/SFTP)过程中的网络问题排查需求。
一、前言:工具定位与适用场景
在网络问题排查中,netstat 和 ss 是最核心的端口监听、连接状态查看工具,二者功能重叠,但各有优势:
-
netstat:经典工具,兼容性极强(Linux/Windows 全平台支持),输出格式直观,新手易理解,适合快速排查基础端口问题;缺点是速度较慢,在高并发场景下性能不足,Linux 系统中已逐渐被
ss替代,但日常使用完全足够。 -
ss:Linux 专属新一代工具,是
netstat的升级替代版,基于内核优化,速度更快、资源占用更低,参数与netstat高度兼容,无需额外学习,适合 Linux 系统下所有网络排查场景,尤其推荐用于服务端口监听、异常连接排查。
本文档重点覆盖:命令参数详解、全场景实操命令、Linux/Windows 差异对比、易错点提醒、故障排查案例,结合此前 Samba 服务、SSH 服务的排查需求,补充针对性用法,确保学完就能落地使用。
二、Linux 系统核心命令详解(重点)
以下操作均基于 Ubuntu(如 22.04.5)系统,CentOS、Debian 等其他 Linux 发行版用法完全一致,核心注意:大部分命令需加 sudo 权限,否则无法查看完整的进程信息(如 PID、进程名),导致排查失效。
(一)ss 命令(推荐优先使用)
1. 核心参数详解(必记)
ss 的参数可自由组合,核心参数与 netstat 完全兼容,无需额外记忆,重点掌握以下参数,即可覆盖 99% 的日常排查场景:
| 参数 | 核心作用 | 补充说明 |
|---|---|---|
| -t | 仅显示 TCP 协议的连接/端口 | 常用场景:排查 SSH(22 端口)、Samba(139/445 端口)、HTTP(80 端口)等 TCP 服务 |
| -u | 仅显示 UDP 协议的连接/端口 | 常用场景:排查 DNS(53 端口)、DHCP(67/68 端口)等 UDP 服务 |
| -l | 仅显示处于「监听状态」的端口 | 核心参数!排查服务是否正常启动(服务启动后才会监听对应端口),排除已建立的连接干扰 |
| -p | 显示端口对应的进程 PID 和进程名 | 必须加 sudo 权限才能显示,否则无输出;可快速定位“哪个进程占用了某个端口” |
| -n | 以数字形式显示 IP 地址和端口号 | 不解析域名(如不将 8.8.8.8 解析为 google-public-dns-a.google.com),速度更快,排查更高效 |
| -a | 显示所有网络连接/端口(监听状态 + 已建立连接) | 适合排查“外部机器是否成功连接到本机服务”,如查看 Windows 是否与 Ubuntu 建立 Samba 连接 |
| -s | 显示网络连接统计信息 | 可查看 TCP/UDP 连接数、丢包数、重传数等,快速判断网络整体负载和异常(如大量丢包可能是网络链路问题) |
| -r | 显示路由表信息 | 补充参数,可排查路由异常(如数据包无法转发到网关,导致无法访问公网) |
2. 日常实操场景命令(可直接复制使用)
按“高频场景”分类,结合此前 Samba、SSH 服务排查需求,每一条命令都标注用途和输出解读,新手可直接套用。
场景1:查看所有监听端口(最常用,排查服务是否启动)
核心命令(必记):
sudo ss -tulpn
输出解读(示例):
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=123,fd=3)) # SSH服务(sshd进程,PID=123)监听22端口
LISTEN 0 128 0.0.0.0:139 0.0.0.0:* users:(("smbd",pid=456,fd=5)) # Samba服务(smbd进程,PID=456)监听139端口
LISTEN 0 128 0.0.0.0:445 0.0.0.0:* users:(("smbd",pid=456,fd=6)) # Samba服务监听445端口
LISTEN 0 128 127.0.0.53:53 0.0.0.0:* users:(("systemd-resolve",pid=789,fd=13)) # DNS解析服务监听53端口
关键判断:如果看不到对应服务的监听端口(如 smbd 对应的 139/445),说明该服务未启动,需执行 sudo systemctl start smbd 启动服务。
场景2:检查特定服务的端口监听(精准排查)
针对单一服务排查,避免无关端口干扰,常用场景如下:
-
排查 SSH 服务(默认 22 端口):
sudo ss -tulpn | grep sshd正常输出:包含 “sshd” 进程和 22 端口;无输出:SSH 服务未启动或配置错误。 -
排查 Samba 服务(默认 139/445 端口):
sudo ss -tulpn | grep smbd正常输出:包含 “smbd” 进程和 139、445 端口;无输出:smbd 服务未启动。 -
排查特定端口(如 445 端口,Samba 核心端口):
sudo ss -tulpn | grep ":445"正常输出:显示占用 445 端口的进程(smbd);无输出:445 端口未被监听,或被其他进程占用。
场景3:查看已建立的 TCP 连接(排查外部连接是否成功)
适合排查“Windows 已尝试连接 Ubuntu,但无法访问”的问题,查看连接是否建立:
sudo ss -tna
输出解读(示例):
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.159.134:445 192.168.159.100:54321 # Windows IP(192.168.159.100)已与本机 445 端口建立连接
ESTAB 0 0 192.168.159.134:22 192.168.159.100:65432 # Windows 已通过 SSH 连接本机
关键判断:如果看不到 Windows IP 与本机 445 端口的 ESTAB(已建立)状态,说明连接未建立,需排查 Windows 端 SMB 配置或防火墙。
场景4:查看 UDP 端口监听(排查 DNS、DHCP 等服务)
UDP 协议无连接状态,仅需查看是否监听对应端口:
sudo ss -ulpn
常用场景:排查 DNS 服务(53 端口)是否正常:
sudo ss -ulpn | grep ":53"
场景5:查看网络连接统计(判断网络整体状态)
快速排查网络是否有丢包、重传等异常:
ss -s
输出解读(重点关注):
-
TCP 部分:关注 “retransmits”(重传数),重传数过多说明网络链路不稳定、丢包严重;
-
UDP 部分:关注 “errors”(错误数),错误数过多可能是端口占用或协议异常;
-
整体连接数:如果连接数异常过高,可能是服务器被攻击(如端口扫描)。
场景6:查看路由表(排查公网访问异常)
如果 ping 网关通,但 ping 公网(如 8.8.8.8)不通,可查看路由表是否正常:
ss -r
正常输出:包含 “default” 默认路由(指向网关 IP),无默认路由则无法访问公网。
(二)netstat 命令(经典兼容工具)
netstat 是 Linux 系统中经典的网络工具,参数与 ss 高度兼容,功能完全重叠,唯一区别是速度较慢,适合习惯使用经典命令、或需要兼容老系统的场景。以下用法与 ss 对应,重点标注差异点。
1. 核心参数详解(与 ss 完全兼容)
netstat 的核心参数与 ss 一致,无需额外记忆,仅补充 1 个 Linux 专属参数:
| 参数 | 核心作用 | 补充说明(与 ss 差异) |
|---|---|---|
| -t/-u/-l/-p/-n/-a/-s/-r | 与 ss 对应参数作用完全一致 | 用法相同,仅输出格式略有差异 |
| -i | 显示网络接口信息(如网卡、IP、接收/发送数据包数) | ss 无此参数,可用于排查网卡异常(如网卡未启用、数据包丢失) |
2. 日常实操场景命令(与 ss 对应,可直接复制)
所有命令均需加 sudo 权限,确保显示完整进程信息,重点对应此前 Samba、SSH 排查场景:
-
查看所有监听端口(核心命令):
sudo netstat -tulpn -
排查 SSH 服务:
sudo netstat -tulpn | grep sshd -
排查 Samba 服务(139/445 端口):
sudo netstat -tulpn | grep smbd sudo netstat -tulpn | grep ":445" -
查看已建立的 TCP 连接:
sudo netstat -tna -
查看 UDP 端口监听:
sudo netstat -ulpn -
查看网络连接统计:
netstat -s -
查看路由表:
netstat -r -
查看网络接口信息(ss 无此功能):
netstat -i输出解读:可查看网卡(如 enp33)的接收/发送数据包数(RX packets/TX packets),若 RX errors 过高,说明网卡故障或网线松动。
3. ss 与 netstat 对比(选择建议)
| 对比维度 | ss 命令 | netstat 命令 |
|---|---|---|
| 速度 | 快(基于内核优化,资源占用低) | 慢(遍历所有连接,高并发下卡顿) |
| 兼容性 | 仅支持 Linux 系统 | Linux/Windows 全平台支持 |
| 功能 | 覆盖大部分场景,无网络接口查看功能 | 功能更全,支持网络接口查看(-i 参数) |
| 推荐场景 | Linux 系统日常排查(优先选择) | Windows 系统排查、Linux 老系统、需要查看网络接口时 |
三、Windows 系统 netstat 命令详解(适配 Windows 端排查)
Windows 系统自带 netstat 命令,无 ss 命令,且参数与 Linux 系统有少量差异(核心差异:无 -p 显示进程名参数,用 -o 替代),以下用法基于 Windows 10/11 系统(CMD/PowerShell 均可执行),重点适配与 Ubuntu 网络连通性、端口排查需求。
1. 核心参数详解(Windows 专属,重点记差异)
| 参数 | 核心作用 | 与 Linux netstat 差异 |
|---|---|---|
| -a | 显示所有网络连接/端口(监听+已建立) | 与 Linux 一致 |
| -n | 数字显示 IP/端口,不解析域名 | 与 Linux 一致 |
| -o | 显示端口对应的进程 PID | Linux 用 -p 显示进程名/PID,Windows 无 -p 参数,需通过 PID 定位进程 |
| -s | 显示网络连接统计信息(TCP/UDP 等) | 与 Linux 一致,可排查丢包、重传异常 |
| -r | 显示路由表信息 | 与 Linux 一致,排查公网访问异常 |
2. 日常实操场景命令(适配 Ubuntu 连接排查)
Windows 端排查重点:端口连通性、进程占用、连接状态,结合此前 Samba 访问失败、SSH 连接等场景,命令可直接复制执行。
场景1:查看所有端口+进程 PID(核心命令)
查看本机所有端口的监听状态、已建立连接,以及对应进程 PID:
netstat -ano
输出解读(示例):
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 # 445端口(SMB核心)被PID=4的进程占用(System进程)
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 1234 # 远程桌面端口
TCP 192.168.159.100:54321 192.168.159.134:445 ESTABLISHED 5678 # 已与Ubuntu(192.168.159.134)445端口建立连接
UDP 0.0.0.0:53 0.0.0.0:0 9012 # DNS服务53端口
PID 定位进程方法:打开「任务管理器」→ 切换到「详细信息」→ 找到对应 PID 的进程,即可知道“哪个进程占用了某个端口”。
场景2:检查特定端口(如 445、22 端口,适配 Ubuntu 连接)
排查本机 445 端口(Samba)、22 端口(SSH)是否被占用,或是否与 Ubuntu 建立连接:
-
检查 445 端口(Samba 核心端口):
netstat -ano | findstr "445"输出解读:若显示LISTENING,说明本机 445 端口正常(SMB 客户端已启用);若显示ESTABLISHED且 Foreign Address 是 Ubuntu 的 IP,说明连接已建立。 -
检查 22 端口(SSH 端口):
netstat -ano | findstr "22"输出解读:若显示ESTABLISHED且 Foreign Address 是 Ubuntu 的 IP,说明 SSH 连接已建立。 -
检查与 Ubuntu 的所有连接(Ubuntu IP:192.168.159.134):
netstat -ano | findstr "192.168.159.134"
场景3:查看网络连接统计(排查丢包、重传异常)
若 Windows 与 Ubuntu 连接不稳定、经常断开,可查看 TCP 统计信息:
netstat -s -p tcp
重点关注:“重传的段”“丢失的段”,数值过高说明网络链路不稳定,需检查网线、WiFi 或虚拟机网络模式。
场景4:查看路由表(排查公网访问异常)
若 Windows 能 ping 通 Ubuntu,但无法访问公网,可查看路由表:
netstat -r
正常输出:包含 “默认网关”(Default Gateway),无默认网关则无法访问公网。
四、易错点提醒(新手必看,避免排查走弯路)
结合此前排查 Samba 服务的经历,汇总新手最容易踩的坑,每一个都标注解决方案:
- 易错点1:Linux 下执行
ss -tulpn或netstat -tulpn无进程信息,看不到服务监听端口。
原因:未加 sudo 权限,-p 参数无法显示进程信息。
解决方案:必须加 sudo,如 sudo ss -tulpn。
- 易错点2:Windows 下执行
netstat -tulpn报错,提示“无效参数”。
原因:Windows 版 netstat 无 -t/-u/-l/-p 参数组合(仅 Linux 支持)。
解决方案:Windows 用 netstat -ano 替代,查看端口+PID。
- 易错点3:Linux 下能看到 smbd 监听 445 端口,但 Windows 无法访问,
ss -tna看不到连接。
原因:Windows 防火墙拦截了 445 端口,或未启用 SMB 1.0 协议。
解决方案:临时关闭 Windows 防火墙,或启用 SMB 1.0 协议(设置→应用→可选功能→安装“SMB 1.0/CIFS 文件共享支持”)。
- 易错点4:Windows 下
netstat -ano | findstr "445"无输出,看不到 445 端口监听。
原因:Windows 未启用 SMB 客户端服务,445 端口未被占用。
解决方案:启用 “Server” 和 “Workstation” 服务(Win+R 输入 services.msc,找到对应服务启动并设置开机自启)。
- 易错点5:Linux 下
ss -tulpn | grep ":445"显示 445 端口被其他进程占用(非 smbd)。
原因:445 端口被其他服务占用(如 samba-ad-dc),导致 smbd 无法监听。
解决方案:停止占用端口的进程(sudo kill -9 PID),再重启 smbd 服务(sudo systemctl restart smbd)。
- 易错点6:ping 能通,但
ss/netstat看不到连接,服务无法访问。
原因:ping 基于 ICMP 协议,服务(如 Samba、SSH)基于 TCP 协议,防火墙可能放行 ICMP 协议,但拦截了 TCP 端口。
解决方案:检查 Linux 防火墙(sudo ufw status),放行对应端口(如 sudo ufw allow 445/tcp)。
五、常见网络故障排查案例(结合实操,落地性强)
汇总此前遇到的核心故障,结合 ss/netstat 命令,给出完整排查流程,新手可直接套用。
案例1:Ubuntu 上 Samba 服务启动后,Windows 无法访问(报错 0x80070043)
排查流程(按顺序执行):
-
第一步:用
ss命令确认 Samba 服务是否监听端口:
sudo ss -tulpn | grep smbd→ 无输出:执行sudo systemctl start smbd启动服务,检查配置文件(/etc/samba/smb.conf)是否有语法错误(testparm命令验证)。→ 有输出(监听 139/445 端口):进入下一步。 -
第二步:检查 Linux 防火墙是否放行 139/445 端口:
sudo ufw status→ 若为 active,执行sudo ufw allow samba放行 Samba 端口,再sudo ufw reload重载规则。 -
第三步:Windows 端测试 445 端口连通性:
Test-NetConnection 192.168.159.134 -Port 445→ TcpTestSucceeded : False:关闭 Windows 防火墙,或启用 SMB 1.0 协议,重启电脑后重试。→ TcpTestSucceeded : True:进入下一步。 -
第四步:Windows 端用
netstat查看是否建立连接:
netstat -ano | findstr "192.168.159.134:445"→ 无输出:执行net use Z: \\192.168.159.134\UbuntuShare /user:toor强制建立连接,输入 Samba 密码。→ 有输出(ESTABLISHED):可正常访问共享文件夹。
案例2:Windows 无法通过 SSH 连接 Ubuntu(SSH 服务已启动)
排查流程:
-
第一步:Ubuntu 端用
ss确认 SSH 服务监听 22 端口:
sudo ss -tulpn | grep sshd→ 无输出:执行sudo systemctl start sshd启动 SSH 服务。 -
第二步:Windows 端测试 22 端口连通性:
Test-NetConnection 192.168.159.134 -Port 22→ 不通:检查 Ubuntu 防火墙是否放行 22 端口(sudo ufw allow 22/tcp)。 -
第三步:Windows 端用
netstat查看 SSH 连接状态:
netstat -ano | findstr ":22"→ 有 ESTABLISHED 状态:SSH 连接成功,可正常登录;无输出:检查 SSH 客户端配置(如用户名、密码是否正确)。
案例3:Ubuntu 能 ping 通网关,但无法访问公网(如 ping 8.8.8.8 不通)
排查流程:
-
第一步:用
ss/netstat查看路由表:
ss -r 或 netstat -r→ 无默认路由(Default):配置默认网关(如sudo ip route add default via 192.168.159.1)。 -
第二步:查看 DNS 配置是否正常:
cat /etc/resolv.conf→ 无 nameserver(DNS 服务器):添加 DNS(如echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf)。 -
第三步:用
ss查看 DNS 服务是否正常监听:
sudo ss -ulpn | grep ":53"→ 无输出:重启 DNS 服务(sudo systemctl restart systemd-resolved)。
六、总结与速查清单(快速调用,无需翻文档)
1. 核心命令速查(Linux 端)
-
查所有监听端口(优先用):
sudo ss -tulpn -
查 Samba 服务:
sudo ss -tulpn | grep smbd -
查 SSH 服务:
sudo ss -tulpn | grep sshd -
查已建立连接:
sudo ss -tna -
查 UDP 端口:
sudo ss -ulpn -
查路由表:
ss -r -
经典替代命令:
sudo netstat -tulpn
2. 核心命令速查(Windows 端)
-
查所有端口+PID:
netstat -ano -
查 445 端口(Samba):
netstat -ano | findstr "445" -
查 22 端口(SSH):
netstat -ano | findstr "22" -
查与 Ubuntu 连接:
netstat -ano | findstr "UbuntuIP" -
查端口连通性:
Test-NetConnection UbuntuIP -Port 端口号
3. 排查思路总结(通用)
遇到网络问题,按以下顺序排查,高效定位问题:
-
ping 测试:先 ping 本地回环(127.0.0.1)→ ping 网关 → ping 目标 IP(如 Ubuntu)→ ping 公网(8.8.8.8),判断链路是否通畅;
-
端口测试:用
ss/netstat查看服务是否监听对应端口,用Test-NetConnection/telnet测试端口是否连通; -
防火墙测试:临时关闭 Linux/Windows 防火墙,排查是否是防火墙拦截;
-
服务测试:检查对应服务(如 smbd、sshd)是否正常启动,配置是否正确;
-
协议测试:如 Samba 需检查 Windows SMB 协议是否启用,SSH 需检查客户端配置。
本文档涵盖了日常网络排查的所有核心内容,结合此前实操场景补充了针对性用法,可作为长期速查手册,后续遇到新的网络问题,可对照文档快速排查。
评论交流
欢迎留下你的想法