tracert
TRACERT (Trace Route 的组合缩写),也称为路由追踪,该命令行程序可用于跟踪 Internet 协议 (IP) 数据包传送到目标地址时经过的路径。
如何使用 TRACERT 实用程序
TRACERT 诊断实用程序通过向目标地址发送 Internet 控制消息协议 (ICMP) 回显数据包来确定到目标地址的路由。 在这些数据包中,TRACERT 使用了不同的 IP“生存期”(TTL) 值。 由于要求沿途的路由器在转发数据包前至少必须将 TTL 减少 1,因此 TTL 实际上是一个跃点计数器 (hop counter)。 当某个数据包的 TTL 达到零 (0) 时,路由器就会向源计算机发送一个 ICMP“超时”的消息。
TRACERT 将发送 TTL 为 1 的第一个回显数据包,并在每次后续传输时将 TTL 增加 1,直到目标地址响应或达到 TTL 的最大值。 中间路由器发送回来的 ICMP“超时”消息显示了路由。 请注意,有些路由器会丢弃 TTL 失效的数据包而不发出消息,这些数据包对于 TRACERT 来说是不可见的。
TRACERT 将会显示一个返回 ICMP“超时”消息的中间路由器的顺序列表。 使用带有 d 选项的 tracert 命令时,TRACERT 将不会对每个 IP 地址执行 DNS 查找,这样,TRACERT 将报告路由器近端接口的 IP 地址。
tracert 命令和输出的示例中,数据包经过10.160.255.254 等几个路默认网关是 10.160.255.254
如何使用 TRACERT 排除故障
可以使用 TRACERT 找出数据包在网络中停止的位置
如何使用 TRACERT 选项
有一些命令行选项可以与 TRACERT 一起使用,尽管在标准的故障排除过程中通常并不需要这些选项。
以下命令行语法的示例显示了所有可能的选项:
tracert -d -h maximum_hops -j host-list -w timeout target_host
参数的作用:
-d
Specifies to not resolve addresses to host names
-h maximum_hops
Specifies the maximum number of hops to search for the target
-j host-list
Specifies loose source route along the host-list
-w timeout
Waits the number of milliseconds specified by timeout for each
reply
tracert路由跟踪工具使用方法
- 路由跟踪在线Tracert工具说明
Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。- Tracert 工作原理
通过向目标发送不同 IP 生存时间 (TTL) 值的“Internet 控制消息协议 (ICMP)”回应数据包,Tracert 诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。
Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在 Tracert 实用程序中看不到。- Tracert 命令详解及用法
Tracert 命令支持多种选项,如下所示。
(捕获)
在图中我们可以看出
A. 最左侧的,1~10,这标明在我使用的宽带上,经过10个路由节点,可以到达百度的服务;
B. 中间这三列,单位是ms,是表示我们连接到每个路由节点的速度,返回速度和多次链接反馈的平均值;因为腾讯在国内,经过联通骨干网,网络非常 好,所以都很小,这个值有一定的参考性,但不是唯一的,也不作为主要的参考;比如一个主机,200和300,这100ms,其实说明不了什么;
C. 后面的IP,就是每个路由节点对应的IP,每个ip输入什么,可通过http://tool.chinaz.com的ip详细查询去了解;
D. *,在第3,6,7,10个路由节点上,返回消息是超时,这表示这个路由节点和当前我们使用的宽带,是无法联通的至于原因,就有很多种了,比如:特意在路上上做了过滤限制;比如确实是路由的问题等,具体问题具体分析;
( 如果在测试的时候,大量的都是*和返回超时,那就说明这个IP,在各个路由节点都有问题。)
(来源:tracert路由工具跟踪使用方法)
ARP
ARP(Address Resolution Protocol)即地址解析协议,是用于根据给定网络层地址即 IP 地址,查找并得到其对应的数据链路层地址即 MAC地址的协议。 ARP 协议定义在 1982 年的 RFC 826。
ARP协议的工作机制详解
1.ARP 是“Address Resolution Protocol”的缩写,译为“地址解析协议”,它是根据 IP 地址获取物理地址的一个 TCP/IP 协议。
2.ARP 协议通过 IP 地址向 MAC 地址的转换,解决网际层和网络访问层的衔接问题。
3.由于 IP 地址和 MAC 地址定位方式不同,ARP 协议成为数据传输的必备协议。主机发送信息前,必须通过 ARP 协议获取目标 IP 地址对应的 MAC 地址,才能正确地发送数据包。
为什么需要 ARP 协议
在网络访问层中,同一局域网中的一台主机要和另一台主机进行通信,需要通过 MAC 地址进行定位,然后才能进行数据包的发送。
而在网络层和传输层中,计算机之间是通过 IP 地址定位目标主机,对应的数据报文只包含目标主机的 IP 地址,而没有 MAC 地址。
因此,在发送之前需要根据 IP 地址获取 MAC 地址,然后才能将数据包发送到正确的目标主机,而这个获取过程是通过 ARP 协议完成的。
ARP 工作的基本流程
ARP 工作流程分为两个阶段,一个是 ARP 请求过程,另一个是 ARP 响应过程。
工作流程如下所示。
在上面图片中,主机 A 的 IP 地址为 192.168.1.1,主机 B 的 IP 地址为 192.168.1.2。
主机 A 与主机 B 进行通信,需要获取其 MAC 地址,基本流程如下:
主机 A 以广播形式向网络中所有主机发送 ARP 请求,请求包中包含了目标 IP 地址 192.168.1.2。
主机 B 接收到请求,发现自己就是主机 A 要找的主机,返回响应,响应包中包含自己的 MAC 地址。
ARP 缓存
在请求目标主机的 MAC 地址时,每次获取目标主机 MAC 地址都需要发送一次 ARP 请求,然后根据响应获取到 MAC 地址。
为了避免重复发送 ARP 请求,每台主机都有一个 ARP 高速缓存。当主机得到 ARP 响应后,将目标主机的 IP 地址和物理地址存入本机 ARP 缓存中,并保留一定时间。
只要在这个时间范围内,下次请求 MAC 地址时,直接查询 ARP 缓存,而无须再发送 ARP 请求,从而节约了网络资源。
当有了 ARP 缓存以后,ARP 的工作流程如下:
-
主机 A 在本机 ARP 缓存中检查主机 B 的匹配 MAC 地址。
-
如果在 ARP 缓存中没有找到主机 B 的 IP 地址及对应的 MAC 地址,它将询问主机 B 的 MAC 地址,从而将 ARP 请求帧广播到本地网络上的所有主机。源主机 A 的 IP 地址和 MAC 地址都包括在 ARP 请求中。
-
本地网络上的每台主机都接收到 ARP 请求,并且检查是否与自己的 IP 地址匹配。如果主机发现请求的 IP 地址与自己的 IP 地址不匹配,它将丢弃 ARP 请求。主机 B 确定 ARP 请求中的 IP 地址与自己的 IP 地址匹配,则将主机 A 的 IP 地址和 MAC 地址映射添加到本地 ARP 缓存中。
-
主机 B 将包含自身 MAC 地址的 ARP 回复消息直接发送给主机 A。
-
当主机 A 收到从主机 B 发来的 ARP 回复消息时,会用主机 B 的 IP 地址和 MAC 地址更新 ARP 缓存。
-
主机 B 的 MAC 地址一旦确定,主机 A 就能向主机 B 发送 IP 数据包。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。
查看 ARP 缓存
每次成功得到 ARP 响应以后,就会将 IP 地址对应的 MAC 地址添加到 ARP 缓存中。用户可以通过 arp 命令查看 ARP 缓存中的信息,并验证是否会将目标 IP 地址和 MAC 地址添加到 ARP 缓存中。
【示例】查看 ARP 缓存表并验证添加的 IP 地址和 MAC 地址。
- 使用 arp 命令查看当前主机缓存信息,执行命令如下:
root@daxueba:~# arp -a
输出信息如下:
localhost (192.168.59.254) at 00:50:56:f7:9b:0d [ether] on eth0
localhost (192.168.59.2) at 00:50:56:ea:f3:a1 [ether] on eth0
上述输出信息表示当前 ARP 缓存中有两组信息,192.168.59.254 对应的 MAC 地址为 00:50:56:f7:9b:0d,192.168.59.2 对应的 MAC 地址为 00:50:56:ea:f3:a1。
- 在当前主机上与主机 192.168.59.135 进行通信。例如,可以使用 ping 命令探测该主机。执行命令如下:
root@daxueba:~# ping 192.168.59.135
输出信息如下:
PING 192.168.59.135 (192.168.59.135) 56(84) bytes of data.
64 bytes from 192.168.59.135: icmp_seq=1 ttl=64 time=1.64 ms
64 bytes from 192.168.59.135: icmp_seq=2 ttl=64 time=0.420 ms
64 bytes from 192.168.59.135: icmp_seq=3 ttl=64 time=0.405 ms
64 bytes from 192.168.59.135: icmp_seq=4 ttl=64 time=0.343 ms
上述输出信息表示成功向目标主机 192.168.59.135 发送了 ping 请求并得到了响应。
- 当前主机的 ARP 缓存将会添加目标主机的 IP 地址及 MAC 地址。再次查看当前主机缓存信息,执行命令如下:
root@daxueba:~# arp -a
localhost (192.168.59.135) at 00:0c:29:ca:e4:66 [ether] on eth0
localhost (192.168.59.254) at 00:50:56:f7:9b:0d [ether] on eth0
localhost (192.168.59.2) at 00:50:56:ea:f3:a1 [ether] on eth0
并且引用知乎杰哥的一句话:基于功能来考虑,ARP是链路层协议;基于分层/包封装来考虑,ARP是网络层协议。(此方法对于ICMP协议同样管用)
ARP协议详解
地址解析包格式
1.硬件类型(Hardware Type, HTYPE): 当前网络数据链路层的协议类型, 实际指定了硬件地址类型。如,以太网 的 HTYPE 是 1。
2.协议类型(Protocol Type, PTYPE): 上层网络协议,实际指定了待映射的网络地址的类型。如,IPv4 协议的 PTYPE 是 0x0800。
3.硬件大小(Hardware Length, HLEN): 硬件地址的长度(单位: 八位字节(Octets))。以太网的 HLEN 是 6。
4. 协议大小(Protocol Length, PLEN): PTYPE 指定的上层协议的网络地址长度(单位:八位字节(Octets))。IPv4 协议的 PLEN 是 4。
5.操作(Operation, OPER): 该协议包的操作。ARP 请求包的 OPER 是 1,而ARP 响应包的 OPER 是 2。
6.发送方硬件地址(Sender Hardware Address, SHA): 发送方的硬件地址。
7.发送方协议地址(Sender Protocol Address, SPA): 发送方的上层协议的网络地址。
8.目的硬件地址(Target Hardware Address, THA): 接收方的硬件地址。在 ARP 请求包的 THA 是 0。
9.目的方协议地址(Target Protocol Address, TPA): 接收方的上层协议的网络地址。
更多协议详解请看ARP协议详解
学习ARP
1.学习ARP前要了解的内容
建立TCP连接与ARP的关系
应用接受用户提交的数据,触发TCP建立连接,TCP的第一个SYN报文通过connect函数到达IP层,IP层通过查询路由表:
如果目的IP和自己在同一个网段:
当IP层的ARP高速缓存表中存在目的IP对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去;
当IP层的ARP高速缓存表中不存在目的IP对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP广播请求目的IP的MAC,收到ARP应答之后,将应答之中的<IP地址,对应的MAC>对缓存在本地ARP高速缓存表中,然后完成TCP SYN的IP封装,调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去;。
如果目的IP地址和自己不在同一个网段,就需要将包发送给默认网关,这需要知道默认网关的MAC地址:
当IP层的ARP高速缓存表中存在默认网关对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和默认网关的MAC)将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC
当IP层的ARP高速缓存表中不存在默认网关对应的MAC地址时,则IP层将TCP的SYN缓存下来,发送ARP广播请求默认网关的MAC,收到ARP应答之后,将应答之中的<默认网关地址,对应的MAC>对缓存在本地ARP高速缓存表中,然后完成TCP SYN的IP封装,调用网络接口send函数(参数为IP Packet和默认网关的MAC)将数据提交给网络接口,网络接口完成Ethernet Header + IP + CRC的封装,并发送出去。
ARP的位置
OSI模型有七层,TCP在第4层传输层,IP在第3层网络层,而ARP在第2层数据链路层。高层对低层是有强依赖的,所以TCP的建立前要进行ARP的请求和应答。
ARP高速缓存表在IP层使用。如果每次建立TCP连接都发送ARP请求,会降低效率,因此在主机、交换机、路由器上都会有ARP缓存表。建立TCP连接时先查询ARP缓存表,如果有效,直接读取ARP表项的内容进行第二层数据包的发送;只有表失效时才进行ARP请求和应答进行MAC地址的获取,以建立TCP连接。
ARP的作用
要了解ARP的作用,首先要分清两个“地址”:
(1)TCP/IP的32bit IP地址。仅知道主机的IP地址不能让内核发送数据帧给主机。
(2)网络接口的硬件地址,它是一个48bit的值,用来标识不同的以太网或令牌环网络接口。在硬件层次上,进行数据交换必须有正确的接口地址,内核必须知道目的端的硬件地址才能发送数据。
简言之,就是在以太网中,一台主机要把数据帧发送到同一局域网上的另一台主机时,设备驱动程序必须知道以太网地址才能发送数据。而我们只知道IP地址,这时就需要采用ARP协议将IP地址映射为以太网地址。
要注意一点,一般认为ARP协议只使适用于局域网。
2.ARP分组格式
ARP分组的格式如下图:
先要清楚,一般说以太网地址就是指MAC地址。
字段1是ARP请求的目的以太网地址,全1时代表广播地址。
字段2是发送ARP请求的以太网地址。
字段3以太网帧类型表示的是后面的数据类型,ARP请求和ARP应答这个值为0x0806。
字段4表示硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1。
字段5表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。
字段6和7表示硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节。
字段8是操作类型字段,值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。
字段9是发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同。
字段10是发送ARP请求或应答的IP地址。
字段11和12是目的端的硬件地址和协议地址。
下面是抓取的ARP数据包,可以对照上面的说明进行理解。
图中红框圈起来的是一对ARP请求和ARP应答。
下面两张图分别是ARP请求和相应的ARP应答的分组格式截图。
ARP请求分组中,字段11目的MAC地址未知,用全0进行填充
ARP应答分组中,将ARP请求中的源和目的地址进行交换,此外,变化的还有字段8 Opcode。其余字段内容不会发生变化。
那么我们是如何区分ARP请求和ARP应答分组的呢?
分组中的地址字段和其他相同的字段无法作为区分依据,这时Opcode字段就发挥了作用,根据Opcode的值可以确定是请求还是应答,是ARP还是RARP。
ARP高速缓存
定义
ARP缓存是一个缓冲区,用来储存IP地址和MAC地址,本质就是<IP地址,MAC地址>的对应表。表中一个条目记录了网络上一个主机的IP地址和其对应的MAC地址。
每一个以太网或令牌环网络适配器都有自己单独的表。
当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。
ARP缓存表项的生存时间TTL
ARP缓存包含动态和静态项目:
动态项目随时间推移自动添加和删除,每个动态ARP缓存项都有都设置了TTL(生存时间),TTL为0时此项目就从表中删除,Windows下TTL一般不超过10分钟。
静态 ARP 缓存条目是永久性的,可以使用 TCP/IP 工具手动添加和删除。静态 ARP 缓存条目用来禁止节点发送对常用的本地IPv4地址(例如路由器和服务器的 IPv4 地址)的ARP请求。
ARP高速缓存的使用
当主机发送一个ARP请求时,先查看ARP高速缓存表,如果存在对应条目,则直接返回MAC地址,否则向局域网发送ARP请求广播。
ARP高速缓存的优缺点
优点:从ARP高速缓存的使用中可以看到,ARP高速缓存可以减小广播量,进而减小网络通信量,提高计算机之间的通信效率。
缺点:造成安全隐患(参考下面免费ARP的作用)。
免费ARP
定义
免费ARP指主机发送ARP查找自己的IP地址,通常发生在系统引导期间进行接口配置时。
与标准ARP的区别就是免费ARP分组的目的IP地址字段封装的是自己的IP地址,即向所在网络请求自己的MAC地址。
作用
免费ARP的作用有:
1) 一个主机可以通过它来确定另一个主机是否设置了相同的 IP地址。
正常情况下发送免费ARP请求不会收到ARP应答,如果收到了一个ARP应答,则说明网络中存在与本机相同的IP地址的主机,发生了地址冲突。
2)更新其他主机高速缓存中旧的硬件地址进行。
如果发送免费ARP的主机正好改变了硬件地址,如更换了接口卡。
其他主机接收到这个ARP请求的时候,发现自己的ARP高速缓存表中存在对应的IP地址,但是MAC地址不匹配,那么就需要利用接收的ARP请求来更新本地的ARP高速缓存表表项。
3)网关利用免费ARP防止ARP攻击
有些网关设备在一定的时间间隔内向网络主动发送免费ARP报文,让网络内的其他主机更新ARP表项中的网关MAC地址信息,以达到防止或缓解ARP攻击的效果。
4)利用免费ARP进行ARP攻击
ARP协议并不只在发送了ARP请求才接收ARP应答,计算机只要接收到ARP应答数据包,就会使用应答中的IP和MAC地址对本地的ARP缓存进行更新。
主机可以构造虚假的免费ARP应答,将ARP的源MAC地址设为错误的MAC地址,并把这个虚假的免费ARP应答发送到网络中,那么所有接收到这个免费ARP应答的主机都会更新本地ARP表项中相应IP地址对应的MAC地址。更新成功后,这些主机的数据报文就会被转发到错误的MAC地址,从而实现了ARP欺骗的攻击。
代理ARP
定义
代理ARP就是通过使用一个主机(通常为router),来作为指定的设备使用自己的 MAC 地址来对另一设备的ARP请求作出应答。
为什么需要代理ARP?
先要了解,路由器的重要功能之一就是把局域网的广播包限制在该网内,阻止其扩散,否则会造成网络风暴。
ARP请求是个广播包,它询问的对象如果在同一个局域网内,就会收到应答。但是如果询问的对象不在同一个局域网该如何处理?路由器就提供的代理ARP为这个问题提供了解决方案。
工作过程
两台主机A和B处于同一网段但不同的广播段时,主机A发送ARP请求主机B的MAC地址时,因为路由器不转发广播包的原因,ARP请求只能到达路由器。如果路由器启用了代理ARP功能,并知道主机B属于它连接的网络,那么路由器就用自己接口的MAC地址代替主机B的MAC地址来对主机A进行ARP应答。主机A接收ARP应答,但并不知道代理ARP的存在。
代理ARP的优缺点
优点:代理ARP能在不影响路由表的情况下添加一个新的Router,使子网对该主机变得透明化。一般代理ARP应该使用在主机没有配置默认网关或没有任何路由策略的网络上。
缺点:从工作工程可以看到,这其实是一种ARP欺骗。而且,通过两个物理网络之间的路由器的代理ARP功能其实互相隐藏了物理网络,这导致无法对网络拓扑进行网络概括。此外,代理ARP增加了使用它的那段网络的ARP流量,主机需要更大的ARP缓存空间,也不会为不使用ARP进行地址解析的网络工作。
学习ARP转自非水非云
(ARP 协议在制定之初是没有考虑安全性的,导致现在广泛提及的"网络扫描"、“内网渗透”、“中间人拦截”、“局域网流控”、"流量欺骗"等等其实都跟 ARP 欺骗有关。).