当前位置:文档之家› ARP 的相关知识总结

ARP 的相关知识总结

地址转换协议 ARP

1 ARP协议简介
Internet是由各种各样的物理网络通过使用诸如路由器之类的设备连接在一起组成的。当主机发送一个数据包到另一台主机的过程中 可能要经过多种不同的物理网络。主机和路由器都是在网络层通过IP地址来识别的,这个地址是在全世界内唯一的。 然而,数据包是通过物理网络传递的。在物理网络中,主机和路由器通过其MAC地址来识别的,其范围限于本地网络中。 MAC地址和IP地址是两种不同的标识符。这就意味着将一个分组传递到一个主机或路由器需要进行两级寻址:IP和MAC。需要能将一个 IP地址映射到相应的MAC地址。
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。 所谓“地址解析”就是主机在发送帧前将目标网络层地址转换成目标物理地址的过程。在使用TCP/IP协议的以太网中,即完成将IP地址映射到MAC地址的过程——使用ARP协议通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

2 ARP报文格式如下:
硬件类型 协议类型
硬件长度 协议长度 操作:请求1,响应2
发送方硬件地址(如以太网地址,6字节)
发送方协议地址(如IP地址,四字节)
目标端硬件地址(如以太网地址,6字节)(并未包含在请求报文中)
目标端协议地址(如IP地址,4字节)

3 ARP的运行过程
在因特网中,数据报传递过程中包括如下步骤:
1. 发送者知道目标端的IP地址
2. IP要求ARP创建一个ARP请求报文,其中包含了发送方的物理地址、发送方的IP地址
和目标端的IP地址。目标的物理地址用0填充。
3. 将报文传递到数据链路层,并在该层中用发送方的物理地址作为源地址,用物理
广播地址作为目的地址,将其封装在一个帧中。
4. 同一链路中的每个主机或路由器都接收到这个帧,因为该帧中包含了一个广播目的
地址,所有的站点都对报文进行移交,并将其传递到ARP。除了目标机器以外的所有
机器都丢弃该报文。目标机器对IP地址进行识别。
5. 目标机器用一个包含其物理地址的ARP响应报文做出响应,并对该报文进行单播。
6. 发送方接收到一个响应报文,这样它就知道了目标机器的物理地址。
7. 这样就可以将携带目标机器数据的IP数据报封装在一个帧中,并单播到目的地址。

4 ARP缓存

实际上,在真正的协议实现中,并不是每次发送IP报文前都需要发送ARP请求报文来获取目的MAC地址。在大多数的系统中都存在着一个ARP缓存表。记录着已经获取的MAC地址和IP地址的映射关系,如下图:
IP地址 MAC地址


202.98.13.1 00-E0-4C-3D-89-76
202.98.13.2 00-E0-4C-3D-C5-03
202.98.13.3 00-E0-4C-4D-BA-92
... ...
发送IP报文前总是先对ARP缓存表进行查找,看是否目标MAC地址存在于缓存表中,如果存在,则不需要发送ARP请求报文而直接使用此地址进行IP报文的发送。如果不存在,则发送ARP请求报文,并将结果存于ARP缓存表中供以后使用。
另外,ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

5 ARP代理

ARP本身无法跨跃不同网段。当数据要发往外部网络时,通常是首先使用ARP请求网关路由器的MAC地址,之后将数据发往网关路由器, 由网关路由器进行转发(动画演示)。 但有时由于管理或地域等原因,我们的内部网络又会划分为很多子网,这时我们可以通过修改网络内每台主机的本地路由,使发往其它子网的数据发送到连接两个子网的路由器, 再由路由器转发。但这样也许并不是一个易于管理和维护的方案。我们可以使用ARP代理使子网的划分对每台主机更加透明化。ARP代理的工作原理很简单:
当ARP请求是从一个网络的主机发往另一个网络的主机时,启用ARP代理的连接这两个网络的路由器将回答该请求,使请求的发送者误以为此路由器就是目标主机, 而将所有数据帧发送到此路由器。路由器在收到数据帧后,再将其转发到真正的目标主机(动画演示)。
ARP代理实际上是使用了简单的欺骗手段,使网络内的主机错误的认为目标主机与自己处于同一网段内,从而达到了透明化子网划分的目的。


