Linux网络-netstat命令

217 阅读4分钟

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注我,我尽量把自己会的都分享给大家,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

Linux服务器作为一个常用的网络服务器,主要的作用就是向客户端提供网络服务,所以我们需要熟练掌握网络相关的命令,用于探测对端网络是否畅通,用于检查本地网络进程是否正常,以及可以通过命令去远端服务器进行下载文件,或者请求对方接口。

主要从以下几个方面来介绍:

1.给Linux服务器配置IP

2.探测对方网络连通性(ping & telnet)

3.下载对方文件(wget)

4.请求对方服务器(curl)

5.检查本地服务状态(netstat)本章节

6.检查本地服务状态(ss)

7.网络小结

NETSTAT

说这个命令之前,需要先说一个问题,就是Linux作为一台网络上最常用的服务器,他如何才能通过网络向其他人提供服务服务?包括我们前面说到的2个命令wget, curl,都是客户端命令,他们的目的都是为了去请求服务端地址,而他们的服务端,就必须通过监听端口实现服务暴露,比如常见的http对应的80,https对应的443,和ssh连接默认的22端口等。如果我们自己的Linux服务器需要对外提供服务,就需要通过监听端口来实现。而netstat 命令就可以用于查看本地监听的情况。

netstat 是一个非常强大的网络诊断工具,它可以提供丰富的网络相关信息。它的基本语法如下:

netstat [options]

下面是一些常用的 netstat 选项及其作用:

  1. 查看活动连接
  • -a: 显示所有连接和监听端口

  • -n: 以数字形式显示地址和端口

  • -t: 仅显示 TCP 协议的连接

  • -u: 仅显示 UDP 协议的连接

  • -x: 仅显示 UNIX 域套接字连接

  1. 查看监听端口
  • -l: 仅显示正在监听的连接

  • -i: 显示网络接口信息

  1. 查看进程信息
  • -p: 显示与每个连接相关的进程 ID 和进程名称
  1. 查看统计信息
  • -s: 显示各种协议的统计信息
  1. 查看路由表
  • -r: 显示内核路由表
  1. 输出格式控制
  • -e: 显示扩展信息

  • -A <family>: 仅显示指定地址族的连接

  • -o: 显示计时器信息

  1. 其他选项
  • -c: 持续刷新输出

  • -v: 显示版本信息

比如,如果您想查看系统上所有的 TCP 连接,可以使用:

netstat -antp

这将显示所有活动的 TCP 连接,包括远程地址、本地地址、状态和相关进程信息。

如果您想查看某个进程正在使用的网络连接,可以使用:

netstat -antp | grep 12345

这将只显示与进程 ID 为 12345 的进程相关的网络连接。

基础知识

在网络连接里面有一个概念叫五元组或者简化版的四元组(源 IP 地址,源端口号,目标 IP 地址,目标端口号,协议类型),一般除去协议类型就是四元组。

比如:我从linux服务器,请求一个地址123.150.76.218:80 ,那么在网络连接里面就就存在类似下面的一个连接,当然这里还有更多的信息,这里不展开。

[root@localhost ~]# netstat -lnap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name              
tcp        0      0 192.168.179.102:50276   123.150.76.218:80       TIME_WAIT   -            

源IP:192.168.179.102
源端口:50276
目标IP:123.150.76.218
目标端口:80
协议:TCP

总结

1.**netstat**这个命令是我们用于查看本地网络连接情况最常用的命令之一。

2.**netstat**这个命令在网络连接很多的情况下,是有性能问题的,替代方案就是下一章我们会讲的**ss**命令。如果只是本地检查端口就算卡也还好,如果用于脚本里面检查服务情况,就可能会出现预期以外的问题。

3.在最小化安装的系统里面是没有这个命令的,需要安装net-tools这个包才会自带这个命令。

4.**netstat** 最常用的用法,就是使用本机查看网络连接情况。

#xxx可以是端口号,也可以进程号,也可以是进程名字
netstat -lnp |grep xxx

#如果某个进程无法访问网络,可以通过这样来检查网络连接,是否已经建立网络连接。
#具体细节涉及到TCP网络协议栈的问题,这里暂时不展开。
netstat -lanp |grep xxx

关注微信公众号《运维小路》获取更多内容。