linux网络故障解决方法

时间:2024-03-02 15:12:38

一、检测工具

tcpdump:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

如果系统没有使用yum安装:

# yum -y install tcpdump

常用参数:

-i 指定网卡接口eth

-n 不解析IP地址为域名

-v 显示包中详细信息

-t 指定协议类型

详细使用方法:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

二、分析原因

1、ip地址的配置问题

2、网关问题

3、dns问题

4、TTL问题

三、处理步骤

1、ping www.baidu.com     域名

2、ping 61.135.169.121     公网ip

3、ping 192.168.1.1        网关

四、TTL数据包的生存周期

linux操作系统的默认值是64,每经过一个路由器节点,TTL值减1。TTL的值为0时,说明目标地址不可达,并返回:Time to live exceeded,TTL的作用是防止数据包无限制的在公网中转发。

五、解决由TTL值造成的网络不通

在网卡配置正确的情况下就有可能是由于TTL值造成的网络问题

ping使用的协议是ICMP协议

抓包:

# tcpdump -i eth1 -nv -t icmp

# ping -c 1 192.168.1.1

抓包的结果:

IP (tos 0x0, ttl 1, id 0, offset 0, flags [DF], proto ICMP (1), length 84)

    192.168.1.155 > 192.168.1.1: ICMP echo request, id 43537, seq 1, length 64

IP (tos 0x0, ttl 64, id 12973, offset 0, flags [none], proto ICMP (1), length 84)

192.168.1.1 > 192.168.1.155: ICMP echo reply, id 43537, seq 1, length 64

解决办法:

临时生效:

# echo 64 > /proc/sys/net/ipv4/ip_default_ttl

永久生效:

# vim /etc/sysctl.conf

添加如下内容:

net.ipv4.ip_default_ttl = 64

# sysctl /etc/sysctl.conf

结果:

[root@demo1 ~]# ping -c 1 www.baidu.com

PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.

64 bytes from 61.135.169.121: icmp_seq=1 ttl=57 time=142 ms

正确的包的值:

IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)

    192.168.1.155 > 61.135.169.125: ICMP echo request, id 45329, seq 1, length 64

IP (tos 0x0, ttl 57, id 0, offset 0, flags [DF], proto ICMP (1), length 84)

    61.135.169.125 > 192.168.1.155: ICMP echo reply, id 45329, seq 1, length 64