ARP协议 路由器原理
 
 
1 广播与广播域
广播:将广播地址作为目的地址的数据帧
广播域:网络中能够接收到同一个广播所有节点的集合(在这里广播域越小越好)
交换机控制不了广播 路由器可以控制广播 路由器可以隔离广播域
2 MAC地址广播
广播地址为FF-FF-FF-FF-FF-FF
IP地址广播
1. 255.255.255.255
2. 广播IP地址为IP地址网段的广播地址,如192.168.1.255/24
3 ARP协议:地址解析协议
将一个已知的IP地址解析成MAC地址
4 ARP原理:
1)发送ARP广播请求
2)接收ARP单播请求
ARP请求报文内容:我是10.1.1.1 我的MAC是。。。
谁是10.1.1.3 你的MAC地址是?
5 IP地址解析为MAC地址
PC1 发送数据给PC2,首先查看ARP缓存表有没有PC2 的MAC地址
有 直接发送
没有:
PC1 发送ARP广播请求报文
所有主机(网段内)都会接收到ARP请求信息
其他主机丢弃 PC2 发送单播应答报文
PC1 将PC2 的MAC地址缓存到ARP缓存表中,然后发送数据
5 需求分析
 
 
6 ARP攻击与欺骗
原理:
通过发送伪造虚假的ARP报文(广播或者单播)来实现的攻击或者欺骗
攻击:结果为中断通信(断网)
如:
虚假报文的MAC地址是伪造的,不存在的,以此来实现ARP攻击
欺骗:
结果为 可以监听,窃取,篡改,控制流量,但不中断通信
虚假报文的是自己的MAC地址,以此来实现ARP欺骗
如果图中PC3 发送的报文中 MAC地址是虚假的不存在的 则会造成PC1 的中断通信 这是ARP攻击
如果图中PC3 发送的报文中 MAC地址是他自己本身的 则会造成 PC1余PC2 的通信 PC3 可以通过抓包进行获取 同时以此可以进行修改信息 但不会中断通信 这是ARP欺骗
 
ARP协议没有验证机制
ARP攻击者通过发送虚假伪造的ARP报文对受害者进行ARP缓存投毒
 
 
路由器工作原理:
 
 
 
路由器的工作原理
凡是可以配IP地址的接口才有MAC地址
路由器与PC是同种设备
1)一个帧到达路由,路由器首先检查目标MAC地址是否自己,如果不是则丢弃,如果是则解封装,并将IP包送到路由器内部
2)路由器检查IP包头中的目标IP,并匹配路由表如果匹配失败,则丢弃,并向源IP回馈错误信息,如匹配成功,则将IP包路由到出接口
3)封装帧,首先将出接口的MAC地址作为源MAC封装好,然后检查ARP缓存表,检查是否有下一跳的MAC地址,如有,将提取并作为目标MAC地址封装到帧中,如没有,则发送ARP广播请求下一跳的MAC,并获取到对方的mac地址,再记录缓存,并封装帧,最后将帧发送出去。
 
如上图中:如果将数据从10.1.1.1发送到40.1.1.1 以下简称为 10.1 40.1 图中AA II BB等为简写的MAC地址 交换机MAC地址表已经学习完全
此时不知道 40.1 的MAC地址 --AA10.1 40.1 帧包发不出去
1 由于在不同网段 此时AA发送ARP广播请求报文:我是10.1 我的MAC地址是AA 谁是10.1.1.254(网关),你的MAC地址是?
2 网关接收后回应发送ARP单播报文:我是254,我的MAC地址是CC 同时ARP缓存表会进行缓存 10.1.1.254 CC
3 此时为 CCAA10.1 40.1 AA发送帧包到CC
4 路由器收到帧后 会先判断目标MAC地址是自己不,不是丢弃 是则进行解封装,并将IP包送到路由器内部
5 路由器检查IP包头中的目标IP,并匹配路由表如果匹配失败,则丢弃,并向源IP回馈错误信息,如匹配成功,则将IP包路由到出接口
6 封装帧,首先将出接口的MAC地址作为源MAC封装好,然后检查ARP缓存表,检查是否有下一跳的MAC地址,如有,将提取并作为目标MAC地址封装到帧中,如没有,则发送ARP广播请求下一跳的MAC,并获取到对方的mac地址,再记录缓存,并封装帧,最后将帧发送出去。
7 后面过程都是如此 直到帧到达OO 帧为 OOFF10.1 40.1
8 路由器收到帧后 目标MAC地址是自己的,进行解封装,并将IP包送到路由器内部
9 路由器检查IP包头中的目标IP,匹配路由表找到40.1 直连的 直连路由 IP包到达出接口HH
10 发送ARP广播请求报文,II回应发送单播报文找到40.1的MAC地址,同时ARP缓存表会进行缓存,学习到ARP缓存表
11 重新封装 IIHH10.1 40.1 然后发送 到达交换机 交换机进行自己的工作 检查MAC地址表找到 II 将帧发送过去
12 到达40.1 后进行解封装 得到应用层数据
 
 

最新文章

  1. Linux分析日志获取最多访问的前10个IP
  2. 安装vim的ycm
  3. routeProvider
  4. android sqlite操作(1)
  5. Headfirst设计模式的C++实现——组合模式(Composite)
  6. git 彩色显示当前branch
  7. LCD深度剖析
  8. 【AC大牛陈鸿的ACM总结贴】【ID AekdyCoin】人家当初也一样是菜鸟
  9. C# 编译器选项 /platform(指定输出平台)32位程序运行到x64平台的问题
  10. 【笔记】Loadrunner添加OS类型为Windows的服务器(Win7)
  11. java几种常用设计模式简单示例
  12. React Native之AppRegistry模块
  13. SQL Server的Linked Server支持使用SEQUENCE吗?
  14. Python开发端口扫描器
  15. vmware中连接U盘
  16. React自己写的一个地图小组件
  17. Java计算器(结对)
  18. 【noip模拟赛7】足球比赛 树
  19. Java读文件
  20. Java中this和super的用法和区别

热门文章

  1. Wahahahehehe 随笔归档
  2. 虚拟机中debian11修改控制台(console)分辨率|linux控制台分辨率|linux console resolution
  3. P5731 蛇形方阵
  4. UVM reg model 常见问题记录
  5. Win10下VM虚拟机桥接模式无法上网的相关问题?
  6. unity ScriptObject使用
  7. 在windows如何下载android源码
  8. Objectarx2016在VS2012里面创建失败的解决办法
  9. 全国分乡镇第五次人口普查数据shp数据库省市区县街道
  10. Chrome 中的 JavaScript 断点设置和调试技巧--转自hanguokai.com