本系列博客以计算机网络相关实验为主,包括windows命令实验、wireshark实验、Packet Tracer路由交换实验,也是自己整个学习过程中的一个记录,望不吝赐教。
计算机网络实验02 windows命令实验之 tracert、arp 命令
3 Tracert
3.1 命令功能简述
3.1.1 命令简述
TRACERT (Trace Route 的组合缩写),也称为路由追踪,该命令行程序可用于跟踪 Internet 协议 (IP) 数据包传送到目标地址时经过的路径。
Tracert 命令用IP生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。它能够直观展现报文在转发的时候所经过的路径。
Tracert基于ICMP协议来实现的。当网络出现故障时,用户可以使用Tracert确定出现故障的网络节点。
3.1.2 具体实现
首先,tracert送出一个TTL是1的IP数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个「ICMP time exceeded」消息,包括发IP包的源地址,IP包的所有内容及路由器的IP地址。
tracert 收到这个消息后,便知道这个路由器存在于这个路径上,接着tracert 再送出另一个TTL是2的数据包,发现第2个路由器… tracert 每次将送出的数据包的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个数据包抵达目的地。
当数据包到达目的地后,该主机则不会送回ICMP time exceeded消息,一旦到达目的地,由于tracert通过UDP数据包向不常见端口(30000以上)发送数据包,因此会收到「ICMP port unreachable」消息,故可判断到达目的地。
如果TTL时间过了,它将打印出一系列的*号表明在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应
。然后,Tracert给TTL记数器加1,继续进行。
3.2 格式、参数及选项简述
3.2.1 语法格式
tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name
3.2.2 参数说明
参数 | 说明 |
---|---|
-d | 指定不将 IP 地址解析到主机名称。 |
-h maximum_hops | 指定跃点数以跟踪到称为 target_name 的主机的路由。 |
-j host-list | 指定 Tracert 实用程序数据包所采用路径中的路由器接口列表。 |
-w timeout | 等待 timeout 为每次回复所指定的毫秒数。 |
target_name | 目标主机的名称或 IP 地址。 |
3.3 实验描述
3.3.1 了解tracert命令的反馈信息,以tracert www.baidu.com为例
我的操作:
输入tracert www.baidu.com
命令
通过网站 http://ip.cn 查看这些节点位于何处,是哪个公司的。
第1行内网ip,第2行内网ip
第4行中国 北京 北京市 电信,第5行中国 重庆 重庆市 电信,
第9行中国 广东省 广州市 电信,第10行中国 广东省 广州市 电信,
第11行中国 广东省 广州市 电信,第13行中国 广东省 广州市 电信。
我的分析:
左侧,1到13行的序号,这标明在我使用的宽带上,经过13个路由节点,可以到达百度的服务;
中间三列,表示我们连接到每个路由节点的速度,返回速度和多次链接反馈的平均值;
右侧IP,是每个路由节点对应的IP对应的位置,可通过http://ip.cn的ip详细查询了解;
*,在第3、7、8、12个路由节点上,返回消息是超时,这表示这个路由节点和当前我们使用的宽带,是无法联通的。原因多种,比如特意在路上做了过滤限制、路由的问题等,需要具体问题具体分析。
在追踪过程的 * 可能是由于请求没有回应,也可能是回应超时。
3.3.2 探测从全球主要的 ISP 到某站点如 https://qige.io 的线路状态
我的操作:使用浏览器访问 http://ping.pe/qige.io
3.3.3 分析tracert背后原理
1、源端(SwitchA)向目的端发送一个UDP报文,TTL值为1,目的UDP端口号是大于30000的一个数,因为在大多数情况下,大于30000的UDP端口号是任何一个应用程序都不可能使用的端口号。
2、第一跳(SwitchB)收到源端发出的UDP报文后,判断出报文的目的IP地址不是本机IP地址,将TTL值减1后,判断出TTL值等于0,则丢弃报文并向源端发送一个ICMP超时报文,该报文中含有第一跳的IP地址10.1.1.2,这样源端就得到了SwitchB的地址。
3、源端收到SwitchB的ICMP超时报文后,再次向目的端发送一个UDP报文,TTL值为2。
4、第二跳(SwitchC)收到源端发出的UDP报文后,回应一个ICMP超时报文,这样源端就得到了SwitchC的地址(10.1.2.2)。
5、以上过程不断进行,直到目的端收到源端发送的UDP报文后,判断出目的IP地址是本机IP地址,则处理此报文。根据报文中的目的UDP端口号寻找占用此端口号的上层协议,因目的端没有应用程序使用该UDP端口号,则向源端返回一个ICMP端口不可达报文,该报文含有目的端的IP地址10.1.3.2。
6、源端收到ICMP端口不可达报文后,判断出UDP报文已经到达目的端,则停止Tracert程序,从而得到数据报文从源端到目的端所经历的路径(10.1.1.2;10.1.2.2;10.1.3.2)。
3.3.4 分析访问不同网站的节点路径
我的操作:
输入命令tracert qige.io,tracert baidu.com访问两个网站
对比观察路径的前几个节点,前两个节点是一致的,出门最开始的路径是一样的。
我的分析:
数据包离开本网必须要经过网关,所以前面网关的跳是相同的。
4 ARP
4.1命令功能简述
4.1.1 命令简述
ARP(Address Resolution Protocol)即地址解析协议,是用于根据给定网络层地址即 IP 地址,查找并得到其对应的数据链路层地址即 MAC地址的协议。
ARP 缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用,则 arp 命令将显示帮助信息。
4.1.2 个人理解
在网络访问层中,同一局域网中的一台主机要和另一台主机进行通信,需要通过 MAC 地址进行定位,然后才能进行数据包的发送。
而在网络层和传输层中,计算机之间是通过 IP 地址定位目标主机,对应的数据报文只包含目标主机的 IP 地址,而没有 MAC 地址。
因此,在发送之前需要根据 IP 地址获取 MAC 地址,然后才能将数据包发送到正确的目标主机,而这个获取过程是通过 ARP 协议完成的。
简言之,在以太网中,一台主机要把数据帧发送到同一局域网上的另一台主机时,设备驱动程序必须知道以太网地址才能发送数据。而我们只知道IP地址,这时就需要采用ARP协议将IP地址映射为以太网地址。
注意,一般认为ARP协议只使适用于局域网。
4.2 格式、参数及选项简述
4.2.1 语法格式
arp[-a [InetAddr] [-N IfaceAddr]] [-g [InetAddr] [-N IfaceAddr]]
[-d InetAddr [IfaceAddr]] [-s InetAddr EtherAddr [IfaceAddr]]
4.2.2 参数说明
参数 | 说明 |
---|---|
-a | 通过询问当前协议数据,显示当前ARP项。如果指定 inet_addr,则只显示指定计算机的 IP 地址和物理地址。如果不止一个网络接口使用 ARP,则显示每个 ARP 表的项。 |
-g | 与 -a 相同。 |
-v | 在详细模式下显示当前 ARP 项。所有无效项和环回接口上的项都将显示。 |
inet_addr | 指定 Internet 地址。 |
-N if_addr | 显示 if_addr 指定的网络接口的 ARP 项。 |
-d | 删除 inet_addr 指定的主机。inet_addr 可以是通配符 *,以删除所有主机。 |
-s | 添加主机并且将 Internet 地址 inet_addr与物理地址 eth_addr 相关联。物理地址是用连字符分隔的 6 个十六进制字节。该项是永久的 |
eth_addr | 指定物理地址。 |
if_addr | 如果存在,此项指定地址转换表应修改的接口的 Internet 地址。如果不存在,则使用第一个适用的接口。 |
分清两个“地址”:
(1)TCP/IP的32bit IP地址。仅知道主机的IP地址不能让内核发送数据帧给主机。
(2)网络接口的硬件地址,它是一个48bit的值,用来标识不同的以太网或令牌环网络接口。在硬件层次上,进行数据交换必须有正确的接口地址,内核必须知道目的端的硬件地址才能发送数据。
4.3实验描述
4.3.1 运行 arp -a 命令查看当前的 arp 缓存
我的操作:
直接运行arp -a命令
ping 同学的IP,这里是192.168.43.246,使用 arp -d * 删除全部缓存,再次查看缓存。操作结果如下图所示。
可以看到arp缓存了同学的IP地址,清除缓存后,同学的IP地址也被清掉。
我的分析:
arp -a参数的含义就是通过询问当前协议数据,显示当前 ARP 项。如果指定 inet_addr,则只显示指定计算机的 IP 地址和物理地址。如果不止一个网络接口使用 ARP,则显示每个 ARP 表的项。
通过arp -a命令,可以读取到与IP地址对应的MAC地址关系表。
当电脑没有旁边的mac地址,在我ping了它的ip地址后我的缓存里就会有它的mac地址,类型为动态。
4.3.2 使用 arp /? 命令了解该命令的各种选项
使用命令 arp/?
分析说明:
arp -d
参数的作用就是在你网络出现问题,IP地址发生冲突,其对应的MAC地址有误,那么我们就可以用arp -d命令来删除其中出问题的arp记录,然后重新添加新的arp记录,网络问题也就自然而然地得到解决了。
arp -g
参数的含义用与-a相同。-a和-g参数的结果是一样的,多年来-g一直是UNIX平台上用来bai显示ARP缓存中所有项目的选项,而Windows用的是arp -a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。
arp -s
参数的作用就是在办公网络或者是监控项目中,为了防止用户乱改IP地址或者遇到IP地址冲突,我们需要给IP地址绑定设备的MAC地址。只要下次出现网络故障,我们就可以用MAC地址定位到哪几台电脑。
4.3.3 假设当前网关的 IP 地址是 192.168.0.1,MAC 地址是 5c-d9-98-f1-89-64,请使用 arp -s 192.168.0.1 5c-d9-98-f1-89-64 命令设置其为静态类型的
一般而言,arp 缓存里常常会有网关的缓存,并且是动态类型的。
可以看出较初始arp缓存相比,添加了192.168.0.1地址,并成功设置为静态类型。
4.3.4 arp操作失败
执行arp -s操作时,执行arp -d *的命令时同样有此提示,返回提示:ARP项添加失败,请求的操作需要提升。
在查找资料时,有资料提示可以用netsh来进行,但是测试之后也并不能成功;因此之间采用最直接的方法,管理员权限打开cmder,再次输入此命令,成功!
4.3.5为何缓存中常常有网关的信息?
缓存中是主机曾经访问过的记录,访问其他地址需要网关信息,因此缓存中会存在网关的信息。如下图所示,192.168.43.1为自己本网网关。
4.3.6将网关或其它计算机的 arp 信息设置为静态有什么优缺点?
关于静态ARP与动态ARP相关概念简介:
静态ARP
:指的是需要管理员手工指定建立AP-MAC映射表,需要管理员手工建立和维护。
动态ARP
:指的是通过报文去学习ARP表项,不需要管理员手工建立和维护。
静态ARP表项
:长表项可直接用于报文转发。建立ARP长表项时,除了IP与MAC以外,还需要建立所在VLAN和出接口;当限定设备和用户在某个VLAN内通信时,使用长表项;短表项:短表项不能直接用于报文转发。如果用户希望向指定设备通信时,使用短表项。
动态ARP表项老化
:在一段时间内,如果表项中的ARP映射关系始终没有使用,则会被删除。通过及时删除不活跃表项,从而提升ARP响应效率。
静态ARP与动态ARP的对比,及设置为静态缓存的缺点:
静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。
arp缓存中静态的将会被永久保存,而动态的一段时间不用的话就会被删除,arp协议是建立在网络中各个主机互相信任的基础上的,使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行从而提高效率,缺点是有长时间不用的静态缓存。
4.3.7 关于ARP欺骗的学习
ARP欺骗,又称ARP毒化或ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。
此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定计算机或所有计算机无法正常连线。
ARP欺骗的危害
1、使同一网段内其他用户无法上网
2、可以嗅探到交换式局域网中的所有数据包
3、对信息进行篡改
4、可以控制局域网内任何主机
ARP欺骗攻击的检测与防御
检测:
1、网络频繁掉线
2、网速突然变慢
3、使用arp -a命令查看的网关mac地址与真实的网关mac地址不同
4、使用嗅探软件发现局域网内存在大量arp应答包防御:
1、绑定mac地址
2、使用静态arp缓存表
3、使用arp服务器,通过服务器来查找arp转换表来响应其他机器的广播
4、使用arp欺骗防护软件