一、路由追踪
(一)路由跟踪,就是获取从主机A到达目标主机B这个过程中所有需要经过的路由设备的转发接口IP。
(二)ICMP协议
Internet控制报文协议(internet control message protocol),它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
日常生活中,邮寄包裹会经过多个传递环节,任意一环如果无法传下去,都会返回寄件人,并附上无法邮寄的原因。同理,当路由器收到一个无法传递下去的IP报文时,会发送ICMP目的不可达报文(Type为3)给IP报文的源发送方。报文中的Code就表示发送失败的原因。
(三)TCP协议的三次握手
A. TCP建立连接的三次握手机制
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,完成三次握手,随后Client与Server之间可以开始传输数据了。
B.TCP的相关报文解释
上图中我们重点来介绍一下Flags(标志位-8位):
ACK:确认序号有效;
PSH:接收方应该尽快将这个报文交给应用层
RST:重置连接
SYN:发起一个新连接
FIN: 释放一个连接
(四)各协议探测原理
1. 基于TCP协议:
端口存在:返回第二次握手包。
否则:
Unix/Linux:返回RST包,重置连接。
Windows: 无响应……
2.基于UDP协议:
端口存在:直接丢给对应进程,无返回。
端口不存在:返回端口不可达的ICMP报文。
(因此UDP探测时,一般选择没人用的大端口)。
3.基于ICMP协议:
返回回显应答报文。
二、traceroute
(一)traceroute原理介绍
过程描述:
通过向目标发送不同IP生存时间 (TTL) 值的数据包,路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 减 1。数据包上的 TTL 减为 0 时,路由器应该将“超时”的消息发回源系统。
先发送 TTL 为 1 的数据包,并在随后的每次发送过程将TTL递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。
(二)traceroute命令详解
1、语法
traceroute [-dFlnrvx][-f<存活数值>][-g<网关>…][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
2、参数说明:
-d 使用Socket层级的排错功能。
-f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g<网关> 设置来源路由网关,最多可设置8个。
-i<网络界面> 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。
-m<存活数值> 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p<通信端口> 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-s<来源地址> 设置本地主机送出数据包的IP地址。
-t<服务类型> 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w<超时秒数> 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。
(三)实例
在我的Ubuntu18.04 Linux系统下traceroute 一台主机时,会看到有一些行是以星号表示的。如出现上面情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;可以加-n 参数来避免DNS解析,以IP格式输出数据。
由于在虚拟机下路由追踪效果不好我在Windows环境下进行路由追踪
三、tracert
(一)tracert命令详解
C:\Users\Administrator>tracert
用法: tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout]
[-R] [-S srcaddr] [-4] [-6] target_name
选项:
-d 不将地址解析成主机名。
-h maximum_hops 搜索目标的最大跃点数。
-j host-list 与主机列表一起的松散源路由(仅适用于 IPv4)。
-w timeout 等待每个回复的超时时间(以毫秒为单位)。
-R 跟踪往返行程路径(仅适用于 IPv6)。
-S srcaddr 要使用的源地址(仅适用于 IPv6)。
-4 强制使用 IPv4。
-6 强制使用 IPv6。
(二)实例
1、下面是在三个不同时间段对www.traceroute.org的路由追踪
1)C:\Users\Administrator>tracert www.traceroute.org
通过最多 30 个跃点跟踪
到 www.traceroute.org [193.141.43.158] 的路由:
1 2 ms 1 ms <1 毫秒 172.26.0.1
2 1 ms 1 ms 1 ms 115.26.63.90
3 1 ms 1 ms 1 ms 202.113.14.153
4 2 ms 2 ms 2 ms 202.113.14.157
5 12 ms 6 ms 19 ms 101.4.117.197
6 3 ms 3 ms 3 ms 101.4.112.69
7 6 ms 5 ms 5 ms 101.4.114.222
8 6 ms 6 ms 6 ms 101.4.117.254
9 6 ms 8 ms 5 ms 101.4.118.122
10 54 ms 55 ms 56 ms 101.4.117.150
11 276 ms 275 ms 240 ms 61.8.59.37
12 262 ms 277 ms 276 ms i-91.hkth-core02.telstraglobal.net [202.84.153.25]
13 186 ms 189 ms 200 ms i-10852.eqnx-core02.telstraglobal.net [202.84.140.2]
14 211 ms 219 ms 212 ms i-92.eqnx03.telstraglobal.net [202.84.247.17]
15 314 ms 293 ms 329 ms sjca-s1-rou-1001.us.eurorings.net [206.223.116.99]
16 * * * 请求超时。
17 * * * 请求超时。
18 356 ms 364 ms 351 ms dssd-s2-rou-1102.DE.eurorings.net [134.222.48.179]
19 364 ms 347 ms 333 ms traceroute.org [193.141.43.158]
2)C:\Users\Administrator>tracert www.traceroute.org
通过最多 30 个跃点跟踪
到 www.traceroute.org [193.141.43.158] 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 172.26.0.1
2 1 ms 1 ms 1 ms 115.26.63.90
3 14 ms 31 ms 1 ms 202.113.14.153
4 2 ms 2 ms 2 ms 202.113.14.157
5 3 ms 4 ms 3 ms 101.4.115.25
6 5 ms 3 ms 4 ms 101.4.112.69
7 5 ms 5 ms 8 ms 101.4.115.253
8 8 ms 4 ms 5 ms 101.4.117.254
9 4 ms 4 ms 7 ms 101.4.118.122
10 58 ms 60 ms 61 ms 101.4.117.150
11 256 ms 278 ms 278 ms 61.8.59.37
12 270 ms 254 ms 273 ms i-91.hkth-core02.telstraglobal.net [202.84.153.25]
13 196 ms 189 ms 189 ms i-10852.eqnx-core02.telstraglobal.net [202.84.140.2]
14 210 ms 219 ms 222 ms i-92.eqnx03.telstraglobal.net [202.84.247.17]
15 375 ms 376 ms 352 ms sjca-s1-rou-1001.us.eurorings.net [206.223.116.99]
16 * * * 请求超时。
17 * * * 请求超时。
18 396 ms 375 ms 358 ms dssd-s2-rou-1102.DE.eurorings.net [134.222.48.179]
19 390 ms 380 ms 383 ms traceroute.org [193.141.43.158]
跟踪完成。
3)C:\Users\Administrator>tracert www.traceroute.org
通过最多 30 个跃点跟踪
到 www.traceroute.org [193.141.43.158] 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 172.26.0.1
2 1 ms <1 毫秒 <1 毫秒 115.26.63.90
3 1 ms 1 ms 1 ms 202.113.14.153
4 3 ms 2 ms 2 ms 202.113.14.157
5 2 ms 4 ms 6 ms 101.4.115.25
6 4 ms 12 ms 23 ms 101.4.112.69
7 4 ms 5 ms 7 ms 101.4.115.253
8 5 ms 4 ms 4 ms 101.4.117.254
9 5 ms 4 ms 5 ms 101.4.118.122
10 52 ms 53 ms 54 ms 101.4.117.150
11 281 ms 255 ms 280 ms 61.8.59.37
12 256 ms 259 ms 278 ms i-91.hkth-core02.telstraglobal.net [202.84.153.25]
13 202 ms 208 ms 211 ms i-10852.eqnx-core02.telstraglobal.net [202.84.140.2]
14 212 ms 213 ms 214 ms i-92.eqnx03.telstraglobal.net [202.84.247.17]
15 366 ms 358 ms 367 ms sjca-s1-rou-1001.us.eurorings.net [206.223.116.99]
16 * * * 请求超时。
17 * * * 请求超时。
18 374 ms 380 ms 384 ms dssd-s2-rou-1102.DE.eurorings.net [134.222.48.179]
19 409 ms 390 ms 363 ms traceroute.org [193.141.43.158]
跟踪完成。
分析
a)三小时中每一小时的往返延迟的平均值(平均值)分别为384.3毫秒,387.3毫秒和348毫秒。 标准偏差分别为0.75 ms,0.21 ms,0.5 ms。
b)在这个例子中,tracert在三小时的每一小时都有18个路由器,路径在任何时间都没有变化。
c)在这个实验中,最大的延迟发生在相邻ISP之间的对等接口上。
2、命令执行结果的说明:
1)tracert命令用于确定 IP数据包访问目标所采取的路径,显示从本地到目标网站所在网络服务器的一系列网络节点的访问速度,最多支持显示30个网络节点。
2)最左侧的,1,2,3,4~8,表明在我使用的宽带上,经过18(不算自己本地的)个路由节点,可以到达traceroute官网的服务;如果是电信可能有不同;其他的IP,也有可能不同;
3)中间的三列,单位是ms,表示我们连接到每个路由节点的速度,返回速度和多次链接反馈的平均值;
4)后面的IP,就是每个路由节点对应的IP,每个IP代表什么,各位可以通过 3(推荐的站长工具)去了解
5)如果返回消息是超时,则表示这个路由节点和当前我们使用的宽带,是无法联通的,至于原因,就有很多种了,比如:特意在路由上做了过滤限制,或者确实是路由的问题等,需要具体问题具体分析;
6)如果在测试的时候,大量的都是*和返回超时,则就说明这个IP,在各个路由节点都有问题
7)一般10个节点以内可以完成跟踪的网站,访问速度都是不错的;10到15个节点之内才完成跟踪的网站,访问速度则比较差,如果超过30个节点都没有完成跟踪的网站,则可以认为目标网站是无法访问的。
3、推荐一个查询IP或者域名信息的工具(http://tool.chinaz.com)
四、参考资料
【1】http://www.mamicode.com/info-detail-1644999.html
【2】https://www.cnblogs.com/godtrue/p/5882541.html