zoukankan      html  css  js  c++  java
  • ARP协议基础

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

     

  • 相关阅读:
    Arrow-一个最好用的日期时间Python处理库
    悲观锁与乐观锁
    python中super的使用
    jquery的html,text,val
    spring与mybatis三种整合方法
    Android 在线SDK更新 和谐被墙解决
    转【】浅谈sql中的in与not in,exists与not exists的区别_
    tableview 里面的 必须配套使用的方法
    IOS发送Email的两种方法-备
    iOS基本的发短信和打电话调用
  • 原文地址:https://www.cnblogs.com/zhanp/p/10931650.html
Copyright © 2011-2022 走看看