[Linux]Network Troubleshooting
Network TroubleShooting
1 Internet Control Message Protocol (ICMP)
Internet控制消息协议(ICMP)是TCP/IP协议簇的一部分,用于发送更新和错误消息。它是调试网络问题(如数据包传输失败)的极为有用的工具。
每个ICMP消息包含类型、代码和校验和字段。类型字段表示ICMP消息的种类;代码作为子类型,提供有关消息的更多信息;校验和用于检测消息完整性方面的问题。
以下是一些常见的ICMP类型:
- 类型0:Echo应答
- 类型3:目标不可达
- 类型8:Echo请求
- 类型11:超时
当数据包无法到达目的地时,会生成类型3的ICMP消息。在类型3中,有16个代码值进一步描述为何无法到达目的地:
- 代码0:网络不可达
- 代码1:主机不可达
- …
2 Ping工具介绍
Ping是网络诊断中最基本的工具之一,用于测试数据包是否能够到达目标主机。它通过向目标主机发送ICMP Echo请求(类型8)数据包,并等待ICMP Echo应答(类型0)来工作。当主机发出请求数据包并收到目标返回的响应时,Ping操作成功。
以下是一个示例:
1 |
|
在这个例子中,使用ping命令检查是否能访问www.google.com。`-c`标志(计数)用于在达到指定数量后停止发送Echo请求数据包。
输出的第一部分表示正在向74.125.239.112(google.com)发送64字节的数据包,其余部分显示了这些数据包往返的详细信息。默认情况下,每秒发送一个数据包。
关键字段解释
icmp_seq:显示发送的数据包序列号。本例中,共发送了3个数据包,并且所有数据包都已返回。如果Ping过程中发现某些序列号缺失,则表明存在连接问题,不是所有数据包都能顺利通过。若序列号乱序,可能意味着连接速度非常慢,导致数据包超过了默认的一秒间隔。
ttl:生存时间(Time To Live),作为跳数计数器。每次经过一跳,该值减一,直至变为零,此时数据包将被丢弃。这确保了数据包不会在网络中无限循环。
time:从发送Echo请求到接收Echo应答的往返时间。
通过分析Ping命令的结果,可以有效地评估网络连接的质量和稳定性。
3 Traceroute工具介绍
Traceroute命令用于查看数据包的路由路径。它通过发送具有递增TTL(生存时间)值的数据包来工作,从1开始。第一个路由器接收到数据包时会将TTL值减一,导致数据包被丢弃,并向源主机返回一个ICMP超时消息。然后,下一个数据包的TTL设置为2,这样它就能通过第一个路由器,但到达第二个路由器时TTL再次变为0,从而再次触发ICMP超时消息的返回。Traceroute以此方式运作,随着数据包的发送和丢弃,逐步构建出一条从源到目的地所经过的路由器列表,直到最终接收到目标主机的ICMP Echo应答。
以下是Traceroute的一个示例输出:
1 |
|
每行代表了从本地主机到目标主机之间的一个路由器或设备。它显示了该节点的名称及其IP地址,最后三列分别对应了数据包往返该节点所需的时间。默认情况下,Traceroute沿路由发送三个数据包以获取平均往返时间,从而帮助评估网络路径的质量与效率。通过分析这些信息,可以识别网络延迟的原因及可能存在的瓶颈。
4 netstat
常见端口
可以通过查看/etc/services
文件来获取常见端口的列表:
1 |
|
第一列是服务名称,接着是端口号和所使用的传输层协议。
Netstat工具详解
Netstat是一个非常实用的工具,可以提供详细的网络信息,包括网络连接、路由表、网络接口信息等。
套接字和端口
套接字是允许程序发送和接收数据的接口,而端口用于标识哪个应用程序应发送或接收数据。套接字地址是IP地址和端口的组合。主机与目标之间的每个连接都需要一个唯一的套接字。例如,HTTP服务运行在80端口上,但可以拥有多个HTTP连接,为了维护每个连接,每建立一个连接就会创建一个套接字。
以下是一个使用netstat -at
命令的输出示例:
1 |
|
netstat -a
命令显示了所有监听和非监听的网络套接字,-t
标志仅展示TCP连接。各列含义如下:
- Proto:使用的协议,TCP或UDP。
- Recv-Q:已排队等待接收的数据量。
- Send-Q:已排队等待发送的数据量。
- Local Address:本地连接的主机地址。
- Foreign Address:远程连接的主机地址。
- State:套接字的状态。
常见的套接字状态包括:
- LISTENING:套接字正在监听传入连接。
- SYN_SENT:套接字正尝试主动建立连接。
- ESTABLISHED:套接字已经建立了连接。
- CLOSE_WAIT:远程主机已关闭连接,等待本地套接字关闭。
- TIME_WAIT:套接字在关闭后仍处于等待状态,以处理网络中可能残留的数据包。
5 数据包分析简介
Wireshark和tcpdump是两种非常流行的数据包分析工具。它们能够扫描网络接口、捕获数据包活动、解析数据包并输出信息供我们查看,使我们能够深入进行网络分析,触及底层细节。
安装tcpdump
1 |
|
在指定接口上捕获数据包
以下是在wlan0
接口上捕获数据包的示例:
1 |
|
运行数据包捕获时,会注意到大量的网络活动。
理解输出
- 时间戳:记录网络活动的时间。
- IP:包含协议信息。
- 源地址与目的地址:例如
icebox.lan > nuq04s29-in-f4.1e100.net
。 - 序列号(seq):TCP数据包的起始和结束序列号。
- 长度:数据包长度(字节)。
将tcpdump输出写入文件
1 |
|
这将把捕获的数据直接写入指定文件,便于后续分析。