用协议仿真器向同一子网内的主机编辑发送ARP请求报文 用协议仿真器向不同子网内的主机编辑发送ARP请求报文 运行Ping命令(不同子网内)


主机B启动静态路由服务(方法:在命令行方式下,输“staticroute_config”)。按照拓扑结构图连接网络,使用拓扑验证检查连接的正确性。
练习一:领略真实的ARP(同一子网)
主机A、B、C、D、E、F在命令行下运行“arp -a”命令,察看ARP高速缓存表,并回答以下问题:
ARP高速缓存表由哪几项组成?
主机A、B、C、D启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(提取ARP、ICMP)。
主机A、B、C、D在命令行下运行“arp -d”命令,清空ARP高速缓存。
主机A ping 主机D(172.16.1.4)。
主机A、B、C、D停止捕获数据,并立即在命令行下运行“arp -a”命令察看ARP高速缓存。
结合协议分析器上采集到的ARP报文和ARP高速缓存表中新增加的条目,简述ARP协议的报文交互过

程以及ARP高 速缓存表的更新过程。
用协议仿真器向同一子网内的主机编辑发送ARP请求报文 用协议仿真器向不同子网内的主机编辑发送ARP请求报文 运行Ping命令(不同子网内)


练习二:编辑并发送ARP报文(同一子网)
在主机E上启动仿真编辑器,并编辑一个ARP请求报文。其中:
MAC层: “目的MAC地址”设置为FFFFFF-FFFFFF,
“源MAC地址”设置为主机E的MAC地址。
协议类型或数据长度:0806。
ARP层: “发送端MAC地址”设置为主机E的MAC地址,
“发送端IP地址”设置为主机E的IP地址(172.16.0.2),
“目的端MAC地址”设置为000000-000000,
“目的端IP地址”设置为主机F的IP地址(172.16.0.3)。
主机B、F启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(提取ARP协议)。
主机E、B、F在命令行下运行“arp -d”命令,清空ARP高速缓存。
主机E发送已编辑好的ARP报文。
主机E立即在命令行下运行“arp -a”命令察看ARP高速缓存。
主机B、F停止捕获数据,分析捕获到的数据,进一步体会ARP报文交互过程。

练习三:跨路由地址解析(不同子网)
主机A、B、C、D、E、F在命令行下运行“arp -d”命令,清空ARP高速缓存。
主机A、B、C、D、E、F重新启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(提取ARP、ICMP)。
主机A ping 主机E(172.16.0.2)。
主机A、B、C、D、E、F停止数据捕获,察看协议分析器中采集到的ARP报文,并回答以下问题:
单一ARP请求报文是否能够跨越子网进行地址解析?为什么?
ARP地址解析在跨越子网的通信中所起到的作用?
思考问题
1. ARP分组的长度是固定的吗?试加以解释。
2. 试解释为什么ARP高速缓存每存入一个项目就要设置10-20分钟的超时计时器。这个时间设置得太大或太小会出现什么问题?
3. 至少举出两种不需要发送ARP请求分组的情况。


实验原理
ARP表是IP地址和MAC地址的映射关系表,任何实现了IP协议栈的设备,一般情况下都通过该表维护IP地址和MAC地址的对应关系,这是为了避免ARP解析而造成的广播数据报文对网络造成冲击。ARP表的建立一般情况下是通过二个途径:
1、主动解析,如果一台计算机想与另外一台不知道MAC地址的计算机通信,则该计算机主动发ARP请求,通过ARP协议建立(前提是这两台计算机位于同一个IP子网上);
2、 被动请求,如果一台计算机接收到了一台计算机的ARP请求,则首先在本地建立请求计算机的IP地址和MAC地址的对应表。

因此,针对ARP表项,一个可能的攻击就是误导计算机建立正

确的ARP表。根据ARP协议,如果一台计算机接收到了一个ARP请求报文,在满足下列两个条件的情况下,该计算机会用ARP请求报文中的源IP地址和源MAC地址更新自己的ARP缓存:
1、 如果发起该ARP请求的IP地址在自己本地的ARP缓存中;
2、 请求的目标IP地址不是自己的。

可以举一个例子说明这个过程,假设有三台计算机A,B,C,其中B已经正确建立了A和C计算机的ARP表项。假设A是攻击者,此时,A发出一个ARP请求报文,该ARP请求报文这样构造:
1、 源IP地址是C的IP地址,源MAC地址是A的MAC地址;
2、 请求的目标IP地址是B的IP地址。

