网络问题可归纳为硬件问题和软件设置问题两类:
硬件问题通常需要通过一些专门的设备来分析硬件。
软件设置问题大多数是设置以及概念理解的问题。
1.硬件问题
(1)网线问题
例如:网线被截断,网线过度扭曲变形造成信号不良,自制网络接头品质不良,网络接头与设备接触不良。
(2)网卡,Hub以及Router等网络设备问题
例如:网卡不稳定、质量不佳,或者与整体系统的兼容性不好。个网络设备的接头质量不佳,接触不良,造成信号衰减。网络设备所处环境恶劣导致宕机问题。各网络使用方法不良,造成设备功能衰减。
(3)设备配置
例如:架设的网线过长,导致信号衰减严重(以太网CAT5E的网线理论限制长度约90m,两设备之间距离大于90m时,信号就容易出现问题)。其他噪声干扰。局域网上,节点或其他设备过多。
2.软件问题
(1)网卡的IP/Netmask设置错误
例如:IP冲突,子网掩码配置错误,网卡驱动程序使用错误,网卡的IRQ和I/O Address的设置冲突等。
(2)路由问题
例如:默认路由配置错误,路由接口与实际不符,使得数据包无法顺利发送。
(3)通信协议不相符
例如:两台linux机器要通过NFS通信协议传输数据时,两边都需要支持rpcbind这个启动RPC协议的程序才行。
(4)网络负荷问题
例如:同时有大量的数据包涌进同一个网络时,就有可能造成网络的停顿甚至故障。(思博伦打流测试等)
(5)其他问题
例如:一些port被防火墙阻挡,应用程序本身的bug,应用程序用户的网络设置,不同操作系统的兼容性等。
3.处理思路
(1)了解问题:是刚发生的问题,还是之前有人做了什么动作之后导致的无法连接。
(2)确认局域网连接:用ping来沟通两台机器或路由器
(3)确认对外连接
(4)确认DNS查询:利用nslookup,host,或dig命令
(5)确认Internet节点:利用traceroute检查各节点是否有问题。
(6)确认服务器状态是否正常。
(7)防火墙或者权限问题
4.处理流程
(1)网卡工作确认
a.确认网卡是否已近驱动成功
观察网卡信息是否被内核捕获
[root@localhost ~]# dmesg |grep -in eth 1740:[ 2.275192] e1000 0000:02:01.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:14:b5:f9 1741:[ 2.275204] e1000 0000:02:01.0 eth0: Intel(R) PRO/1000 Network Connection 1783:[ 6.039168] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
1784:[ 6.044525] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
由1741行可知,网卡使用的模块为e1000,使用的芯片Intel,由1784行,可知1000M的全双模式。
[root@localhost ~]# lspci |grep -i ethernet 02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
使用的是虚拟网卡
查看网卡的模块
[root@localhost ~]# lsmod |grep 1000 e1000 137500 0 #模块已近加载到内核 [root@localhost ~]# modinfo e1000 filename: /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000/e1000.ko.xz #内核模块位置(注意:不同内核版本使用的驱动程序是不一样的。所以,自己编译的驱动程序需要重新编译。) version: 7.3.21-k8-NAPI license: GPL description: Intel(R) PRO/1000 Network Driver author: Intel Corporation, <linux.nics@intel.com> rhelversion: 7.4 srcversion: 9E0A112E5D47C996E7C4A58 alias: pci:v00008086d00002E6Esv*sd*bc*sc*i* alias: pci:v00008086d000010B5sv*sd*bc*sc*i*
若驱动不成功,则需要编译网卡驱动程序。
b.确认是否可以手动直接建立IP参数
建立IP测试
[root@localhost ~]# ifconfig eth0 192.168.42.200 Connection closed by foreign host. Disconnected from remote host(192.168.42.181:22) at 12:06:08. Type `help' to learn how to use Xshell prompt. [c:~]$ ssh 192.168.42.200 Connecting to 192.168.42.200:22... Connection established. To escape to local shell, press 'Ctrl+Alt+]'. WARNING! The remote SSH server rejected X11 forwarding request. Last login: Thu Nov 21 01:07:32 2019 from 192.168.42.1 [root@localhost ~]#
能够正常检测并响应,则证明网卡设置是没有问题的。
(2)局域网内各项链接设备检测
a.明确局域网网段
b.检查Gateway与DNS的设置
(3)确认路由表规则
使用ping来连接DNS解析服务器。
[root@localhost ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 223.5.5.5
[root@localhost ~]# ping 223.5.5.5
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=128 time=36.2 ms
64 bytes from 223.5.5.5: icmp_seq=2 ttl=128 time=36.7 ms
64 bytes from 223.5.5.5: icmp_seq=3 ttl=128 time=36.4 ms
64 bytes from 223.5.5.5: icmp_seq=4 ttl=128 time=37.2 ms
能通,则表明与外部网络连接没有问题。不通,则可能是防火墙或者路由的问题了。
检查路由:
[root@localhost ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.42.2 0.0.0.0 UG 100 0 0 eth0 192.168.42.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
(4)主机名与IP查询的DNS错误
[root@localhost ~]# ping 223.5.5.5 PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data. 64 bytes from 223.5.5.5: icmp_seq=1 ttl=128 time=36.4 ms [root@localhost ~]# ping www.baidu.com
DNS地址能通,但是不能访问域名,大多是DNS配置问题,检查/etc/resove.conf以及/etc/hosts文件。
(5)公网问题
使用traceroute跟踪路由
(6)服务器问题
上述均没有问题,却某台机器登录不不上,最大的可能是主机的配置问题。
a.主机没有开发开该服务
b.主机的权限设置错误
c.安全机制配置错误
例如SElinux是用来更细微的控制主机访问的一种核心机制,SElinux会阻挡服务的提供。此外,/etc/hosts.deny、PAM模块等,都可能造成用户无法登录的问题。
d.防火墙设置问题
可使用tcpdump来跟踪数据包,以便顺利的了解防火墙是否设置错误。