当前位置: 首页 > news >正文

ARP协议

目录

一 报头格式

二 ARP具体过程

三 ARP欺骗


一 报头格式

1. ARP作用

ARP协议工作在数据链路层,与MAC桢属于同层关系,网络传输自顶向下封报头,自底向上解包分用,而MAC地址每经过一个节点都会动态变化,所以每次向其他同一个子网的主机通信,必须知道目的主机的MAC地址封装MAC桢向下交付,到目的主机解包分用,所以ARP就是用来通过IP地址来获取MAC地址的。

2. 报头字段

硬件类型(2字节):同一个子网的网络类型,如以太网,令牌环网等

协议类型(2字节):表示如IPv4,IPv6等类型转换成MAC地址

硬件地址长度:和前面硬件类型强相关,如以太网地址长度

协议地址长度:和前面协议类型强相关,如IPv4地址长度

op:表示为ARP请求还是ARP应答


前4个字段为固定字段

发送端以太网地址:发送端的MAC地址

发送端IP地址:发送端的IP地址

目的以太网地址:如果不知道,默认全FFFFFF/全0,表示缺省广播

目的IP地址:接收方IP地址

二 ARP具体过程

5个字段填充:

前5个字段为固定字段,填充源ip,mac地址,目的ip地址,目的mac地址缺省广播

ARP请求构建完成,向下封装MAC桢

这里默认收到mac桢进行解包,并且ARP前5个字段忽略不写,后面会用到。

当路由器准备封mac桢时,不知道目的主机的mac地址,则需要进行ARP请求获得mac地址,不仅是外网转发进来的时候,同一个局域网内通信/向外网通信某台主机也可能发起ARP请求/收到ARP应答,由op字段决定。

1. MAC桢目的mac地址填的FFFFFFFFF表示广播,给处于同一个子网的所有主机发送数据包。

2. 当除了主机E(目的主机IP)的主机收到数据包,首先MAC桢解包分用,看到目的mac地址为全FFFFF,不知道是不是是自己的mac地址,所以不丢弃,再看桢类型,0806表示向上交给ARP协议,然后得到ARP报头,首先看ARP:op字段,发现为ARP请求,则比对目的IP地址和自己IP地址不一样,则丢弃(ARP层丢弃)。

3. 当主机E收到数据包,和上述步骤一样,发现目的IP地址和自己IP地址一样,则重新构建ARP应答,并填充字段:

构建完应答,在继续封装mac桢,mac桢就不再目的mac地址就不再填FFFFF,而是(1.1.1.1)macR。

4. 和 " 2 " 进行同样的步骤,解包之后,看到目的mac地址不是广播地址,又不和自己主机mac地址一样,丢弃(mac桢层丢弃)。

5. 当路由器收到数据包,解包之后发现和自己mac地址一样,发现桢类型为0806,交给上层ARP,拿到ARP报头,先看op字段,因为不知道是别人构建的应答还是请求,这次是应答,首先看目的mac地址和目的IP地址和路由器的mac地址和IP地址一样,确定报文是发给路由器,然后得到源macE的地址,自此通过ARP请求根据目的IP地址得到目的主机的mac地址,后续重新封装mac桢填入目的主机mac地址发送数据包。

6. 当路由器拿到目的主机的MAC地址,除了发送数据包,还会在一定时间内缓存 "MAC地址>IP地址" 的映射,避免下次收到的数据包,发送重复的主机,从而重新构建ARP请求的开销。

7. 通过 arp -a 命令查看ARP映射表

8. RARP

ARP是通过IP地址转换成mac地址

RARP是通过mac地址转换成IP地址,知道了mac地址,在数据链路层->mac桢拿到就能直接识别是不是该主机的mac地址,在交付给RARP构建应答响应回去,所以就可以直接封装mac桢指定mac地址而不用进行广播了,和上述ARP演示几乎一模一样。

三 ARP欺骗

所谓的ARP欺骗,就是中间人通过某种手段拿到数据包并且双方通信的主机是感知不到的。

下面看看具体流程:

假设主机A和路由器已经通信过了,并且已经缓存对方的mac地址。

这时候来了个中间人M,并向主机A发送ARP应答,携带路由器的IP地址和主机M的mac地址,主机A查映射表,就会以为路由器更新过了mac,直接重新映射成 " IPR -> macM ",同样的发送大量的ARP应答给路由器,也会影响他的映射表。

后续主机A发送数据包给路由器,根据封装的mac桢,并且mac地址填的是主机M的,因为映射表已经变了,所以只有主机M能处理,然后向路由器发送数据包,如果不知道路由器的mac地址,重新ARP请求即可,因此主机M就能获取主机A和路由器之间通信的数据包。

相关文章:

  • 婴幼儿托育实训室师资协同培养模式
  • 【深度学习】将本地工程上传到Colab运行的方法
  • LeetCode 热题 100 98. 验证二叉搜索树
  • vector 常见用法及模拟
  • 每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)
  • 7系列 之 SelectIO 资源
  • redis存储结构
  • 【和春笋一起学C++】数组名作为函数参数实例
  • KaiwuDB 2.0:为 AIoT 而生,融合时序、关系与 AI 的未来数据库
  • 股指期货的保证金交易和资金门槛是多少?
  • 【沉浸式求职学习day36】【初识Maven】
  • MySQL数据库迁移SQL语句指南
  • 蓝桥杯14届国赛 班级活动
  • DAMA车轮图
  • 免费公共DNS服务器推荐
  • springboot3+vue3融合项目实战-大事件文章管理系统-更新用户头像
  • c++ 类的语法2
  • 用浏览器打开pdf,如何使用划词翻译?
  • 《Linux命令行大全(第2版)》PDF下载
  • Python-MCPInspector调试
  • 融创中国:境外债务重组计划聆讯定于9月15日召开
  • 王毅谈中拉论坛十年成果
  • 技术派|更强的带刀侍卫:从054B型战舰谈谈世界护卫舰发展
  • 江西省市场监管局原局长谢来发被双开:违规接受旅游活动安排
  • 国内首例侵入式脑机接口系统前瞻性临床试验:受试者已能用意念玩游戏
  • 俄总统新闻秘书:普京提议谈判表明俄寻求和平解决方案意愿