这样计算机B在收到这个ARP请求报文后(ARP请求是广播报文,网络上所有设备都能收到),发现B的ARP表项已经在自己的缓存中,但MAC地址与收到的请求的源MAC地址不符,于是根据ARP协议,使用ARP请求的源MAC地址(即A的MAC地址)更新自己的ARP表。
这样B的ARP缓存中就存在这样的错误ARP表项:C的IP地址跟A的MAC地址对应。这样的结果是,B发给C的数据都被计算机A接收到。
练习一: ARP欺骗

按照拓扑结构图连接网络,使用拓扑验证检查连接的正确性。
本练习将主机A、C和D作为一组,主机B、E、F作为一组。现仅以主机A、C和D为例说明试验步骤。(由于两组使用的设备不同,采集到的数据包不完全相同)
主机A和主机C使用“arp -a”命令察看并记录ARP高速缓存。
主机A、C启动协议分析器开始捕获数据并设置过滤条件(提取ARP协议和ICMP协议)。
主机A ping 主机C。观察主机A、C上是捕获到的ICMP报文,记录MAC地址。
主机D启动仿真编辑器向主机A编辑ARP请求报文(暂时不发送)。其中:
MAC层:“源MAC地址”设置为主机D的MAC地址
“目的MAC地址”设置为主机A的MAC地址
ARP层:“源MAC地址”设置为主机D的MAC地址
“源IP地址”设置为主机C的IP地址
“目的MAC地址”设置为000000-000000。
“目的IP地址”设置为主机A的IP地址

主机D向主机C编辑ARP请求报文(暂时不发送)。其中:
MAC层:“源MAC地址”设置为主机D的MAC地址
“目的MAC地址”设置为主机C的MAC地址
ARP层:“源MAC地址”设置为主机D的MAC地址
“源IP地址”设置为主机A的IP地址
“目的MAC地址”设置为000000-000000。
“目的IP地址”设置为主机C的IP地址

同时发送第4步和第5步所编辑的数据包。
注意:为防止主机A和主机C的ARP高速缓存表被其它未知报文更新,可以定时发送数据包(例如:每隔500ms发送一次)。
观察并记录主机A和主机C的ARP高速缓存表。
在主机D上启

动静态路由服务(方法:在命令行方式下,输入“staticroute_config”),目的是实现数据转发。
主机D禁用ICMP协议。

在命令行下输入“mmc”,启动微软管理控制台。如图
导入控制台文件。单击“文件(F)\打开(O)...”菜单项来打开“c:\WINNT\system32\IPSecPolicy\stopicmp.msc”。如图
导入策略文件。单击“操作(A)\所有任务(K)\导入策略(I)...”菜单项来打开“c:\WINNT\system32\IPSecPolicy\ stopicmp.ipsec”。此命令执行成功后,在策略名称列表中会出现“禁用ICMP”项。如图
启动策略。用鼠标选中“禁用ICMP”项,单击右键,选择“指派(A)”菜单项。如图
主机A上ping主机C(“ping 主机C的IP地址 –n 1”)。
主机A、C停止捕获数据,分析捕获到的数据,并回答以下问题:
主机A、C捕获到的ICMP数据包的源MAC地址和目的MAC地址是什么?
结合主机A和主机C捕获到的数据包,绘制出第8步发送的ICMP数据包在网络中的传输路径图。
主机D取消对ICMP的禁用。在微软管理控制台(mmc)上,用鼠标选中“禁用ICMP”项,单击右键,选择“不指派(U)”菜单项。如图

在主机A上使用“arp –s 主机B的IP主机B的MAC”命令,在主机B上使用“arp –s 主机A的IP主机A的MAC”命令,分别为主机A和主机B添加一条静态ARP高速缓存条目,ARP欺骗是否还能成功?你认为添加静态ARP高速缓存条目能从根本上解决ARP欺骗吗 ?



介绍

Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据包访问目标所采取的路径。Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由.其命令格式如下:

tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name

折叠编辑本段工作原理

通过向目标发送不同IP生存时间 (TTL) 值的“Internet控制消息协议 (ICMP)”回应数据包,Tracert诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。

