提起“协议”,我们并不陌生,比如实习协议、租赁协议,等等。

所以,协议,其实就是双方或几方协商一致,需要共同遵守的约定。

网络中各种各样的协议,就是人们为了让电脑或网络设备(比如交换机)更好地协同工作,实现各种网络功能而制定的一些约定。

我们在讨论ARP协议前,先简单了解一下IP地址,以后再详细讨论。

前面我们曾经提到过,电脑有两个地址,一个是MAC地址,像电脑的“身份证号”;一个是IP地址,像电脑的“名字”。

通常,我们会通过IP地址来使用网络。MAC地址我们一般不会直接使用,但是电脑发送数据时要用它来封装,所以电脑需要,但这跟我们使用电脑的操作人员关系不大。

一台电脑要接入并使用网络,必须要有IP地址。打开电脑的网络属性,可以看到:

IP地址,就是你的电脑在网络中的名字,别人用它来找你;

子网掩码,可以通过它和IP地址,知道你的电脑属于哪个子网(如果把网络看成一幢大楼,子网就是每个楼层或者每个房间,可大可小。去楼层或房间找你,比在整个大楼找要容易得多);

网关,你所在子网通往其他子网的出入口。

比如,你的电脑IP地址是192.168.1.20,子网掩码是255.255.255.0,通过“按位与”,可以计算出你的子网号。

什么是“按位与”?

“按位与”也叫“按位乘”,是一种逻辑运算:把参与运算的两个二进制数各对应位相乘,两个数都是1时,结果才是1。

比如,二进制数10110100和110010,先把它们右对齐,位数不够的前面补“0”,使它们对齐:

然后,对应的位相乘,并得到结果:

00110000就是二进制数10110100和110010 “按位与”的结果。

我们把IP地址和子网掩码换算成二进制(用电脑上的计算器,当然你也可以通过除2取余法手工算),然后“按位与”,再把结果换成十进制,就是你的子网号。如:

计算出的192.168.1.0就是你的电脑所在的子网号。

Windows10的计算器有“按位AND”操作,就是“按位与”,计算子网号很方便。

通常情况下,子网掩码也可以用它二进制中“1”的个数来表示。如子网掩码255.255.255.0换算成二进制后从左向右共有24个“1”,我们可以称为“24位掩码”。IP地址和子网掩码可以简写为:192.168.1.20/24。

当两台电脑的子网号相同,我们可以认为它俩在同一个网络,可以理解为同一个房间,直接互访就行,不用出门;如果子网号不相同,那它们要互访就需要通过网关这个出入口了。网关,就好像房间的门。

网关一般是一台有路由功能的设备,这个以后再讨论。

现在,我们来看看ARP这个协议。

我们假设电脑A的IP地址和子网掩码是192.168.1.20/24,网关是192.168.1.254。要访问的电脑B的IP地址是192.168.1.25。

如果是一般电脑操作人员,直接通过某个软件访问192.168.1.25就可以了,不必关心访问的细节。

但我们学网络的人,就需要知道电脑是怎么处理的。

电脑A在进行数据封装时(可以理解为寄快递,把要寄的东西打包,并填写快递单),计算自己的子网号和电脑B的子网号是否相同。

等等,我们要访问的电脑B只提供了IP地址,并没有告诉我们子网掩码呀?

是的,我们在网络中访问别人,只通过对方的IP地址就可以了。

那怎么计算它的子网号呢?

谁要访问别人,就用谁的掩码!也就是说,电脑A不管访问谁,都用自己的掩码计算双方的子网号!

你以为呢?不然用谁的,别人的我也不知道啊!

通过“噼里啪啦”一阵计算,我们得到电脑A和电脑B的子网号都是192.168.1.0。

既然大家都在一个子网,就好像都在一间屋子里一样,电脑A虽然不知道电脑B是谁,但它会大声问,保证房间里所有人都能听到:“请问,192.168.1.25,你的MAC地址是多少?”

这就是ARP协议的Request报文:

这个报文简单点说,就是ARP的“快递单”,我们只看后面4行:

Sender MAC address:这是“发件人”的MAC地址,也就是电脑A的;

Sender IP address:这是“发件人”的IP地址;

Target MAC address:这是“收件人”的MAC地址,电脑A正在问,还不知道,填全0;

Target IP address:这是“收件人”的IP地址。

要把这个ARP Request询问报文发出去,还要用以太网格式把这个Request报文打包封装一下,填写以太网的“快递单”。因为电脑的网卡、交换机在传输数据时只认识以太网的“快递单”格式,不认识其他的东西,包括ARP。

上面的EthernetII就是以太网的一种“快递单”格式,我们在前面曾经提到过以太网的封装格式:

对照看一下:

DMAC:对应Destination,收件人地址。由于Request报文是“大声问”,需要房间里的所有人都听到,因此填写“广播地址”;

SMAC:对应Source,发件人地址,就是电脑A的MAC地址;

