netstat和tcp笔记

296 阅读3分钟

前提

netstat查看tcp网络信息的时候需要结合tcp的一些状态来查看,记忆力好的就不需要了O(∩_∩)O。

tcp简单介绍

三次握手连接

image.png

四次挥手关闭

image.png

netstat常用命令

netstat是一个查看、监控和排查网络的一个常用命令。

以下是 netstat 常用选项的介绍:

  • -a:显示所有网络连接和监听端口。
  • -t:显示 TCP 连接。
  • -u:显示 UDP 连接。
  • -l:仅显示正在监听的端口。
  • -n:以数字形式显示地址和端口号,而不是尝试解析主机名和服务名称。
  • -p:显示哪个进程正在使用该端口。
  • -r:显示路由表。
  • -i:显示网络接口的统计信息。
  • -s:显示网络统计信息。
  • -c:持续输出结果,每隔一段时间更新一次。

查找本地tcp监听端口

netstat -lt

本地有个8089的端口在开启,直接-l是所有、加t显示的是tcp的/u会显示udp的

image.png

列出所有tcp连接

netstat -at

看后面的state然后结合前面的tcp连接状态图,发现ssh在通信,起得监听端口还没连接

image.png

列出所有tcp连接+过滤

用多个grep进行过滤

 netstat -at | grep 8089

过滤8089端口

 netstat -act | grep 8089

c持续输出下,发了个请求

image.png

netstat -an | grep 8089 | grep TIME_WAIT

过滤 8089 下 tim_wait状态的连接

time_wait后都是listen 说明服务端也有主动发起的关闭连接

image.png

统计服务端的连接数

netstat -an | grep 8080 | wc -l

wc -l:计算过滤后的行数,即连接数。 可以grep多个进行tcp状态过滤

image.png

找的一些高级查询

1.查找请求数前20个IP(常用于查找攻来源):
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
 
netstat -ant |awk '/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20
 
2.用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” '{print $1″.”$2″.”$3″.”$4}' | sort | uniq -c | sort -nr |head -20
 
3.查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
 
4.找查较多的SYN连接
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
 
5.根据端口列进程
netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1

TCP 连接的统计信息

netstat -st

image.png

  1. active connection openings 包括活动连接打开次数 主动打开的连接
  2. passive connection openings 被动连接打开次数 服务器接收的连接数
  3. failed connection attempts 失败连接尝试次数
  4. onnection resets received 接收到的重置连接次数
  5. connections established 已建立的连接数
  6. segments received 接收到的数据段数量
  7. segments sent out 发送出去的数据段数量
  8. segments retransmitted 重传的数据段数量 过多的重传表示网络不稳定或丢包严重
  9. bad segments received 接收到的错误数据段数量
  10. resets sent发送的重置连接数量
  11. InCsumErrors 校验和错误的数量。
网络的一些问题查看

image.png

Recv-Q / Send-Q:接收和发送队列的字节数。非零值表示数据未能及时接收或发送,可能存在网络延迟或带宽瓶颈

使用 netstat -an 监控连接状态:关注 TIME_WAIT、CLOSE_WAIT、SYN_SENT、SYN_RECV 等状态的数量是否异常 结合tcp状态。
检查 Recv-Q 和 Send-Q 的积压情况:如果积压数据较多,表明网络可能存在延迟或带宽不足。
通过 netstat -s 查看TCP重传和丢包情况:过多的重传通常意味着网络不稳定,需要通过其他工具进一步排查丢包点。
结合其他工具(如 iftop、ping、traceroute)进行链路分析:确认是否存在带宽耗尽、丢包或网络延迟过高的情况。