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
表里那些DROP
和REJECT
规则。查查它们的统计信息,看看有没有被执行到:
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欢迎界面,终于出现了!丢包问题,终于彻底解决了!
黑客/网络安全学习包
资料目录
-
成长路线图&学习规划
-
配套视频教程
-
SRC&黑客文籍
-
护网行动资料
-
黑客必读书单
-
面试题合集
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
1.成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
2.视频教程
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************
3.SRC&黑客文籍
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦!
4.护网行动资料
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
5.黑客必读书单
**
**
6.面试题合集
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
更多内容为防止和谐,可以扫描获取~
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************