Tracert 先发送 TTL 为 1 的回应数据包,并在随后的每次发送过程将TTL递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在 Tracert 实用程序中看不到。

编辑本段参数介绍

-d 指定不将地址解析为计算机名.

-h maximum_hops 指定搜索目标的最大跃点数.

-j host-list 与主机列表一起的松散源路由(仅适用于IPv4).

-w timeout 等待每个回复的超时时间(以毫秒为单位).

-R 跟踪往返行程路径(仅适用于 IPv6).



-S srcaddr 要使用的源地址(仅适用于 IPv6).

-4 强制使用 IPv4.

-6 强制使用 IPv6.

target_name 目标计算机的名称.

最简单的用法就是"tracert hostname",其中"hostname"是计算机名或想跟踪其路径的计算机的IP地址,tracert将返回他到达目的地的各种IP地址.

Tracert命令详解

该诊断实用程序将包含不同生存时间 (TTL) 值的 Internet 控制消息协议 (ICMP) 回显数据包发送到目标,以决定到达目标采用的路由。要在转发数据包上的 TTL 之前至少递减 1,必需路径上的每个路由器,所以 TTL 是有效的跃点计数。数据包上的 TTL 到达 0 时,路由器应该将“ICMP 已超时”的消息发送回源系统。Tracert 先发送 TTL 为 1 的回显数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。路由通过检查中级路由器发送回的“ICMP 已超时”的消息来确定路由。不过,有些路由器悄悄地下传包含过期 TTL 值的数据包,而 tracert 看不到。

tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name

使用 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 命令按顺序打印出返回“ICMP 已超时”消息的路径中的近端路由器接口列表。如果使用 -d 选项,则 Tracert 实用程序不在每个 IP 地址上查询 DNS。

在下例中,数据包必须通过两个路由器(10.0.0.1 和 192.168.0.1)才能到达主机 172.16.0.99。主机的默认网关是 10.0.0.1,192.168.0.0 网络上的路由器的 IP 地址是 192.168.0.1。

C:\>tracert 172.16.0.99 -d

Tracing route to 172.16.0.99 over a maximum of 30 hops

1 2s 3s 2s 10.0.0.1

2 75 ms 83 ms 88 ms 192.168.0.1

3 73 ms 79 ms 93 ms 172.16.0.99

Trace complete.

折叠编辑本段用tracert解决问题

可以使用 tracert 命令确定数据包在网络上的停止位置。下例中,默认网关确定 192.168.10.99主

机没有有效路径。这可能是路由器配置的问题,或者是 192.168.10.0 网络不存在(错误的 IP 地址)。

C:\>tracert 192.168.10.99

Tracing route to 192.168.10.99 over a maximum of 30 hops

1 10.0.0.1 reports:Destination net unreachable.

Trace complete.

Tracert 实用程序对于解决大网络问题非常有用,此时可以采取几条路径到达同一个点。

Tracert 命令行选项

Tracert 命令支持多种选项,如下表所示。

tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name

-d 指定不将 IP地址解析到主机名称。

-h maximum_hops 指定跃点数以跟踪到称为 target_name 的主机的路由。

-j host-list 指定 Tracert 实用程序数据包所采用路径中的路由器接口列表。

-w timeout 等待 timeout 为每次回复所指定的毫秒数。

target_name 目标主机的名称或 IP 地址。

使用 tracert 命令跟踪路径

打开命令提示符,然后键入:

tracert host_name

或者键入 tracert ip_address

其中 host_name 或 ip_address 分别是远程计算机的主机名或 IP 地址。

例如,要跟踪从该计算机到的连接路由,请在命令提示行键入:

tracert [url]

折叠编辑本段注意事项

要打开“命令提示符”,请单击“开始”,指向“程序”、“附件”,然后单击“命令提示符”。(也可在运行中输入"cmd")

tracert 命令跟踪 TCP/IP 数据包从该计算机到其他远程计算机所采用的路径。tracert 命令使用 ICMP 响应请求并答复消息(和 ping 命令类似),产生关于经过的每个路由器及每个跃点的往返时间 (RTT) 的命令行报告输出。

如果 tracert 失败,可以使用命令输出来帮助确定哪个中介路由器转发失败或耗时太多。

相关主题
文本预览
相关文档 最新文档