dr.*_*dr. 88 linux networking debugging troubleshooting
Linux 和 Unix 用户有时会面临各种网络问题。这些问题中的许多问题都在此处和其他一些故障排除论坛上进行了介绍,但它们非常具体,并包含许多其他技术信息,有时很难理解错误系统行为的要点和真正原因。
通过提出这个问题,我的目的是创建一个社区 wiki页面,它可以概括我们的网络故障排除和调试经验。我希望 Linux 和 Unix 用户可以使用此页面更容易地识别和解决(“分而治之”)他们的网络问题。
此页面的父页面应该是 诊断问题的最佳实践。但在这里我们应该专注于从用户空间和内核空间解决网络问题。
我想,如果你:
它非常适合这个主题。
我将从分享 varios诊断工具的链接和12 年前的简单教程开始。此外,archlinux 教程似乎有关于我们主题的实际信息。为了深入了解 linux 网络,我们绝对需要访问Linux Networking-HOWTO。
dr.*_*dr. 125
我认为,网络故障排除的一般原则是:
至于我,我通常使用所有需要的工具获取所有必需的信息,并尝试将这些信息与我的经验相匹配。确定包含错误的网络堆栈级别有助于切断不太可能的变体。借助别人的经验,可以快速解决问题,但往往会出现这样的情况,有的问题我不理解也能解决,如果再出现这个问题,没有网络我就不可能再解决了。
总的来说,我不知道如何解决网络问题。我的大脑中似乎有一个名为 的神奇函数SolveNetworkProblem(information_about_system_state, my_experience, people_experience),它有时会返回完全正确的答案,有时也可能会失败(就像这里TCP 在 Linux 笔记本电脑上死掉一样)。
我通常使用这个集合中的 utils 进行网络调试:
ifconfig(或ip link, ip addr) - 用于获取有关网络接口的信息ping- 用于验证是否可以从我的机器访问目标主机。ping也可用于基本的 DNS 诊断——我们可以通过 IP 地址或主机名 ping 主机,然后决定 DNS 是否工作。然后traceroute或tracepath或mtr看看那里发生了什么。dig - 诊断一切 DNSdmesg | less或dmesg | tail或dmesg | grep -i error- 用于了解 Linux 内核对某些麻烦的看法。netstat -antp+ | grep smth- 我最常用的 netstat 命令用法,它显示有关 TCP 连接的信息。我经常使用 grep 执行一些过滤。又见新ss命令(iproute2新标准的Linux网络工具套件)和lsof作为lsof -ai tcp -c some-cmd。telnet <host> <port> - 对于与各种 TCP 服务(例如在 SMTP、HTTP 协议上)进行通信非常有用,我们还可以检查连接到某个 TCP 端口的一般机会。iptables-save(在 Linux 上) - 转储完整的iptables 表ethtool - 获取所有网络接口卡参数(链接状态、速度、卸载参数...)socat- 用于测试所有网络协议(UDP、多播、SCTP...)的瑞士军队工具。有几个-d选项特别有用(比 telnet 更有用)。iperf - 测试带宽可用性openssl( s_client, ocsp, x509...) 调试所有 SSL/TLS/PKI 问题。wireshark - 强大的网络流量捕获和分析工具,可以让您分析和捕获许多网络漏洞。iftop - 在网络/路由器上显示大用户。iptstate (在 Linux 上)- 防火墙连接跟踪的当前视图。arp(或新的 (Linux) ip neigh) - 显示 ARP 表状态。route或更新的(在 Linux 上)ip route- 显示路由表状态。strace(或truss,dtrace或tusc取决于系统) - 是有用的工具,它显示系统调用处理问题的过程,它还显示系统调用失败时的错误代码(errno)。这些信息通常足以理解系统行为和解决问题。或者,在某些网络函数上使用断点gdb可以让您了解它们是何时创建的以及使用了哪些参数。iptables -nvL显示每个规则匹配的数据包数量(iptables -Z将计数器归零)。LOG插入防火墙链中的目标有助于查看哪些数据包到达它们以及它们到达那里时已经被转换。要进一步NFLOG(与 相关联ulogd)将记录完整的数据包。Bru*_*ger 17
数量惊人的“网络问题”归结为一种或另一种 DNS 问题。应该使用初始故障排除ping -n w.x.y.z以忽略主机名的 DNS 解析,而只需检查 IP 连接。之后,用于route -n检查没有DNS解析的默认IP路由。
验证IP连接,布线后,nslookup,host并且dig可以产生信息。请记住,“锁定”可能表示 DNS 超时正在发生。
不要忘记检查 的存在和内容/etc/resolv.conf。DHCP 客户端在每次租用时都会更改该文件,有时它们会出错,或者如果磁盘空间紧张,更新可能不会发生。
可能存在布线问题。如果您可以访问硬件,请确保所有电缆均已插入并机械接合。如果您可以看到路由器或以太网接口,请确保链路指示灯亮起。
远程,您必须依赖ethtool和mii-tool。
[root@flask ~]# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Speed: 10Mb/s
Duplex: Half
Port: MII
PHYAD: 24
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: g
Wake-on: d
Current message level: 0x00000001 (1)
drv
Link detected: yes
Run Code Online (Sandbox Code Playgroud)
“检测到链接:是”很好,但 10Mb/s 和半双工不好,因为那台计算机上的网卡可以做得更好。我需要弄清楚是网卡坏了还是电缆坏了。插入同一路由器的另一台计算机显示 100Mb/s,全双工。