目录
路由器是什么?
- 路由器(Router)是一种网络设备,主要用于连接多个网络,并通过 IP 地址转发数据包,从一个网络到另一个网络。
- 路由器位于 OSI 模型的网络层(第三层),负责决定数据包的路径,确保数据能够高效地从源设备传输到目的设备。
路由器的基本功能:
- 路由选择:
- 根据目标 IP 地址决定数据包的最佳转发路径。
- 分割广播域:
- 通过划分子网和处理不同的 IP 地址,减少广播流量。
- IP 地址分配和转换:
- 例如,NAT(网络地址转换)可以帮助多个内部设备共享一个公共 IP 地址。
- 安全性:
- 路由器通常包括防火墙功能,通过筛选和控制传入或传出的流量来增强网络安全。
路由追踪技术(Traceroute)
路由追踪(Traceroute) 是一种用于分析数据包从源主机到目标主机经过的路径的网络诊断工具。
- Traceroute 使用 ICMP 协议(或有时使用 UDP)来发送数据包
- 并逐跳地测量每一跳(每个路由器)的响应时间
- 从而帮助网络管理员识别网络延迟和链路故障。
路由追踪的工作原理
TTL是什么
-
TTL(Time-to-Live):Traceroute 通过逐步增加每个数据包的 TTL 值来控制数据包的跳数。
-
TTL 是一个字段,表示数据包在网络中可以经过的最大路由跳数。
-
每经过一个路由器,TTL 值会减少 1,当 TTL 值减至 0 时,路由器会丢弃该数据包并返回一个 ICMP "超时" 错误消息。
-
-
逐跳发送数据包:
-
Traceroute 首先发送一个 TTL 为 1 的数据包,数据包经过第一个路由器后 TTL 被减为 0,这时该路由器返回一个 ICMP 超时消息。
-
接着,Traceroute 发送一个 TTL 为 2 的数据包,直到到达目标设备。
-
通过这种方式,每一跳都会返回一个 ICMP 超时消息,从而告知路由器的 IP 地址和响应时间。
-
-
记录路径信息:
-
每收到一个 ICMP 超时消息,Traceroute 记录下该消息的返回时间,并显示该路由器的 IP 地址。
-
通过多个数据包和每一跳的超时消息,Traceroute 可以显示完整的路径。
-
-
测量响应时间:
-
Traceroute 会计算每个路由器的响应时间,帮助分析哪些路由器可能存在延迟或丢包现象。
-
TTL判断操作系统
通常,TTL值仅作为判断操作系统的一种线索,不能完全准确地确认操作系统,因为网络配置、路由器、代理等因素可能会影响TTL值。如果需要更准确的信息,通常需要结合其他网络侦测技术(比如端口扫描、OS fingerprinting等)来进一步推测。
-
TTL(Time to Live)是一个IP数据包中的字段,用于防止数据包在网络中永久循环。当一个数据包在网络中传输时,TTL的值会在每经过一个路由器时减1,直到TTL减为0时,数据包被丢弃。这有助于网络中的数据包不会在路由环路中无限制地循环。
判断操作系统通过TTL值通常是通过以下两种方式:
-
TTL值的初始设置: 不同的操作系统在发送数据包时会设置不同的TTL值。通过观察TTL值,网络管理员或攻击者可以推测出目标设备所使用的操作系统。常见的操作系统和它们的默认TTL值如下:
-
Windows:通常是128
-
Linux/Unix:通常是64
-
MacOS:通常是64
-
Cisco设备:通常是255
如果一个数据包的TTL值从某个初始值减到0,可以通过比较初始TTL值与TTL的当前值来推测源操作系统。
-
-
TTL的减值: 通过对TTL值进行观察并与网络路径上经过的路由器数量进行对比,可以判断TTL的减少情况。不同操作系统和设备的默认TTL设置不同,因此通过TTL值的大小可以做出推测。
实现技术
Traceroute 的实现依赖于以下关键技术:
-
ICMP 超时消息:
-
在 TTL 到达 0 时,路由器会返回 ICMP 超时消息给源主机。
-
源主机根据这些信息推断出路由路径。
-
-
UDP 或 ICMP Echo Request:
-
虽然很多时候使用 ICMP Echo Request(Ping)进行路由追踪,但有时使用 UDP 数据包,尤其是在防火墙和路由器对 ICMP 有严格控制时。
-
Traceroute 默认发送 UDP 数据包给目的地的高端口,目标系统不响应时会返回 ICMP 超时消息。
-
-
TTL 控制:通过逐步增加 TTL 值(从 1 开始),让每个路由器依次响应,直到到达目标地址。
路由追踪的输出示例
traceroute to google.com (172.217.5.78), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.210 ms 1.350 ms 1.440 ms
2 10.1.1.1 (10.1.1.1) 5.670 ms 5.755 ms 5.835 ms
3 209.85.248.246 (209.85.248.246) 15.182 ms 15.285 ms 15.352 ms
4 216.239.50.78 (216.239.50.78) 16.523 ms 16.589 ms 16.698 ms
5 172.217.5.78 (172.217.5.78) 17.109 ms 17.306 ms 17.582 ms
在输出中,每一行代表一个路由器的信息,包括:
- 路由器的 IP 地址
- 各跳的响应时间(通常以毫秒为单位)
路由追踪的用途
- 诊断网络故障:通过显示每一跳的响应时间,帮助管理员识别可能的延迟问题或丢包现象。
- 分析网络拓扑:Traceroute 可以显示从源主机到目标主机的路径,帮助管理员了解数据包经过的路由路径。
- 网络优化:通过分析路径中的每一跳,网络管理员可以识别和优化网络中的瓶颈。
traceroute
和 tracert
是用于网络诊断的工具,它们的主要作用是追踪数据包从源主机到目标主机的路径,并测量每一跳(路由器)之间的延迟。
这两个命令基本上是执行相同的功能,但它们分别用于不同的操作系统平台:traceroute
主要用于 Linux 和 macOS,而 tracert
则是 Windows 系统的命令。
traceroute
命令(Linux 和 macOS)
基本语法
traceroute [options] <hostname or IP address>
常用选项
-
-m <max_hops>
:设置最大跳数(默认是 30)。traceroute -m 20 google.com
这个命令会设置最大跳数为 20,限制追踪最多经过 20 个路由器。
-
-w <timeout>
:设置等待每个响应的超时时间,单位是秒。traceroute -w 2 google.com
该命令会设置超时时间为 2 秒。如果超时,Traceroute 会报告该跳没有响应。
-
-n
:显示数字格式的 IP 地址而不是尝试解析为域名。traceroute -n google.com
这样,你会看到 IP 地址,而不是路由器的主机名。
-
-I
:使用 ICMP Echo Request(与ping
使用相同的 ICMP 协议)代替默认的 UDP 数据包发送。traceroute -I google.com
通过这种方式,Traceroute 使用 ICMP 数据包进行追踪,而不是默认的 UDP 数据包。
-
-p <port>
:设置发送数据包的端口(适用于 UDP 数据包)。traceroute -p 80 google.com
设置使用 80 端口进行追踪,通常用于测试 Web 服务的连通性。
-
-q <nqueries>
:指定每跳发送的查询次数(默认是 3)。traceroute -q 1 google.com
这个命令只发送一次查询包,而不是默认的三次。
示例
traceroute -m 20 -n google.com
这条命令将会:
- 设置最大跳数为 20
- 仅显示 IP 地址而不是解析主机名
tracert
命令(Windows)
基本语法
tracert [options] <hostname or IP address>
常用选项
-
-h <max_hops>
:设置最大跳数(默认是 30)。tracert -h 20 google.com
设置最大跳数为 20。
-
-w <timeout>
:设置等待每个响应的超时时间,单位是毫秒(默认是 4000 毫秒)。tracert -w 1000 google.com
这条命令会设置超时时间为 1000 毫秒(1 秒)。
-
-d
:显示数字格式的 IP 地址,而不解析域名。tracert -d google.com
这条命令会显示 IP 地址而不是主机名。
-
-4
:强制使用 IPv4 地址进行追踪。tracert -4 google.com
-
-6
:强制使用 IPv6 地址进行追踪。tracert -6 google.com
示例
tracert -h 20 -w 1000 google.com
这条命令将会:
- 设置最大跳数为 20
- 设置每个响应的超时时间为 1000 毫秒(1 秒)
traceroute
和 tracert
输出解释
无论是在 Linux 还是 Windows 系统中,命令的输出通常如下所示:
traceroute to google.com (172.217.5.78), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.210 ms 1.350 ms 1.440 ms
2 10.1.1.1 (10.1.1.1) 5.670 ms 5.755 ms 5.835 ms
3 209.85.248.246 (209.85.248.246) 15.182 ms 15.285 ms 15.352 ms
4 216.239.50.78 (216.239.50.78) 16.523 ms 16.589 ms 16.698 ms
5 172.217.5.78 (172.217.5.78) 17.109 ms 17.306 ms 17.582 ms
输出说明:
- 行号:每一行代表一个跳点(路由器)。
- IP 地址:每跳的路由器的 IP 地址(或域名,如果解析成功)。
- 响应时间:每个数据包从当前路由器返回的时间(通常为毫秒),会显示多个响应时间(默认是 3 次)。
总结
traceroute
是 Linux 和 macOS 的命令,用于显示从源设备到目标设备的路径。tracert
是 Windows 中类似的命令,功能相同。- 两者可以使用多种选项来控制输出,设置超时时间、最大跳数等,并提供详细的网络路径和延迟信息。
通过这些命令,你可以详细了解数据包在网络中经过的路由,帮助识别网络延迟和问题。
- MTR:结合了 Ping 和 Traceroute 的功能,可以实时显示路径上每一跳的网络状态。
喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。