ARP

什么是ARP协议

ARP协议是能够根据IP地址解析出该IP地址所在设备的MAC地址,叫(Address Resolution Protocol)地址解析协议

ARP地址的工作流程

  1. 当一台主机A想向该网段(局域网)内的另一台主机B发送 (网络层报文) 如IP数据报,首先会查询主机 所维护的一张ARP缓存表 - ARP缓存表(IP - MAC映射表),如果表里没有该IP所对应的MAC地址表项,就发送ARP请求报文(如下图),并填好发送方的IP地址和发送方的MAC地址,还有目的地的IP地址,再把目的MAC地址改成ff:ff:ff:ff:ff:ff

    情景模拟:相当于Host A :"我的IP地址是10.0.0.1 MAC地址是 xxxx ,请问10.0.0.2 的MAC地址是什么?"

  2. 这个报文将在局域网中广播,每个主机都能收到这个ARP报文,运行ARP进程的Host收到这个报文, 检查

    自己的IP地址如果和报文里的目的IP地址一样,则接收这个数据报,改写ARP报文里的字段,填上自己的MAC地址,把自己的地址改成源IP地址,同上,作为ARP响应报文 单播 给 源ARP发送方。

    情景模拟:相当于Host B:"我是10.0.0.2 我的MAC地址是 yyyy"

  3. ARP缓存(ARP Cache) 每一条表项 是有 生存时间的 , 因为有可能其中的表项里的MAC地址改变了(比如换网卡),又不更新,所以是不正确的。(10 - 20分钟)

ARP请求报文

ARP在不同局域网内的应用

上面讨论了ARP在同一局域网内的应用,因为在同一网段,所以是直接交付的。

当两台主机在不同局域网的时候,IP数据报需要经过路由器进入另一个局域网。

  1. 如图: PC H1 - > Router R1(网关) -> PC H3 -> Router R2(网关) -> PC H4

  2. H1想发一个IP数据报给H4,然后检查目的地IP地址发现H4不在自己这个网段里,

    所以想把这个数据报发给R1。

  3. H1检查自己的ARP缓存,发现没有R1的MAC地址,但是有R1的IP地址(设置的网关地址),

    所以发送ARP请求报文,最后填上目的MAC地址为R1的MAC地址。然后把数据报发往R1

  4. R1收到这个数据报后,数据链路层处理这个帧,发现这个帧的目的MAC地址是自己,所以

    把帧头去掉,取出IP报文,根据目的IP地址,查询路由表,找到这个目的网络的下一跳路由器。

    然后把这个数据报发到那个端口出去。

    在发送之前,因为链路层只识别MAC地址,所以在源MAC地址里填写自己这个要发送的端口

    的MAC地址,并用ARP查询到下一跳路由器接收端口的MAC地址,填在这一轮的帧的目的MAC地址

  5. 最后到了R2 - H4那段时,R2直接交付给H4。

重要问题

为什么需要IP地址,而不能直接用MAC地址,实现异构网络间的通信?

答案:因为MAC地址非常复杂,而且对用户来说,这个地址辨识能力不友好,而且如果以每个MAC地址替代了IP的话,那么路由表就会变得十分庞大,非常复杂。

想一下,有了IP地址,我只需要发到网关,就可以出去了,而且出去后,到了下一个路由器,路由器只需要找到下一跳的路由器,剩下的就交给链路层的交换机去转发了,这种分层,分工的思想,其实是把复杂而大的问题简化了,所以非常合理。