Type:收件人收到后把以太网包装拆除,要把里面封装的东西交给ARP协议处理;

Data:发送的数据,这里是Address Resolution Protocol(request),就是ARP Request请求报文;

CRC:校验数据没有列出,我们不必关心,知道作用就行了。

电脑A把ARP Request报文封装好后,广播发送出去。

其他电脑收到(非电脑B)后,发现收件人是广播地址,需要接收,于是“拆快递”,把以太网包装拆除后根据Type交给ARP协议,ARP协议发现Target IP address填写的并不是自己的IP地址,把报文丢弃。

为什么其他电脑的IP地址不会是192.168.1.25呢?

在一个子网中,IP地址不能重复!

一个房间里有多个“马冬梅”,你叫一声“马冬梅”,谁知道你叫谁呢!

IP地址是否重复有个检测机制,一会再说。

电脑B收到后,同样需要接收广播报文,拆除以太网包装并根据Type交给ARP协议处理。ARP发现Target IP address填写的正是自己的尊姓大名,需要进一步处理。仔细一看,发现是一个ARP Request请求报文,明白了这是电脑A在问自己的MAC地址呢,于是,写封回信:

这是电脑B给电脑A的回复(Reply)报文,应该能看懂了。

需要注意的是,ARP Reply在以太网封装时,“收件人”不再是广播,而是单播,Destination填写的是电脑A的MAC地址,交换机只会把这个报文从连接电脑A的端口发出去,其他电脑收不到这个报文。

电脑A收到电脑B的MAC地址后,就可以把要发给电脑B的数据用以太网格式封装好发出去了(前面说过,必须要包装成以太网格式才能发出去)。

难道电脑A每次访问电脑B都要先用ARP问一下?

当然不是!电脑A收到Reply后,会把电脑B的IP地址和MAC地址对应关系写进自己的ARP表中,老化时间是20分钟。我们在电脑上打开“命令提示符”,用命令arp -a可以看自己电脑的ARP表。

Internet地址就是IP地址,物理地址就是MAC地址,类型静态表示由系统或手工指定,动态表示由ARP Reply收到并记录。

如果,我们计算出来电脑A和电脑B的子网号不同怎么办?

那就是说,俩电脑不在同一个房间。

还能怎么办,走出门呗。对,就是找网关!

如果俩电脑的子网号不同,ARP就不会再去大声问电脑B的MAC地址了。为什么?因为人家跟你不在同一个房间,你并不知道它在哪,所以你喊破喉咙它也听不见!

这时,ARP会去大声问网关(192.168.1.254)的MAC地址,得到回复后把数据封装成以太网格式发给网关(收件人destination是网关的MAC地址)。后面的事情电脑就不管了,由网关去完成。

每台电脑要访问任意一个IP地址,都会先计算对方跟自己是不是在同一个子网:

如果是,则在ARP表中查找对方IP地址所对应的MAC地址;如果不是,则在ARP表中查找网关IP地址所对应的MAC地址。

不管是查找谁,如果能找到,就直接用以太网格式封装数据发走;如果没有找到,再用ARP去问,收到Reply后写进ARP表,再用以太网封装。

ARP就是这么工作的。它是由电脑自动完成,一般操作人员并不感知它的存在。

ARP其实就是一问一答:大声问,小声答;广播问,单播答。

我们注意到,电脑A收到ARP Reply后,并没有检查到底是不是电脑B回复的。当然,像我们这样单纯的人,不会怀疑:192.168.1.25不就是电脑B吗?难道还会是别人?

有可能!这就是ARP的漏洞:假如电脑X仿冒电脑B给你回复,这样,你得到的MAC地址就是电脑X而不是电脑B的,而你依然很天真地相信这个MAC地址是电脑B的,结果,把数据都发给了电脑X!

这就是以前很常见的ARP攻击手段!现在,由于人们安全意识增强,电脑上一般都会有安全软件,ARP攻击已经比较少见了。另外,小小透露一点,IPv6会检查,不存在这个漏洞了。

还有一种特殊的ARP,如下:

细心的你已经发现了,Sender IP address和Target IP address是一样的!

这个意思是指,我要广播问一下房间里所有人,有没有人的IP地址跟我一样,也是192.168.1.20?如果没有,就不会有人理我;如果有,我就会收到Reply,那我就会提示“IP地址冲突”!

这个ARP,也叫“免费ARP”。一般当电脑的IP地址发生变化时,由电脑自动发出询问。

到现在为止,我们知道,电脑要发数据,封装成以太网格式就行了。但我们发现,以太网格式中,并没有填写IP地址的地方!

难道不需要吗?

小Q:一个广播域内电脑的数量多少对网络会有什么影响?

欢迎大家留言讨论。

