搞定Linux网络丢包:一场血泪排查实录!(非常详细)从零基础到精通,收藏这篇就够了

1、灵魂拷问:你的网络包,究竟死在了哪里?

网络协议栈丢包位置示意图

这张图,看似简单,实则暗藏杀机。网络包的生命周期,简直就是一场“楚门的世界”,处处是陷阱,步步惊心!

从VM之间的连接开始,就可能因为各种幺蛾子(网络拥塞、线路抽风)导致传输失败。别以为到了网卡就安全了,环形缓冲区溢出分分钟教你做人。

再往上走,链路层校验失败、IP层路由黑洞、传输层端口监听掉链子、套接字层缓冲区爆仓,应用层程序猿祭出BUG大法…… 甚至你手贱配置的iptables规则,都能让你的包死得不明不白。

所以说,排查丢包,简直就是一场高难度的侦探游戏,需要抽丝剥茧,才能找到真凶!

2、链路层:网卡背锅?先查查再说!

当链路层开始掉链子,网卡会默默地记下那些错误。想知道网卡有没有偷懒,ethtool或者netstat招呼一声,让它把锅甩出来。

netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0             100        31      0      0      0         8      0      0      0 BMRU
lo             65536         0      0      0      0         0      0      0      0 LRU
  • RX-OK:收了多少包,心里要有数。
  • RX-ERR:错误包的数量,开始怀疑人生的地方。
  • RX-DRP:被无情丢弃的包,它们做错了什么?
  • RX-OVR:Ring Buffer 溢出,缓冲区表示:臣妾装不下了!

TX-*系列同理,只不过是发送时的指标。

OK,这次看起来网卡是清白的。但是!别高兴太早!tc这个老六,如果配置了QoS,它偷偷摸摸丢的包,网卡可不会帮你背锅。所以,还得看看eth0有没有被tc动过手脚:

tc qdisc show dev eth0

如果看到类似下面的输出,那就要小心了:

qdisc netem 800d: root refcnt 2 limit 1000 loss 30%
  sent 432 bytes 8 pkt (dropped 4, overlimits 0 requeues 0)
  backlog 0b 0p requeues 0

loss 30%,这TM是人干事?30%的丢包率,简直丧心病狂!果断干掉它:

tc qdisc del dev eth0 root netem loss 30%

再来一发hping3,看看世界是否美好了:

hping3 -c 10 -S -p 80 192.168.0.30

然而,现实是残酷的:50% packet loss,依旧坚挺!RTT波动依旧感人!看来,链路层只是背了部分锅,真凶还在逍遥法外!

3、网络层/传输层:迷雾重重,谁在暗中使坏?

网络层和传输层,简直就是丢包的重灾区。各种协议、各种配置,稍有不慎,就会掉进坑里。不过别慌,Linux 提供了协议收发汇总,netstat -s 了解一下:

netstat -s

一大堆输出,看得眼花缭乱?淡定!咱们的目标是错误、丢包和重传。

  • TCP协议:连接失败、重传、半连接重置、SYN重传、超时… 简直就是车祸现场!

虽然错误很多,但根源不明。继续往下挖!

4、iptables:防火墙的“温柔陷阱”?

除了协议本身,iptables和内核连接跟踪机制,也可能暗中搞鬼。

先看连接跟踪,对比一下当前连接数和最大连接数:

sysctl net.netfilter.nf_conntrack_max
sysctl net.netfilter.nf_conntrack_count

如果连接数远小于最大值,那基本可以排除连接跟踪的问题。

接下来,重点排查iptables。这家伙基于Netfilter框架,通过各种规则,过滤和修改网络包。最可疑的就是filter表里那些DROPREJECT规则。查查它们的统计信息,看看有没有被执行到:

iptables -t filter -nvL

如果发现DROP规则的统计数值不为0,那就要注意了!

Chain INPUT (policy ACCEPT 25 packets, 1000 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6   240 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            statistic mode random probability 0.29999999981

Chain OUTPUT (policy ACCEPT 15 packets, 660 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6   264 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            statistic mode random probability 0.29999999981

果然,两条DROP规则,明晃晃地写着“随机30%丢包”!简直是赤裸裸的犯罪!

iptables -t filter -D INPUT -m statistic --mode random --probability 0.30 -j DROP
iptables -t filter -D OUTPUT -m statistic --mode random --probability 0.30 -j DROP

干掉这两条规则,世界终于清净了!

再来一发hping3

hping3 -c 10 -S -p 80 192.168.0.30

这次,hping3终于正常了!但是!别高兴太早!hping3只能验证端口监听,HTTP服务能不能正常响应,还得另说!

curl --max-time 3 http://192.168.0.30

What?依旧timeout?看来,真凶还没落网!

5、tcpdump:终极武器,真相只有一个!

遇到疑难杂症,抓包大法好!

tcpdump -i eth0 -nn port 80

然后,再次执行curl命令。

等等!netstat -i再确认一下:

netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0             100       157      0   3440      0        94      0      0      0 BMRU
lo             65536         0      0      0      0         0      0      0      0 LRU

RX-DRP 3440!网卡接收时丢包了!

为什么hping3没事,curl就挂了?因为hping3只发SYN包,curl还要发HTTP GET请求!问题很可能出在MTU上!

看看netstat -i的输出,eth0的MTU居然只有100!而以太网默认MTU是1500!这TM也太小了!

ifconfig eth0 mtu 1500

改完MTU,再来一发curl

curl --max-time 3 http://192.168.0.30
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

熟悉的Nginx欢迎界面,终于出现了!丢包问题,终于彻底解决了!

成功.gif

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划

  2. 配套视频教程

  3. SRC&黑客文籍

  4. 护网行动资料

  5. 黑客必读书单

  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值