ARP协议基础的更多相关文章

  1. ARP协议的基础知识

          关于ARP协议的基础知识 1.ARP的工作原理 本来我不想在此重复那些遍地都是的关于ARP的基本常识,但是为了保持文章的完整性以及照顾初学者,我就再啰嗦一些文字吧,资深读者可以直接跳过此节 ...

  2. 三分钟网络基础-ARP协议

    什么是 ARP 协议 地址解析协议 ARP (Address Resolution Protocal):在同一局域网下,根据已知道的主机或路由器的 IP 地址,找出其相应的硬件地址. 高速缓存 每一个 ...

  3. 网络基础:ARP 协议、IP协议、路由协议 均属于网络层协议

    ARP协议 ARP--地址解析协议(Address Resolution Protocol),实现通过 对方的IP地址(域名) 寻找对方的 MAC地址 ARP的功能 本地电脑查看 IP 和 MAC 对 ...

  4. 6410实现网卡(DM9000A)收发功能及ARP协议实现

    1. 网卡硬件结构(DM9000A) 网卡的实质就是MAC通过MII接口控制PHY的过程. MAC主要负责数据帧的构建.数据差错检查.传送控制等. PHY是物理接口收发器,属于物理层,当它收到MAC过 ...

  5. TCP/IP协议基础(转)

    转自 http://www.chinaunix.net 作者:Bernardus160  发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...

  6. ARP协议格式、ARP运行机制入门学习

    相关学习资料 http://baike.baidu.com/view/149421.htm?fromtitle=ARP%E5%8D%8F%E8%AE%AE&fromid=1742212& ...

  7. ARP协议详解

    ARP协议:地址解析协议,将IP地址映射到MAC地址. ARP缓存:每个主机都有存储IP地址和MAC地址的缓冲区.每条记录最长生存时间为10分钟,如果一条记录2分钟没有使用,则会被删除.如果始终在使用 ...

  8. Winpcap网络编程九之Winpcap实战,ARP协议获得MAC表及主机通信

    大家好,本次我们须要完毕的任务是: 完毕两台主机之间的数据通信(数据链路层) 仿真ARP协议获得网段内主机的MAC表 使用帧完毕两台主机的通信(Hello! I'm -) 声明:本文章的目的是为大家的 ...

  9. ARP协议与ARP攻击入门

    一 ARP协议 ARP协议是一个年代相当"久远"的网络协议.ARP协议制定于1982年11月,英文全称:Address Resolution Protocol,即"地址解 ...

随机推荐

  1. 购物网站被p.egou.com强制恶意劫持

    今天早上打开电脑浏览京东,发现随便点击商品,都自动转化为淘客推广的页面, 我以为是360浏览器自己干的,然后我换了谷歌,也是一样,难道这是电脑里面有流氓插件? 我又换了火狐,还是一样,没办法了,换IE ...

  2. Spring对单例的底层实现,单例注册表

    Spring框架对单例的支持是采用单例注册表的方式进行实现的,源码如下: public abstract class AbstractBeanFactory implements Configurab ...

  3. JAVA笔记15-线程同步

    一.概念 1.多个线程之间访问同一资源,进行协调的过程是线程同步.例如两个人同时操作同一银行账户.解决方法:加锁 2.Java种引入对象互斥锁的概念,保证共享数据操作的完整性.每个对象都对应于一个可称 ...

  4. windows补丁服务器

    一.WSUS 安装要求 1.硬件要求: 对于多达 13000 个客户端的服务器,建议使用以下硬件:* 4 Core E5-2609 2.1GHz 的处理器* 8 GB 的 RAM 2.软件要求: 要使 ...

  5. int 和guid做主键的时候性能的区别

    1.在经常需要做数据迁移的系统中,建议用Guid.并且在相应的外键字段,也就是用来做连接查询的字段添加非聚集索引,对于改善性能有极大的好处.where条件的字段也可以适当添加非聚集索引. 2.在使用G ...

  6. docker-compose命令及yaml文件

    Docker-compose常用命令 docker-compose up -d nginx 构建建启动nignx容器 docker-compose exec nginx bash 登录到nginx容器 ...

  7. Linux基础教程 linux中使用find命令搜索文件常用方法记录

    find是linux非常强大的搜索命令,通过man find查看find手册,可以发现find的说明一屏接一屏,估计要看完也得花不少时间.兄弟连Linux培训 小编总结了下,整理出find常用的使用方 ...

  8. python – 如何禁用Django的CSRF验证?

    如果只需要一些视图不使用CSRF,可以使用@csrf_exempt: from django.views.decorators.csrf import csrf_exempt @csrf_exempt ...

  9. pyCharm报错"your evaluation license has expired, pycharm will now exit"解决方法(实测)

    一.修改C:\Windows\System32\drivers\etc 目录下的hosts文件 1.打开hosts文件,路径是 c:\windows\system32\drivers\etc\host ...

  10. jdk环境配置(windows版)

    JAVA_HOME C:\Program Files\Java\jdk1.7.0_80 Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; CLASSPATH .;%J ...