NETSTAT命令详解
1. netstat命令的作用
netstat(Network Statistics)是一个命令行工具,用于显示网络连接、路由表、接口统计信
息、伪装连接和多播成员等信息。
这是一个非常典型的“本地回环通信”场景。
这张图片说明本地有一个服务正运行在6688 端口,并且有多个客户端(名称均为 “Gin(电脑
名)”)正在主动连接这个服务,所有连接都已成功建立(状态为ESTABLISHED),通信状态健
康。
接下来我们详细分解表格中的每一列,并解释其具体意义:
1. 协议 (Proto)
内容: TCP
这说明所有连接使用的都是TCP 协议。
TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。
我们浏览网页、发送邮件等大多数网络活动都基于TCP,它能保证数据准确、有序地传输。
2. 本地地址 (Local Address)
内容: 127.0.0.1:6688和 127.0.0.1:49446
127.0.0.1是本地回环地址(它永远指向当前计算机本身,用于机器内部进程间的网络通信,
数据不会离开本机网卡)。这通常用于本地服务调试或进程间通信。
:6688和 :49446是端口号
6688:这是一个监听端口。表示目前在我的电脑上有一个服务程序正在这个端口上等待来自
客户端的连接,扮演着“服务器”的角色。
49446:这是一个临时客户端端口。当我们电脑上的另一个程序要连接 6688端口的服务时,
操作系统会随机分配一个像这样的高端口号(大于1024)给这个客户端程序使用,扮演着“客户端”
的角色。
3. 外部地址 (Foreign Address)
内容: Gin:50495, Gin:50496, ..., Gin:49447
Gin:这个是我系统的主机名(hostname),当然也有可能是其他进程的名称。这里它代表
连接的另一端也是本机。
:50495, :49447等:这些是客户端程序在发起连接时,操作系统为它们分配的源端口号。每个
连接都有一个独立的源端口。
最后一行比较特殊,本地地址 49446对应外部地址 49447。这表明有两个进程在通过这两个
端口互相通信。
4. 状态 (State)
内容: ESTABLISHED
这是TCP连接状态中最重要的一个。
“ESTABLISHED” 表示连接已经成功建立,三次握手已经完成,双方可以正在进行或准备进行
数传输。所有连接都处于此状态,说明网络通信非常正常和稳定。
整体情况分析之发生了什么
目前在我的计算机上运行着一个服务端(Server),它绑定在 127.0.0.1:6688端口上。同时,
有多个 Gin 客户端(Client)进程被创建,它们向本机的 6688端口发起连接请求。
这是一种典型的客户端-服务器(C/S)模型,只不过服务器和客户端都运行在同一台机器
上。
最后总结一下,上述图片展示了一个完全正常且高效的本地网络通信场景。一个服务正在
6688端口工作,并有多个客户端进程与之保持了活跃的连接,所有连接状态健康。
PS:常见的端口及其功能
端口是网络通信中应用程序的“门牌号”,用于区分同一台计算机上的不同服务。
端口号 | 协议 | 常见服务/功能 |
---|---|---|
20, 21 | FTP | 文件传输协议(数据端口和控制端口) |
22 | SSH | 安全外壳协议,用于加密的远程登录和管理 |
23 | Telnet | 远程登录协议(明文传输,不安全) |
25 | SMTP | 简单邮件传输协议,用于发送邮件 |
53 | DNS | 域名系统服务,将域名解析为IP地址 |
80 | HTTP | 超文本传输协议,用于传输未加密的网页数据 |
110 | POP3 | 邮局协议版本3,用于从服务器接收邮件 |
143 | IMAP | 互联网消息访问协议,用于管理服务器上的邮件 |
443 | HTTPS | 安全的超文本传输协议,在HTTP基础上通过SSL/TLS加密 |
3306 | MySQL | MySQL 数据库服务 |
3389 | RDP | 远程桌面协议 |
最常见的 80 端口:它就是 HTTP 协议的默认端口。
我们日常通过浏览器访问 http://
开头的网站时,默认就是在和服务器上的 80 端口进行通
信。
常见的状态码及其含义
这里需要区分两种“状态码”:
HTTP 响应状态码:由Web服务器返回,表示一个HTTP请求的成功或失败情况(如 404)。
TCP 连接状态:表示一个TCP网络连接在其生命周期中所处的阶段(如 ESTABLISHED)。
A. 常见的 HTTP 响应状态码(属于应用层)
状态码 | 类别 | 含义说明 |
---|---|---|
200 | 成功 | 请求成功,服务器已返回请求的数据。 |
301 | 重定向 | 请求的资源已永久移动到新位置。 |
302 | 重定向 | 请求的资源临时从不同的位置响应。 |
400 | 客户端错误 | 请求有语法错误,服务器无法理解。 |
401 | 客户端错误 | 请求需要用户身份验证。 |
403 | 客户端错误 | 服务器理解请求,但拒绝执行它(权限不足)。 |
404 | 客户端错误 | 服务器无法找到请求的资源(最常见错误之一)。 |
500 | 服务器错误 | 服务器内部错误,无法完成请求。 |
502 | 服务器错误 | 作为网关或代理的服务器从上游服务器收到了无效响应。 |
503 | 服务器错误 | 服务器当前无法处理请求(由于超载或停机维护)。 |
B. 常见的 TCP 连接状态(属于传输层,即 netstat
中显示的状态)
状态 | 含义说明 |
---|---|
LISTEN | 服务器正在监听端口,等待来自客户端的连接请求。 |
SYN_SENT | 客户端已发送连接请求(SYN包),等待服务器的确认。 |
SYN_RCVD | 服务器已收到客户端的SYN包,并发送了自己的SYN+ACK包,等待客户端的最终确认。 |
ESTABLISHED | 连接已建立,双方可以正常进行数据传输。这是正常通信时的状态。您的图片中所有连接均处于此状态。 |
FIN_WAIT1 | 应用程序已主动发起关闭连接请求(发送FIN包)。 |
FIN_WAIT2 | 主动关闭方已收到对方对第一次FIN包的确认(ACK),正在等待对方发送FIN包。 |
TIME_WAIT | 连接已关闭,但套接字还在等待一段时间,以确保网络上所有的残留数据包都已消散,防止在新连接中收到旧数据。 |
CLOSE_WAIT | 被动关闭方收到对方的FIN包,并已确认(ACK),正在等待本地应用程序发出关闭指令。 |
LAST_ACK | 被动关闭方在等待对方对自己发送的FIN包的最终确认(ACK)。 |
CLOSED | 连接完全关闭,不再使用。 |
TCP 连接的状态转换
TCP 连接的生命周期通过“三次握手”建立,通过“四次挥手”关闭,状态在其中转换。
建立连接(三次握手):
客户端发送 SYN→ 客户端进入 SYN_SENT状态。
服务器收到 SYN,回复 SYN+ACK→ 服务器进入 SYN_RCVD状态。
客户端收到 SYN+ACK,回复 ACK→ 双方进入 ESTABLISHED状态,连接建立。
断开连接(四次挥手)(以客户端主动关闭为例):
客户端发送 FIN→ 客户端进入 FIN_WAIT1状态。
服务器收到 FIN,回复 ACK→ 服务器进入 CLOSE_WAIT状态,客户端进入 FIN_WAIT2状
态。
服务器处理完剩余数据后,发送 FIN→ 服务器进入 LAST_ACK状态。
客户端收到 FIN,回复 ACK→ 客户端进入 TIME_WAIT状态,等待一段时间后关闭。服务器
收到 ACK后关闭连接。