在Linux系统中,要查看当前的网络连接状态,我们主要依赖两个核心命令:
netstat
ss
要查看Linux系统的网络连接状态,最直接且常用的方法是结合使用
netstat
ss
ss
使用
netstat
netstat
要查看所有TCP和UDP的监听端口和已建立连接,并显示对应的进程ID和程序名称,我通常会这样用:
netstat -tulnp
- : 显示TCP连接。
-t
- : 显示UDP连接。
-u
- : 仅显示监听(Listening)状态的套接字。
-l
- : 以数字形式显示地址和端口号,而不是尝试解析主机名和服务名,这能加快显示速度。
-n
- : 显示拥有该套接字的进程ID和程序名称(需要root权限)。
-p
使用
ss
ss
netstat
iproute2
netstat
与
netstat
ss -tulnp
这些选项的含义与
netstat
通过这两个命令,你可以看到诸如
Proto
Recv-Q
Send-Q
Local Address:Port
Foreign Address:Port
State
PID/Program name
netstat
ss
ss
说实话,在我刚接触Linux运维的时候,
netstat
netstat
/proc/net
而
ss
ss
ss
除了速度,
ss
netstat
netstat
ss
在实际工作中,我们往往不需要查看所有的网络连接,而是希望聚焦于某个特定的服务、端口或进程。这时候,简单的
grep
ss
netstat
筛选特定端口:
假设我想看看服务器上80端口(通常是HTTP服务)的连接情况。
使用
ss
ss -tulnp | grep ":80"
或者更精确地指定本地端口:
ss -tulnp sport = :80
sport
dport
dport = :80
筛选特定进程:
如果你知道某个应用的进程名称,比如
nginx
ss -tulnp | grep "nginx"
如果只知道进程ID(PID),比如PID是12345:
ss -tulnp | grep "pid=12345"
筛选连接状态:
有时候,我们可能只想看处于特定状态的连接,比如所有已建立(ESTABLISHED)的TCP连接:
ss -t state established
或者所有监听(LISTEN)状态的UDP连接:
ss -u state listening
这些组合拳用起来非常灵活,能帮助你快速定位问题,比如某个服务是不是真的在监听,或者某个进程是不是建立了不该有的外部连接等等。这比漫无目的地滚动屏幕查看所有连接要高效得多。
理解网络连接状态:ESTABLISHED、LISTEN、TIME_WAIT等状态的含义与排查理解TCP连接的各种状态对于网络问题的诊断至关重要,它们就像是连接的生命周期阶段,每个状态都承载着特定的意义。我们最常看到的就是
LISTEN
ESTABLISHED
CLOSE_WAIT
TIME_WAIT
LISTEN (监听):这表示一个套接字正在等待传入的连接请求。通常是服务器进程绑定了一个端口,准备接收客户端的连接。如果你发现某个服务无法访问,首先要检查它对应的端口是否处于
状态。如果不是,那服务可能没启动或配置有误。LISTEN
ESTABLISHED (已建立):这是TCP连接的正常工作状态,表示客户端和服务器之间已经成功完成了三次握手,数据可以正常传输。大多数活跃的连接都应该处于这个状态。
CLOSE_WAIT (等待关闭):这个状态有点棘手,它表示远程主机(通常是客户端)已经关闭了连接,但本地主机(通常是服务器)还没有完全关闭它的套接字。这意味着本地应用程序没有及时调用
来释放连接。大量的close()
连接通常是应用程序编程缺陷的信号,表明服务器端没有正确处理连接关闭,这可能导致资源耗尽。CLOSE_WAIT
TIME_WAIT (时间等待):这是TCP连接关闭序列中的最后一个状态,由主动关闭连接的一方进入。它会持续一段时间(通常是2MSL,Maximum Segment Lifetime),目的是确保所有迟到的数据包都已在网络中消失,避免新连接收到旧数据包,并允许可靠地关闭连接。大量的
连接在某些高并发短连接服务中很常见,虽然通常无害,但极端情况下也可能占用过多资源,导致端口耗尽。不过,现代Linux内核对TIME_WAIT
的处理已经优化了很多,通常不会成为大问题。TIME_WAIT
SYN_SENT (同步已发送):客户端发送了SYN包,正在等待服务器的SYN+ACK响应。如果长时间处于此状态,可能表示网络延迟高或服务器没有响应。
SYN_RECV (同步已接收):服务器收到了客户端的SYN包,并发送了SYN+ACK,正在等待客户端的ACK响应。如果大量连接卡在这个状态,可能是遭受了SYN洪泛攻击。
当你在排查问题时,例如发现服务器响应变慢,查看连接状态就非常有帮助。如果看到大量的
CLOSE_WAIT
TIME_WAIT
LISTEN
以上就是如何在Linux系统中查看网络连接状态?使用netstat和ss命令的详细教程的详细内容,更多请关注其它相关文章!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。