什么是ARP协议:
ARP协议,全称“Address Resolution Protocol”(地址解析协议),使用ARP协议,可以实现将IP地址解析成对应主机的物理地址(MAC地址)
为了能够正确的向目的主机发送数据,必须将目的主机的32位IP地址转换成为目的主机48位以太网地址(MAC地址).为了完成从ip地址向MAC地址的转换,就需要使用到ARP协议。
ARP协议和DNS服务有点相像之处。不同点:DNS是域名和IP之间的解析,且DNS需要配置服务,ARP不需要配置服务。
ARP协议要求通信的主机双方必须在同一个物理网段(即局域网)
小结:
arp协议主要是将ip和mac地址相互转换
arp协议工作在2层属于三层协议
arp协议要求通信的主机在同一个局域网内
ARP通信原理:
通信过程:
1)1.1的机器想和1.2通信,首先检查本地的arp缓存表,查看是否有1.2的MAC地址
2)本地arp表有1.2的mac地址就直接通信。没有1.2的mac地址,1.1就发送arp广播(携带自己的ip:mac,并广播请求1.2的mac地址)
3)所有的主机都接收到arp广播信息,但是有1.2主机才会响应请求,给1.1单播一个回复,并缓存1.1的mac地址
4)1.1将1.2的mac缓存在arp表中,并传输数据。
局域网主机数量过多的情况下,会使用vlan来进行隔离避免广播风暴。
arp缓存表是把双刃剑:
1)加速arp的解析速度(减少广播风暴)
2)有了arp表,给恶意的黑客带来了攻击主机的风险。arp欺骗(伪造网关mac地址),arp攻击
ARP欺骗原理
ARP攻击就是伪造IP地址和MAC地址对实现ARP欺骗,如果一台主机中了ARP病毒,那么它就能够在网络中产生大量的ARP通信量(它会以很快的频率进行广播),以至于使网络阻塞,攻击者只要不断的发出伪造的ARP响应包就能更改局域网中目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。
ARP攻击主要存在于局域网中。
ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使
网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标
主机ARP缓存中的IP-MAC条目,造成网络中断或
中间人攻击。
ARP攻击主要是存在于局域网网络中,局域网中若有一台计算机感染ARP
木马,则感染该ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
攻击者向电脑A发送一个伪造的ARP响应,告诉电脑A:电脑B的IP地址192.168.0.2对应的MAC地址是00-aa-00-62-c6-03,电脑A信以为真,将这个对应关系写入自己的ARP缓存表中,以后发送数据时,将本应该发往电脑B的数据发送给了攻击者。同样的,攻击者向电脑B也发送一个伪造的ARP响应,告诉电脑B:电脑A的IP地址192.168.0.1对应的MAC地址是00-aa-00-62-c6-03,电脑B也会将数据发送给攻击者。
为什么使用ARP协议
OSI模型把网络工作分为7层彼此不直接打交道,只通过接口(layer interface)进行通信。IP地址工作在第三层,MAC地址工作在第二层。当协议在发送数据包时,需要先通过第三层(IP地址),第二层(MAC地址)的报头。但协议只知道目的节点的ip地址,不知道其MAC地址,又不能跨第二,第三层,所以需要使用ARP协议服务。
arp缓存表生产环境中的实际应用:
1)高可用服务器在切换时要考虑到arp缓存表的问题(keepalived,heartbeat自动实现arp表的更新)
2)路由器迁移,机房设备准备切换,导致主备机故障等设备在无缝迁移时要考虑arp缓存的问题。例如:更换办公室路由器
相关命令:
arp -a 查看arp缓存表
arp -d 情况arp缓存表
ARP广播而进行新的地址解析
/sbin/arping -I eth0 -c 3 -s 10.0.0.162 10.0.0.253(目标地址)
/sbin/arping -U -I eth0 10.0.0.162
在172.16.10.76主机上没有.31的MAC地址解析
[root@CMPP80 ~]# arp -a
? (172.16.10.1) at 00:10:db:ff:10:04 [ether] on eth1
在172.16.10.31主机上发起对.76的MAC地址解析
[root@cmpp_90 ~]# arping -I eth0 -c 3 -s 172.16.10.31 172.16.10.76
ARPING 172.16.10.76 from 172.16.10.31 eth0
Unicast reply from 172.16.10.76 [6A:EE:BE:55:21:24] 1.949ms
Unicast reply from 172.16.10.76 [6A:EE:BE:55:21:24] 1.337ms
Unicast reply from 172.16.10.76 [6A:EE:BE:55:21:24] 1.237ms
Sent 3 probes (1 broadcast(s))
Received 3 response(s)
再看.76主机的arp表,已经有了.31的ip-mac条目
[root@CMPP80 ~]# arp -a
? (172.16.10.31) at 6e:45:1b:4c:d4:85 [ether] on eth1
? (172.16.10.1) at 00:10:db:ff:10:04 [ether] on eth1
在172.16.10.76主机上更新跟.76互通主机ip-mac地址
/sbin/arping -U -I eth1 172.16.10.76
arping 命令:
说明:arping是用于发送arp请求到一个相邻主机的工具;
arping使用arp数据包,通过ping命令检查设备上的硬件地址。
语法:arping [-fqbDUAV] [-c count] [-w timeout] [-I device] [-s source] destination
参数:
-c count表示发送指定数量的 ARP 请求 数据包后就停止。如果制定了deadline选项,则arping会等待相同数量的arp响应包,直到超时为止;
-b 用于发送以太网广播帧(FFFFFFFFFFFF)。arping一开始使用广播地址,在收到响应后就使用unicast地址。
-w timeout设定一个超时时间,单位是秒。如果到了指定时间,arping 还没有完全收到响应则退出;
-q quiet output 不显示任何信息;
-f 表示在收到第一个响应包后就退出;
-s source设定 arping 发送的 arp 数据包中的 SPA 字段的值。如果为空,则按下面处理
如果是 DAD 模式(冲突地址探测),则设置为 0.0.0.0;
如果是 Unsolicited ARP 模式(Gratutious ARP)则设置为目标地址;
否则从路由表得出;
-U 主动ARP模式来更新邻居的ARP缓存。 预期没有答复。
-I interface设置ping使用的网络接口;
destination设置目标地址。
服务器切换ARP问题
当网络中一台提供服务的集群宕机后,当其他正常运行的主机,接管宕机的机器的资源时,会因为客户端的ARP table cache的地址解析还是原来宕机机器的MAC地址,从而导致,客户依然无法访问的情况。
解决办法:当机器宕机。ip地址迁移到其他机器上时,需要使用arping命令来通知所有网络内机器清空其本地的ARP table cache。从而使客户机访问时重新广播获取MAC地址。
ARP广播而进行新的地址解析
/sbin/arping -I eth0 -c 3 -s 10.0.0.162(接管vip的正常主机) 10.0.0.253(不通的客户机或者是网关地址。)
/sbin/arping -U -I eth0 10.0.0.162(接管vip的主机)
- Linux 虚拟机上安装linux系统 (ip:子网掩码,网关,dns,交换机,路由知识回顾)
一 安装虚拟机 二 虚拟机上配置好在安装linux系统 三 知识回顾 交换机:主机在局域网内的身份是MAC地址(可以通过[交换机广播:交换机通过被动学习来建立一张“接口号”和“MAC地址”的对照表]或 ...
- python 全栈开发,Day32(知识回顾,网络编程基础)
一.知识回顾 正则模块 正则表达式 元字符 : . 匹配除了回车以外的所有字符 \w 数字字母下划线 \d 数字 \n \s \t 回车 空格 和 tab ^ 必须出现在一个正则表达式的最开始,匹配开 ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
- [C#] C# 知识回顾 - 学会处理异常
学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...
- [C#] C# 知识回顾 - 学会使用异常
学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...
- [C#] C# 知识回顾 - 异常介绍
异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...
- [.NET] C# 知识回顾 - Event 事件
C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...
- [.NET] C# 知识回顾 - 事件入门
C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...
- [.NET] C# 知识回顾 - 委托 delegate (续)
C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...
随机推荐
- git修改已push的commit信息
本条适用于修改已push的最新的commit信息,确保本地的文件是最新的. 使用 git commit --amend 命令,(修改最近一次提交的注释信息),会进入到vim 编辑器 编辑提交信息,保存 ...
- Crypto加密解密
crypto 模块提供了加密功能,包含对 OpenSSL 的哈希.HMAC.加密.解密.签名.以及验证功能的一整套封装.我们这里讲crypto AES算法加密 一.使用步骤 1.引入Crypto 1. ...
- svg(可缩放矢量图形)
入门推荐: http://www.ruanyifeng.com/blog/2018/08/svg.html (教程) http://www.runoob.com/svg/svg-reference.h ...
- Python——Django-settings.py的内容
一.HTML路径设置 #所有和HTML路径相关的设置都在这里 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTem ...
- Java执行jar总结
1.命令集 1)nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg … ] [ & ] 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 ...
- 【并发编程】【JDK源码】J.U.C--AQS 及其同步组件(2/2)
原文:慕课网高并发实战(七)- J.U.C之AQS 在[并发编程][JDK源码]AQS (AbstractQueuedSynchronizer)(1/2)中简要介绍了AQS的概念和基本原理,下面继续对 ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)
引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一 的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...
- mysql 单列无重复
ALTER TABLE jeesite.bb_bill ADD UNIQUE (object_id);
- vmware(1):vmware中的bridge、nat、host-only的区别
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式) bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就 ...
- js上传图片压缩,并转化为base64
<input type="file" onchange="startUpload(this,'front')" id="renm"/& ...