arp和ping协议
arp协议
网络层的 ARP 协议完成了 IP 地址与物理地址的映射。每台主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系。
arp及其大致原理
在传输一个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会通过主机「路由表」确定 IP 数据包下一跳。然而,网络层的下一层是数据链路层,所以我们还要知道「下一跳」的 MAC 地址。
由于主机的路由表中可以找到下一跳的 IP 地址,所以可以通过 ARP 协议,求得下一跳的 MAC 地址。
ARP 是借助 **ARP 请求与 ARP 响应 **两种类型的包确定 MAC 地址的。
- 主机会通过广播发送 ARP 请求,这个包中包含了想要知道的 MAC 地址的主机 IP 地址。
- 当同个链路中的所有设备收到 ARP 请求时,会去拆开 ARP 请求包里的内容,如果 ARP 请求包中的目标 IP
地址与自己的 IP 地址一致,那么这个设备就将自己的 MAC 地址塞入 ARP 响应包返回给主机。
操作系统通常会把第一次通过 ARP 获取的 MAC 地址缓存起来,以便下次直接从缓存中找到对应 IP 地址的 MAC 地址。
不过,MAC 地址的缓存是有一定期限的,超过这个期限,缓存的内容将被清除。
安全隐患
1. ARP窃听
从ARP的协议过程来看,ARP请求消息将通过交换机或集线器以广播形式进行发送,因此网络上所有主 机均可以收到ARP请求消息。针对ARP协议最简单的攻击就是ARP窃听。
对于恶意攻击者来说,可以被动的收集到这些主机的IP地址和MAC地址,从而实现窃听的目的,而掌握网络中各节点IP地址、MAC地址、是否在线等信息之后,就可以为进一步发动其他攻击(如网络拓扑绘制、拒绝服务等)提供信息。
2. ARP欺骗
使IP地址个物理地址之间的关系不是正确的映射关系,而是一个虚假错误的映射,从ARP的原理来看,无论节点收到ARP请求还是响应,该节点均会更新其ARP表。 如果无对应的表项,则添加该表项;反之,则更新对应的表项。
如果某个ARP消息中的IP-MAC对是不真实的,则造成ARP欺骗攻击(ARP Spoofing),或称为ARP污染攻击(ARP Poisoning)。
攻击者故意发送不正确的MAC-IP映射ARP响应报文,导致发送ARP请求的主机得到不正确的IP地址和MAC地址映射关系。
如果该欺骗包的目的MAC地址为广播地址(即FF-FF-FF-FF-FF-FF),则网络中所有节点均会收到该包,从而更新各自的ARP表。
如果欺骗包的目的MAC地址对应的节点不存在,这些包将没有无节点接收,形成所谓的“黑洞 攻击” 。
3.GARP滥用攻击
攻击者利用GARP技术,主动发送虚假的GARP请求消息(即伪造的IP地址和MAC地址的映射) 。
如果GARP欺骗包的目的IP地址和MAC地址是某个特定节点的MAC地址,则所造成的攻击仅针对该节点。
如果GARP欺骗包的IP地址和MAC地址是网络中所有主机,会导致所有主机的本地ARP映射表发生混乱,严重干扰整个网络通信出现故障。
https://blog.csdn.net/fu_yunjian/article/details/104902555
RARP
ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用得到。
通常这需要架设一台 RARP 服务器,在这个服务器上注册设备的 MAC 地址及其 IP 地址。然后设备根据自己的MAC地址请求IP地址,根据响应设置自己的IP地址。
ping协议工作原理
1.ICMP协议
互联网控制报文协议。ICMP 主要的功能包括:确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改善网络设置等。
ICMP 的这种通知消息会使用 IP 进行发送 。ICMP 报文是封装在 IP 包里面,它工作在网络层,是 IP 协议的助手。
ICMP 包头的类型字段,大致可以分为两大类:
1.用于诊断的查询消息,也就是「查询报文类型」
2.通知出错原因的错误消息,也就是「差错报文类型」
2.查询报文类型
查询报文类型的回送消息(0和8)用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息,ping 命令就是利用这个消息实现的。
可以向对端主机发送回送请求的消息(ICMP Echo Request Message,类型 8),也可以接收对端主机发回来的回送应答消息(ICMP Echo Reply Message,类型 0)。
相比原生的 ICMP,这里多了两个字段:
1.标识符:用以区分是哪个应用程序发 ICMP 包,比如用进程 PID 作为标识符;
2.序号:序列号从 0 开始,每发送一次新的回送请求就会加 1, 可以用来确认网络包是否有丢失。
在选项数据中,ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。
3.差错报文类型
由报文中的类型段决定差错报文还是查询报文,代码段决定差错报文的类型。
4.ping的发送和接收-查询报文类型
ping 命令执行的时候,源主机首先会构建一个 ICMP 回送请求消息数据包。
ICMP 数据包内包含多个字段,最重要的是两个:
1.类型,对于回送请求消息而言该字段为 8;
2.序号,主要用于区分连续 ping 的时候发出的多个数据包。
每发出一个请求数据包,序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。
同时将协议号设为1,表示ICMP协议,IP 层将以ping地址作为目的地址,本机 IP 地址作为源地址,协议字段设置为 1 表示是 ICMP 协议,再加上一些其他控制信息,构建一个 IP 数据包。
接受方主机会构建一个 ICMP 回送响应消息数据包,回送响应数据包的类型字段为 0,序号为接收到的请求数据包中的序号,然后再发送出去给源主机。
在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 回送响应消息,则说明目标主机可达。
ping 这个程序是使用了 ICMP 里面的 ECHO REQUEST(类型为 8 ) 和 ECHO REPLY (类型为 0)。
5.traceroute —— 差错报文类型的使用
- 作用一:故意设置特殊的TTL,来追踪去往目的地时沿途经过的路由器。TTL设置为1开始的递增序列,逐步得到途径路由的IP,根据不可能端口号判断是否到达目标路由。到达了会返回端口号不可达。
- 作用二:**故意设置不分片,从而确定路径的 MTU。**将 IP 包首部的分片禁止标志位设置为 1。根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。随后,通过一个 ICMP 的不可达消息将数据链路上 MTU 的值一起给发送主机,不可达消息的类型为「需要进行分片但设置了不分片位」。发送主机端每次收到 ICMP 差错报文时就减少包的大小,以此来定位一个合适的 MTU 值,以便能到达目标主机。