IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 二十五、地址解析协议(一) -> 正文阅读

[网络协议]二十五、地址解析协议(一)

本节我们学习从IP地址到MAC地址的转换过程,这个过程是由ARP(地址解析协议)自动帮助用户主机完成的,用户在发送信息的时候根本感觉不到这个步骤的存在,但这个步骤是通信过程中非常重要的一步,因此我们必须要清楚它的原理。


ARP映射

假设主机A和主机B处在同一个物理网络中,主机A要和主机B通信,经过前面的学习,我们知道主机A除了要知道主机B的IP地址,从根本上还要知道主机B的MAC地址才能最终实现通信,因为IP数据包要经过数据链路层封装成帧嘛,此时ARP协议就可以帮我们获取到主机B的MAC地址。

学习具体过程之前,先要了解一个前提概念,叫做 ARP高速缓存,这个缓存是每台主机都具有的,这里面存放着一张“本地网络上各个主机的IP地址与MAC地址的映射表”,简称“ARP缓存表”

自己查看自己电脑上的ARP缓存表,是在CMD命令窗口,输入“arp -a”或者“arp -g”,就可以查看自己电脑上的ARP缓存。在这里为了安全问题,我就不能放上我自己电脑上的ARP缓存截图了,只能从网上找到一张截图,可以作为例子:

?

接上面的例子,主机A要向主机B发送IP数据包的时候,首先查看自己的ARP缓存表中是否存在主机B的从IP到MAC的映射,如果存在,那么就能通过这个映射知道主机B的MAC地址,然后把主机B的MAC地址填入即将发送出去的MAC帧,这样就能被主机B接收;但是如果主机A的ARP表中不存在主机B的映射,就要启动ARP协议去获取主机B的MAC地址。

当然,有些小伙伴可能不知道为什么主机A的缓存表里面没有主机B的映射记录,这种情况是怎么发生的,一般有两点原因:第一是因为主机A可能刚刚开机,一般刚刚开机的主机里面的ARP表都是空的(除非是做了静态绑定),第二个原因是主机B可能刚刚加入到这个网络中来,主机A还不认识它,必须要通过一次ARP过程才能双方认识。


地址解析过程

现在,我们来看具体的ARP解析的过程:

当同一局域网内的主机A想要给主机B发送数据,已经知道了主机B的IP地址,封装好了IP数据包,然后要向下经过数据链路层封装成帧,但是在这一步,由于主机A没有在自己的ARP缓存表中查询到主机B的IP与MAC的映射关系,也就是并不知道主机B的MAC地址,所以主机A就无法在封装成帧的时候填入正确的目标MAC地址。

假设主机A:IP地址是192.168.1.2,MAC地址是11-22-33-44-55-66。主机B:IP地址是192.168.1.3,MAC地址是AA-BB-CC-DD-EE-FF。

这时候,主机A的ARP进程就会自动在本局域网上广播一个ARP请求的数据包,此数据包里面包括这样的主要内容:我是192.168.1.2,我的MAC地址是11-22-33-44-55-66,现在我想知道192.168.1.3的MAC地址是什么。

主机A发出去的这个ARP请求包,将会被本局域网上其它所有主机上运行的ARP进程接收到。

当主机B收到这个ARP请求之后,发现这个ARP请求包正是发给自己的,就向主机A回复一个ARP响应,在这个响应的数据包里面写上:我是192.168.1.3,我的的MAC地址是AA-BB-CC-DD-EE-FF。

主机A收到响应数据包后,就把主机B的IP地址与MAC地址的映射记录在自己的ARP缓存表中,以备以后再次需要使用。

需要注意:

主机A广播出去的ARP请求,虽然其它所有主机的ARP进程都会收到,但是这其中只有主机B会向主机A回复响应,因为除了B的其他主机一看此请求不是发给自己的,就根本不会理睬这个请求。

主机A发送ARP请求是广播方式,而主机B在回复响应的时候,用的是单播方式。因为主机A发来的ARP请求包中已经写明了主机A的MAC地址,所以主机B就不用再广播询问A的MAC地址了。

③关于ARP缓存表:这张表的一个突出特点就是可以限制广播通信量,试想如果没有这张表的存在,主机A和主机B之间完成了一次ARP“请求—响应”的过程后通信成功,但很用可能在不久之后双方还要进行通信,这时候主机A就又忘了主机B的MAC地址是什么,就又要广播一次,那么这种情况如果放在一个比较大的局域网的环境下,比如局域网内有100台主机,那么各主机之间的广播流量将会消耗很大的带宽资源,这是非常可怕的事情。

另外,ARP缓存表的另一个特点是动态性,动态性指的是:一般的每条映射记录都会有一个生存时间(除非是静态绑定的),超过了这个时间的期限,这条记录将会被删除。比如我们把生存时间设置为10分钟,如果主机A与B通信一次之后,在10分钟之内没有第二次通信,那么主机A的ARP缓存表中就会删除主机B的映射,等到再一次想通信的时候,再去广播询问。我们通常把这种情况称之为“ARP超时”。

ARP超时的好处是:如果主机B的网卡损坏,更换了一块新的网卡,那么主机B的MAC地址就是新的MAC地址了,如果主机A的ARP缓存表中没有超时删除的机制,那就会一直保存着主机B那条原来的MAC地址与IP地址的映射,这样主机A通过查询自己的缓存表得到的永远是主机B之前的那个MAC地址,而主机B已经换了新的MAC地址,那么主机A发出的ARP请求将不会被任何主机接收。


本节的内容就先到此为止,下一节我们继续深入学习ARP,分析ARP请求包和响应包的结构,用抓包软件进行演示。

参考资料:谢希仁《计算机网络》第七版

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 12:08:14  更:2021-09-09 12:08:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:41:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码