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后关闭连接。