计算机网络--tcpdump和iptable设置、内核参数优化策略

tcpdump工具

tcpdump命令:

选项字段:

过滤表达式:

实用命令:

TCP三次握手抓包命令:
shell 复制代码
#客户端执行tcpdump 抓取数据包
tcpdump -i etho tcp and host 192.168.12.36 and port 80 -W timeout.pcap

netstat命令

netstat -a 命令可以显⽰所有⽹络连接

-t:TCP -u:UDP

-l :哪些端口正在监听连接

-p :显⽰与每个⽹络连接关联的进程ID和进程名

netstat -anp | grep 端口号 ⽤于查看指定端口的占⽤情况

-a:所有socket

-n:直接显⽰数字类型的IP和端口

-p:显⽰正在使⽤连接的进程ID和进程名称

查看TCP连接状态
shell 复制代码
netstat -napt | grep 192.168.12.37
查看TCP半连接队列的大小
shell 复制代码
netstat -napt | grep SYN_RECV | wc -l
netstat -s 观察半连接队列溢出的情况:
shell 复制代码
netstat -s | grep "SYNS to LISTEN"

隔几秒执行几次,如果有上升的趋势,说明当前存在半连接队列溢出的现象。

查看TCP全连接队列溢出情况
shell 复制代码
netstat -s | grep overflowed

ss命令:主要⽤于获取socket统计信息,它可以显⽰和 netstat 命令类似的输出内容。但ss命令的优势在于它能够显⽰更多更详细的有关TCP和UDP连接状态的信息,而且⽐netstat更快速更高效

查看服务端进程accept队列的长度
shell 复制代码
ss -ltn

Wireshark 工具

命令: 把抓取的数据包保存到 ping.pcap 文件

shell 复制代码
tcpdump -i eth1 icmp and host 183.232.231.174 -W ping. pcap

将跑ping.pcap文件用wireshark打开

iptable防火墙配置规则

shell 复制代码
#客户端配置的防火墙规则
iptables -I INPUT -S 192.168.12.36 -j DROP

在服务端配置防火墙,屏蔽客户端 TCP 报文中标志位是 ACK 的包,也就是当服务端收到客户端的 TCP ACK 的报文时就会丢弃。

shell 复制代码
iptables -I INPUT -s 192.168.12.37 -p tcp --tcp-flag ACK ACK -j DROP
客户端设置了防火墙,屏蔽了服务端的网络包,为什么 tcpdump 还能抓到服务端的网络包?

添加 iptables 限制后, tcpdump 是否能抓到包 ,这要看添加的 iptables 限制条件:

  • 如果添加的是 INPUT 规则,则可以抓得到包
  • 如果添加的是 OUTPUT 规则,则抓不到包

网络包进入主机后的顺序如下:

  • 进来的顺序 Wire -> NIC -> tcpdump -> netfilter/iptables
  • 出去的顺序 iptables -> tcpdump -> NIC -> Wire

TCP内核参数以及优化策略

优化三次握手的参数

策略 TCP内核参数
调整SYN报文重传次数 tcp_syn_retries
调整SYN半连接队列的长度 tcp_max_syn_backlog somaxconn backlog(非内核参数,NGINX配置参数)
调整SYN+ACK报文的重传次数 tcp_synack_retries
调整accept队列的长度 m i n ( b a c k l o g , s o m a x c o n n ) min(backlog, somaxconn) min(backlog,somaxconn)
绕过三次握手(类似于长连接) tcp_fastopen

backlog参数:也就是listen(int sockfd, int backlog)的参数,也就是NGINX/Tomcat的参数

优化四次挥手的参数

策略 TCP内核参数
调整FIN报文重传次数 tcp_orphan_retries
调整FIN_WAIT2状态的时间 (只适用close函数关闭的连接) tcp_fin_timeout
调整孤儿连接的上限个数 (只适用close函数关闭的连接) tcp_max_orphans
调整TIME_WAIT状态的上限个数 tcp_max_tw_buckets
复用TIME_WAIT状态的连接 tcp_tw_reuse(只适用客户端) tcp_timestamps

数据传输的优化

策略 TCP内核参数
扩大窗口大小 tcp_window_scaling
调整发送缓冲区范围 tcp_wmem
调整接收缓冲区的范围 tcp_rmem
打开接收缓冲区动态调节 tcp_moderate_rcvbuf
调整内存范围 tcp_mem
TCP接收和发送缓冲区和Ring Buffer是一个东西吗?

数据流从网卡到用户空间的过程

一次数据流从网卡到用户空间的过程:

  • 数据到达网卡:数据包通过网络到达网卡,网卡硬件将数据包放入环形缓冲区中。
  • 硬件中断:网卡生成一个硬件中断通知CPU有新数据包到达。
  • 中断处理程序:CPU执行网卡驱动程序的中断处理程序,读取环形缓冲区中的数据包并将其传递给内核网络栈。
  • 网络协议栈处理:内核网络栈处理数据包,将其存放到对应的TCP接收缓冲区(受tcp_rmem参数限制)。
  • 传递到用户空间:用户空间应用程序通过系统调用(如recv或read)从TCP接收缓冲区读取数据。

参考:

  1. https://blog.csdn.net/weixin_36338224/article/details/107035214
  2. 小林coding-图解网络
相关推荐
梦帮科技1 小时前
LoRA / QLoRA 低秩矩阵流形更新:SVD 分解、秩与缩放因子 α 的物理意义与梯度稳定性保障
网络·深度学习·神经网络·线性代数·矩阵·架构·数据挖掘
阿钱真强道1 小时前
28 嵌入式操作系统 | 网关加 TCP 命令通道:粘包/半包怎么切
网络·网络协议·tcp/ip·粘包
HY小宝F1 小时前
树莓派智能摄像头系统 30 天重学计划之 Day 03 · 网络基础:建立“包“的思维 —— 学习总结
网络·学习
ayaya_mana1 小时前
MCTier 组网联机工具:安装、配置与私有化部署
网络·windows·内网穿透·联机
故七月1 小时前
GEO 信源评估体系:如何判断一条网页信源能否被大模型采信
前端·网络·人工智能
hasty2 小时前
一次 WebSocket 握手为何能终止进程?Undici CVE-2026-19534 的异常边界
网络·websocket·网络协议
实点科技2 小时前
XB6S-EI2002如何与信捷XDH-60T4-E实现EtherNet/IP通讯?
网络
仍然.3 小时前
RabbitMQ---可靠性传输
网络·分布式·rabbitmq
砚凝霜3 小时前
【软考信息安全】第八章 防火墙类型与实现技术
网络
hasty3 小时前
前缀相同不代表同一网络:ip-address 跨地址族比较缺陷
网络·网络协议·tcp/ip