- TCP端口监听的状态
TCP协议是一种面向连接的协议,它建立连接之前需要通过三次握手(3-way handshake),连接建立后进行数据传输,最后通过四次挥手(4-way handshake)关闭连接。TCP协议的状态机相对复杂,包含多个不同的状态,每个状态表示连接的不同生命周期。
常见的TCP端口监听状态包括以下几种:
1.1 LISTEN(监听)
含义:LISTEN 状态表示服务器端的端口正在监听传入的连接请求。通常,服务器程序会在一个或多个端口上处于监听状态,等待客户端发起连接。
特征:此时没有数据传输,只是等待连接的建立。
应用场景:例如,当你运行一个Web服务器(如Apache、Nginx)时,通常会在端口80或443上处于LISTEN状态,等待客户端的HTTP请求。
命令查看:
netstat -an | grep LISTEN
1.2 SYN_SENT(同步已发送)
含义:SYN_SENT 表示客户端已发送连接请求(SYN包),等待服务器确认。是三次握手中的第一步完成后,客户端的状态。
特征:客户端向服务器发起连接请求。
应用场景:客户端发起连接请求后,处于该状态,直到接收到服务器的SYN+ACK响应。
1.3 SYN_RECEIVED(同步已接收)
含义:SYN_RECEIVED 状态表示服务器接收到客户端的SYN包,并且已经回应了一个SYN+ACK包,正在等待客户端的ACK包确认。
特征:这是三次握手的第二步,连接还没有完全建立。
应用场景:通常出现在服务器端,表示已经收到客户端的连接请求。
1.4 ESTABLISHED(已建立)
含义:ESTABLISHED 状态表示TCP连接已成功建立,可以开始数据传输。这是建立连接后最常见的状态。
特征:双向数据传输可以在此状态下进行。
应用场景:当一个TCP连接完全建立后,服务器和客户端可以开始传输数据(如HTTP数据传输、FTP文件传输等)。
1.5 FIN_WAIT_1(终止等待1)
含义:FIN_WAIT_1 表示主动关闭连接的一方已经发送了FIN包,通知对方自己准备关闭连接。
特征:等待对方的ACK响应。
应用场景:主动发起关闭连接的端通常会进入此状态。
1.6 FIN_WAIT_2(终止等待2)
含义:FIN_WAIT_2 表示接收方已经确认了FIN包,并且准备关闭连接。
特征:此时双方都已经同意关闭连接,等待对方的FIN包。
应用场景:在双向关闭的过程中,双方会进入这个状态,直到完全关闭连接。
1.7 TIME_WAIT(时间等待)
含义:TIME_WAIT 状态表示连接的另一方已经接收到FIN包,并且发送了最后的ACK包,等待足够的时间确保对方收到了这个ACK包。
特征:在TCP连接关闭后,通常会进入该状态,持续一段时间,以确保最后的确认能到达对方。
应用场景:此状态通常持续4分钟(2倍的MSL,最大报文生存时间)。
1.8 CLOSE_WAIT(关闭等待)
含义:CLOSE_WAIT 状态表示远程主机已经发送了一个FIN包,自己还未关闭连接。
特征:等待应用程序主动关闭连接。
应用场景:当一方已关闭连接(通过FIN包)时,另一方进入此状态,直到应用程序执行关闭操作。
1.9 LAST_ACK(最后确认)
含义:LAST_ACK 状态表示本地端已经发送了FIN包,等待对方确认。
特征:在关闭连接时,处于此状态,直到收到最后的ACK确认。
1.10 CLOSED(已关闭)
含义:CLOSED 表示连接已经完全关闭,所有资源已释放。
特征:此时连接的端口已不再占用,TCP连接的生命周期结束。
2. UDP端口监听的状态
UDP协议是无连接协议,它与TCP不同。UDP不需要建立和维护连接,因此在操作系统中,UDP端口的状态相对简单。
2.1 LISTEN(监听)
含义:LISTEN 状态表示UDP端口在等待接收数据包。UDP不需要建立连接,所以监听状态是唯一的状态。
特征:UDP的应用程序(如DNS、DHCP等)会在特定端口上处于监听状态,等待接收客户端的请求。
命令查看:
netstat -an | grep 123 # 查看UDP端口123的监听状态
2.2 CLOSED(已关闭)
含义:CLOSED 状态表示该端口没有在监听,也没有处于任何活动状态。
特征:UDP连接的生命周期不复杂,基本是“连接即传输”模式,关闭时不需要额外的状态管理。
3. 如何查看端口监听状态
3.1 使用 netstat 命令
netstat 是一个经典的命令行工具,用于查看网络连接状态,显示系统的网络配置。
netstat -tuln
-t:显示 TCP 连接
-u:显示 UDP 连接
-l:显示监听状态的端口
-n:显示数字形式的IP地址和端口号(而非解析成主机名)
3.2 使用 ss 命令
ss 是 netstat 的替代工具,提供更快的网络连接信息查询。
ss -tuln
3.3 使用 lsof 命令
lsof 是一个用于查看文件打开情况的工具,能列出与端口相关的程序。
lsof -i :80