arp协议属于哪一层_网络工程师(3):详解ARP协议相关推荐

  1. 2020中级计算机工程师,2020年上半年中级网络工程师报考详解

    原标题:2020年上半年中级网络工程师报考详解 软考全称叫做"全国计算机技术与软件专业技术资格(水平)考试"已经开展了十多年了,所受到的欢迎程度也是越来越高,据统计累计参加软考的人 ...

  2. 华为HCIE认证考试费多少,华为技术网络工程师技术细节详解 什么是PPP MP接口

    华为HCIE认证考试费多少,华为技术网络工程师技术细节详解 什么是PPP MP接口 华为HCIE课程中,提到的一种接口类型PPP MP接口是什么? MP是Multi-Link PPP的缩写,是将多个物 ...

  3. NCRE四级网络工程师考题详解----对等计算模型(P2P)

    对等计算模型(P2P): 在这种模型中,所有的计算机都可以当服务器.用中心服务器存放各个资源的目录.持续运转.以Napster为代表. 分布式非结构化P2P网络,没有中心服务器,采用泛洪方式,负载很重 ...

  4. NCRE四级网络工程师考题详解----LRU与LFU的区别

    最近最少使用页面置换算法(LRU)淘汰的是最长时间不使用的 最近最不常用页面置换算法(LFU)淘汰的是一定时间内未被使用的 我们假设有主存块为3,所需页面的走向为2 1 2 1 2 3 4 注意,当调 ...

  5. NCRE四级网络工程师考题详解----目录分解法

    在实现文件系统时,可采用"目录项分解法"加快文件目录检索速度.假设目录文件存放在磁盘上,每个盘块 512 字节.文件控制块有 64 字节,其中文件名占 8 字节,文件控制块分解后, ...

  6. NCRE四级网络工程师考题详解----三级索引结构

    在一个采用三级索引结构的UNIX 文件系统中,假设物理块大小为1KB,用64位表示一个物理块号.主索引表含有13 个块地址指针,其中前10 个直接指向盘块号,第11 个指向一级索引表,第12 个指向二 ...

  7. 2014计算机技术与软件专业技术资格 网络工程师考点,全国计算机技术与软件专业技术资格(水平)考试2014年下半年 网络工程师 答案详解.pdf...

    属于 CPU 中算术逻辑单元的部件是(1). (1)A.程序计数器 B.加法器 C.指令寄存器 D.指令译码器 [答案]B [解析]本题考查计算机系统基础知识. 程序计数器.指令寄存器和指令译码器都是 ...

  8. 一篇文章带你详解 HTTP 协议(下)

    文章目录,方便阅读: 一.概述(已讲) 二.HTTP 工作过程(已讲) 三.HTTP 协议基础(已讲) 四.HTTP 协议报文结构(已讲) 五.HTTP 报文首部之请求行.状态行(已讲) 六.HTTP ...

  9. 详解ARP协议(简介、主要功能、通信原理、ARP欺骗)

    详解ARP( Address Resolution Protocol, 地址解析协议) 1. 简介 ​ ARP,即地址解析协议,根据IP地址获取MAC地址的一个TCP/IP协议. arp协议 arp请 ...

最新文章

  1. mysql中增加45天三小时_MySQL查询以45天为间隔添加天数并在新列中显示输出
  2. r语言提取列名_R语言基础(2)向量|矩阵|数组|数据框|数据IO|实用函数
  3. 6.extern “c”
  4. 1.深度好文:带缓冲I/O 和不带缓冲I/O的区别与联系
  5. 汤加近海处电缆或已断裂 修复需两周以上!淡水成最紧俏资源!
  6. c语言提取图片yiq分量,图片数字水印C语言代码
  7. java学习(15):巩固练习
  8. 代码中log一直报错
  9. 从偶然的机会发现一个mysql特性到wooyun waf绕过题
  10. 机器成为家人!华为发布2025十大趋势展望...
  11. python好用的内置库_第42p,time库,Python中优秀的内置库
  12. asp.net怎样在URL中使用中文、空格、特殊字符
  13. 安装MOSS2007全过程及创建网站的过程
  14. 有哪些让人相见恨晚的Python库(一)
  15. html模板替换值,Go语言多值替换的HTML模板实例分析
  16. 小字体小行高兼容性分析及差异解决办法
  17. Apache的网页与安全优化
  18. ROS2机器人笔记22.02.17
  19. 仿豆丁flashpaper 网页flash文档播放调用文档资料收集
  20. SVN(Subversion)中文版安装教程

热门文章

  1. 【ElasticSearch】Es 源码之 SearchService 源码解读
  2. 【clickhouse】clickhouse源码 Distributed之表select流程
  3. [Spark] Yarn local-dirs are bad 导致节点处于不健康状态
  4. 【Kafka】kafka-eagle几个指标含义
  5. 【Flink】Flink NoSuchFieldError BIND_PORT
  6. 【aviator】aviator 报错 EOF while reading string at index
  7. 【Hbase】命令行load数据文件到Hbase
  8. ansys里面自带chemkin_Chemkin-Pro: Chemistry Effects Predicting Simulation Software | Ansys
  9. 深度分析Spring中的构造器注入
  10. 后端接口都测试什么?怎么测?