前言关于MTULinux下查看与修改mtu值检测需要设置的合理的值:MTU设置与查看:wireshark 统计会话统计流量图IO graphwireshark & tcpdump过滤tcp重传tcp.analysis.retransmissiontcp.flags.reset关于ip地址冲突arp-scan使用xarp windows 工具直接包分析
网络问题的排查思路
随机抓包初步分析
arp冲突(ip冲突),出现大量tcp retransmission包,冲突ip一般不会多,可手动定位
自动扫描工具:xarp
windows 用,arp-scan
linux用 (epel源,其依赖多,但都位于base)
手动检查梳理出tcp retransmission包对应的目标或源ip,逐一排查。
https://developer.aliyun.com/article/222535
xxxxxxxxxx
111ip a
2echo "1400" > /sys/class/net/eth0/mtu
3sed -i -e "/MTU/s/^/#/g" -e "/^##/d" -e '$a MTU=1400' /etc/sysconfig/network-scripts/ifcfg-eth0
4ip a
5
6
7systemctl restart network
8
9echo "1400" > /sys/class/net/eth0/mtu
10echo "1500" > /sys/class/net/eth0/mtu
11sed -i -e "/MTU/s/^/#/g" -e "/^##/d" -e '$a MTU=1500' /etc/sysconfig/network-scripts/ifcfg-eth0
MTU:通信术语 最大传输单元(Maximum Transmission Unit)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。 我们在使用互联网时进行的各种网络操作,都是通过一个又一个“数据包”传输来实现的。而MTU指定了网络中可传输数据包的最大尺寸,在我们常用的以太网中,MTU是1500字节。超过此大小的数据包就会将多余的部分拆分再单独传输 。 MTU的设置不是一个值天下通用,所以需要我们合理设置特殊场景的MTU 。
首先确认什么是不合理的 : 1.本地MTU值大于网络MTU值时,本地传输的数据包过大导致网络会拆包后传输,不但产生额外的数据包,而且消耗了“拆包、组包”的时间 。 2.本地MTU值小于网络MTU值时,本地传输的数据包可以直接传输,但是未能完全利用网络给予的数据包传输尺寸的上限值,传输能力未完全发挥 。 这样我们就知道: 所谓合理的设置MTU值,就是让本地的MTU值与网络的MTU值一致,既能完整发挥传输性能,又不让数据包拆分。
大部分网络设备都是1500。如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把本机的MTU设成比网关的MTU小或相同,就可以减少丢包
Linux OS:
xxxxxxxxxx
21ping -s 1472 -M do 172.21.0.118
2ping -M do 172.21.0.118 -s 1472
含义: 发送大小包大小是1472(+28)字节,禁止路由器拆分数据包。 【 1472 + 8(ICMP回显示请求和回显应答报文格式长度) + 20(IP首部) = 1500 】 回复结果: 1.如果正常回复,说明网络允许最大MTU就是1500字节,与系统默认相同,只需将自己的路由的MTU也设置为1500即可。 2.如果没正常回复,说明数据包大小超过了网络限定的MTU大小。需要减小探测包大小再次尝试。
含义: 发送大小包大小是1472(+28)字节,禁止路由器拆分数据包。 【 1472 + 8(ICMP回显示请求和回显应答报文格式长度) + 20(IP首部) = 1500 】 回复结果: 1.如果正常回复,说明网络允许最大MTU就是1500字节,与系统默认相同,只需将自己的路由的MTU也设置为1500即可。 2.如果没正常回复,说明数据包大小超过了网络限定的MTU大小。需要减小探测包大小再次尝试。
1、设置本机的mtu,即时生效,重启后失效 # ifconfig eth0 mtu 1472
2、永久生效的修改方法,缺点是需要重启网卡
# vim /etc/sysconfig/network-scripts/ifcfg-eth0 增加如下内容
# service network restart
查看设置后的结果 # netstat -i 或使用ifconfig也可以查看得到
--------------------------------------------------------------------
MSS: Maxitum Segment Size 最大分段大小
MSS最大传输大小的缩写,是TCP协议里面的一个概念。 MSS就是TCP数据包每次能够传输的最大数据分段。为了达到最佳的传输效能TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes), 通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。
而一般以太网MTU都为1500, 所以在以太网中, 往往TCP MSS为1460。
1、Statistics->Conversations会话统计功能,统计通信会话之间接收和发送的数据包和字节数,通过这个工具可以找出网络中哪个会话(IP地址或端口号)最占用带宽,进一步作出网络策略
Statistics–>Flow graph会话通信过程图形可视化,还可以看到是否有TCP的延迟包括延迟确认(Delayed ACK),服务端是否开启Nagle算法
查看IO graph,确保链路不忙,不忙的链路IO会有很多高低起落,峰值以及空闲间隙
xxxxxxxxxx
291Wiresherk的info常见提示
21、Packet size limited during capture
3
4说明被标记的那个包没有抓全。一般是由抓包方式引起,有些操作系统中默认只抓每个帧的前96个字节
52、TCP Previous segment not captured
6
7如果Wireshark发现后一个包的Seq大于Seq+Len,就知道中间缺失了一段,如果缺失的那段在整个网络包中找不到(排除了乱序),就会提示
83、TCP ACKed unseen segment
9
10当Wireshark发现被Ack的那个包没被抓到,就会提示
114、TCP Out-of-Order
12
13当Wireshark发现后一个包的Seq号小于前一个包的Seq+Len时,就会认为乱序,发出提示
145、TCP Dup ACK
15
16当乱序或丢包发生时,接收方会收到一些Seq号比期望值大的包。没收到一个这种包就会Ack一次期望的Seq值,提现发送方
176、TCP Fast Retransmission
18
19当发送方收到3个或以上的【TCP Dup ACK】,就意识到之前发的包可能丢了,于是快速重传它
207、TCP Retransmission
21
22如果一个包真的丢了,又没有后续包可以在接收方触发【Dup Ack】就不会快速重传,这种情况下发送方只好等到超时了再重传
238、TCP zerowindow
24
25包种的“win”代表接收窗口的大小,当Wireshark在一个包中发现“win=0”时,就会发提示
269、TCP window Full
27
28此提示表示这个包的发送方已经把对方所声明的接收窗口耗尽了
2910、Time-to-live exceeded(Fragment reassembly time exceeded)
xxxxxxxxxx
11tcp.analysis.retransmission
xxxxxxxxxx
51tcp.flags.reset==1
2
3
4# 使用tcpdump 仅查看
5tcpdump -i eth0 'tcp[tcpflags] & (tcp-rst) != 0' -vvv -nn
如果本地有yum源,则只需要安装一个包,其它的都在base中
xxxxxxxxxx
671===============================================================================================================================
2Package Arch Version Repository Size
3===============================================================================================================================
4Installing:
5arp-scan x86_64 1.9.2-1.el7 epel 336 k
6Installing for dependencies:
7libpcap x86_64 14:1.5.3-12.el7 base 139 k
8mailcap noarch 2.1.41-2.el7 base 31 k
9perl x86_64 4:5.16.3-295.el7 base 8.0 M
10perl-Business-ISBN noarch 2.06-2.el7 base 25 k
11perl-Business-ISBN-Data noarch 20120719.001-2.el7 base 24 k
12perl-Carp noarch 1.26-244.el7 base 19 k
13perl-Compress-Raw-Bzip2 x86_64 2.061-3.el7 base 32 k
14perl-Compress-Raw-Zlib x86_64 1:2.061-4.el7 base 57 k
15perl-Data-Dumper x86_64 2.145-3.el7 base 47 k
16perl-Digest noarch 1.17-245.el7 base 23 k
17perl-Digest-MD5 x86_64 2.52-3.el7 base 30 k
18perl-Encode x86_64 2.51-7.el7 base 1.5 M
19perl-Encode-Locale noarch 1.03-5.el7 base 16 k
20perl-Exporter noarch 5.68-3.el7 base 28 k
21perl-File-Listing noarch 6.04-7.el7 base 13 k
22perl-File-Path noarch 2.09-2.el7 base 26 k
23perl-File-Temp noarch 0.23.01-3.el7 base 56 k
24perl-Filter x86_64 1.49-3.el7 base 76 k
25perl-Getopt-Long noarch 2.40-3.el7 base 56 k
26perl-HTML-Parser x86_64 3.71-4.el7 base 115 k
27perl-HTML-Tagset noarch 3.20-15.el7 base 18 k
28perl-HTTP-Cookies noarch 6.01-5.el7 base 26 k
29perl-HTTP-Daemon noarch 6.01-8.el7 base 21 k
30perl-HTTP-Date noarch 6.02-8.el7 base 14 k
31perl-HTTP-Message noarch 6.06-6.el7 base 82 k
32perl-HTTP-Negotiate noarch 6.01-5.el7 base 17 k
33perl-HTTP-Tiny noarch 0.033-3.el7 base 38 k
34perl-IO-Compress noarch 2.061-2.el7 base 260 k
35perl-IO-HTML noarch 1.00-2.el7 base 23 k
36perl-IO-Socket-IP noarch 0.21-5.el7 base 36 k
37perl-IO-Socket-SSL noarch 1.94-7.el7 base 115 k
38perl-LWP-MediaTypes noarch 6.02-2.el7 base 24 k
39perl-Mozilla-CA noarch 20130114-5.el7 base 11 k
40perl-Net-HTTP noarch 6.06-2.el7 base 29 k
41perl-Net-LibIDN x86_64 0.12-15.el7 base 28 k
42perl-Net-SSLeay x86_64 1.55-6.el7 base 285 k
43perl-PathTools x86_64 3.40-5.el7 base 82 k
44perl-Pod-Escapes noarch 1:1.04-295.el7 base 51 k
45perl-Pod-Perldoc noarch 3.20-4.el7 base 87 k
46perl-Pod-Simple noarch 1:3.28-4.el7 base 216 k
47perl-Pod-Usage noarch 1.63-3.el7 base 27 k
48perl-Scalar-List-Utils x86_64 1.27-248.el7 base 36 k
49perl-Socket x86_64 2.010-5.el7 base 49 k
50perl-Storable x86_64 2.45-3.el7 base 77 k
51perl-Text-ParseWords noarch 3.29-4.el7 base 14 k
52perl-Time-HiRes x86_64 4:1.9725-3.el7 base 45 k
53perl-Time-Local noarch 1.2300-2.el7 base 24 k
54perl-TimeDate noarch 1:2.30-2.el7 base 52 k
55perl-URI noarch 1.60-9.el7 base 106 k
56perl-WWW-RobotRules noarch 6.02-5.el7 base 18 k
57perl-constant noarch 1.27-2.el7 base 19 k
58perl-libs x86_64 4:5.16.3-295.el7 base 689 k
59perl-libwww-perl noarch 6.05-2.el7 base 205 k
60perl-macros x86_64 4:5.16.3-295.el7 base 44 k
61perl-parent noarch 1:0.225-244.el7 base 12 k
62perl-podlators noarch 2.5.1-3.el7 base 112 k
63perl-threads x86_64 1.87-4.el7 base 49 k
64perl-threads-shared x86_64 1.43-6.el7 base 39 k
65
66Transaction Summary
67===============================================================================================================================
xxxxxxxxxx
221[root@centos ~]# arp-scan -l
2Interface: eth0, datalink type: EN10MB (Ethernet)
3Starting arp-scan 1.9.2 with 256 hosts (http://www.nta-monitor.com/tools-resources/security-tools/arp-scan/)
4100.64.10.1 36:6e:ef:7b:9a:2a (Unknown)
5100.64.10.16 12:92:2f:8c:53:af (Unknown)
6100.64.10.22 12:92:2f:8c:53:1f (Unknown)
7100.64.10.73 4a:dc:9e:c2:52:df (Unknown)
8100.64.10.74 c2:8a:84:50:74:e7 (Unknown)
9100.64.10.82 32:d7:19:a4:b2:da (Unknown)
10100.64.10.84 da:d0:4d:47:06:8d (Unknown)
11100.64.10.85 fe:ab:a9:de:56:9b (Unknown)
12100.64.10.91 a6:b1:4d:c2:cc:2b (Unknown)
13100.64.10.92 a6:3b:55:7d:3e:3e (Unknown)
14100.64.10.93 1a:e1:cc:6c:e8:d7 (Unknown)
15100.64.10.94 0a:1c:3f:e7:ef:8a (Unknown)
16100.64.10.170 5a:67:8b:78:f5:af (Unknown)
17100.64.10.200 7a:2e:d7:5d:f9:ce (Unknown)
18100.64.10.201 a2:37:b5:7f:c1:c8 (Unknown)
19
2015 packets received by filter, 0 packets dropped by kernel
21Ending arp-scan 1.9.2: 256 hosts scanned in 2.529 seconds (101.23 hosts/sec). 15 responded
22
xarp-2.2.2-win (安装包内集成winpcap)另外支持ubuntu,可直接使用arp-scan
如下所有的问题包均指向同一个ip,可以再次使用arp -a查询验证。