linux网络相关问题的基本排查方法
在做linux网络应用中,可能经常会遇到download或upload等失败的时候。
那遇到这类问题时,该如何去入手查找问题点呢?
下面是结合自己学习过程中总结的一些分析问题的方法,将其记录下来,
以备将来需要时可以翻出来看一看。
1. 如果网络不通,先用ifconfig检查系统是否正确识别到网络接口(即网卡),
sh-# ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:00:11:22:33
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:40 Base address:0x2000
可以看到,系统已经识别到了eth0。
2. 如果能够识别到网卡,那还要从ifconfig的结果里面查看是否有分配IP address,
sh-# ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:00:11:22:33
inet addr:192.168.102.86 Bcast:192.168.102.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:199 errors:0 dropped:6 overruns:0 frame:0
TX packets:146 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:69472 (67.8 Kb) TX bytes:17706 (17.2 Kb)
Interrupt:40 Base address:0x2000
如果没有ip address,就要检查一下你的主机是否连网了;
如果有分配到ip address,接下来使用ping命令检查是否能ping通其它的主机。
3. ping www.google.com或者ping 192.168.0.1测试网络的连通性。
ping命令通过向destination host发送ICMP ECHO_REQUEST packet来测试
两台host之间的连通性。由于ping是网络层协议,所以ping通只能证明网络层及其
以下层没有问题,而不能证明其上层如传输层(TCP/UDP)或应用层(FTP/HTTP等)
是否有问题。另外一点ping通并不能代表可以连接到internet,因为一个局域网
内部的两台host之间也能相互ping通;当然ping www.google.com能ping通的话,
可以说明你的host可以连接到internet。
sh-# ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_req=1 ttl=255 time=3.86 ms
64 bytes from 192.168.0.1: icmp_req=2 ttl=255 time=17.0 ms
64 bytes from 192.168.0.1: icmp_req=3 ttl=255 time=1.90 ms
64 bytes from 192.168.0.1: icmp_req=4 ttl=255 time=1.32 ms
^C
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3027ms
rtt min/avg/max/mdev = 1.320/6.029/17.031/6.421 ms
sh-#
sh-# ping www.google.com
PING www.google.com (74.125.239.147) 56(84) bytes of data.
64 bytes from nuq05s02-in-f19.1e100.net (74.125.239.147): icmp_req=1 ttl=53 time=258 ms
64 bytes from nuq05s02-in-f19.1e100.net (74.125.239.147): icmp_req=2 ttl=53 time=244 ms
64 bytes from nuq05s02-in-f19.1e100.net (74.125.239.147): icmp_req=3 ttl=53 time=242 ms
^C
--- www.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2016ms
rtt min/avg/max/mdev = 242.508/248.524/258.558/7.153 ms
3. 所以如果你ping google有成功的话,那接下来可能就需要抓包工具来协助分析问题了。
工具之一tcpdump,tcpdump简单讲就是用来dump网络中的数据包:
./tcpdump -i eth0 -w ./tcpdump.pcap
其中,-i用来指定具体的interface,-w用来指定数据包的存储路径。
待解决问题:那当我们抓到了数据包tcpdump.pcap后,如何根据数据包进行分析呢?
4. 有时候可能需要对网络性能进行测试,那可以借助另一个工具iperf了,
iperf是一个用来测量网络中最大TCP/UDP带宽性能的工具。
(1)如果你要测试的是host接收数据的性能比如从某server上download数据,
那此时你的host是接收端。
a. 将你的PC配置成发送数据端,并且指定报告间隔为1s,测试时间为100s:
./iperf.exe -c 192.168.0.111 -i1 -t100,
其中-c指定为client mode,所以其后的192.168.0.111为server ip address;
-i用来指定报告的时间时间;-t指定测试的时间。
b. 接收数据端(此例要配置为server端)要:
./iperf -s -i1,
其中-s用来指定你的host为server mode。
(2)测试host发送数据的性能:
./iperf -c 192.168.0.110 -w 64k -i1 -u -b 15M -t600,
其中-w指定TCP窗口的大小为64k,-u指定使用udp协议发送数据;
-t指定udp带宽为15Mbit/s。