引子:众所周知,在互联网上进行相互通信的设备必须有一个IP地址才行。假设,现在两个有IP地址的设备要进行通信,用专业一点的术语来说就是要互相发送网络包,要知道网络包是要在实实在在的物理设备上传输的(不管是网线也好还是wifi也好),但是物理层的传输是不认识IP地址,它只认识MAC地址,所以两个有IP的设备要进行通信还要依赖于底层的MAC地址,那如何根据IP地址来找到对应设备的MAC地址呢?这个就是下面要讲的ARP协议的功能。

1. 什么是ARP协议

ARP协议的全名是Address Resolution Protocol。简单的说ARP协议的功能就是根据目标设备的IP地址找到目标设备的MAC地址。既然是一个协议,那肯定有其独特的结构,来一起看一下ARP分组的组成:

arp包

从上图中其实已经可以看清楚ARP协议的组成结构了,下面还是要稍微解释下ARP协议中每一个字段的意义:

  • 硬件类型:该字段2个字节,用于表明ARP分组是跑在什么类型的网络上的,例如如果是我们最常用的以太网值是1。
  • 协议类型:该字段2个字节,用于表明使用ARP分组的上层协议是什么类型,例如如果是我们最常用的IPv4协议值是32。
  • 硬件地址长度:该字段1个字节,用于表明物理地址的长度,因为ARP可以跑在任何物理网络上,所以物理地址的长度不一定都是一样的,所以这里要把物理地址的长度也用一个字段来记录。如果是以太网则长度是6(实际上就是MAC地址的6个字节)。
  • 协议地址长度:该字段1个字节,用于表明逻辑地址的长度,为什么要把逻辑地址长度用一个字段的记录原因和上面的一样。如果是IPv4协议这个值是4。
  • 类型:该字段2个字节,用于表明该ARP分组的类型。现在已经有的类型只有2中:ARP请求(值是1),ARP应答(值是2)。
  • 发送端硬件地址:该字段的长度是可变的,具体的长度依赖于硬件地址的值。
  • 发送端协议地址:该字段的长度是可变的,具体的长度依赖于协议地址的值。
  • 接收端硬件地址:该字段的长度是可变的,具体的长度依赖于硬件地址的值。但该字段是否有值则依赖于ARP分组的类型,如果是请求分组是没有值的,如果是响应分组是有值的。
  • 接收端协议地址:该字段的长度是可变的,具体的长度依赖于协议地址的值。

2. ARP工作原理

在解释ARP工作原理之前,先解释一个概念,之前已经说过真正的数据包是要在物理设备上传输的,而直接在物理设备上传输的也不是ARP分组,ARP分组还要先封装成数据链路帧然后物理层才会将数据链路帧发送出去,下面来看一下数据链路帧的结构:

arp分组

ARP分组就是被封装到了数据链路帧的数据字段中了,但是数据链路真中不仅仅能是传输ARP分组,还能传输IP数据包等上层协议,那数据链路帧如何知道数据字段中的数据到底是啥?实际上就是通过类型字段来区分的,如果是ARP分组,则类型字段的字就是0x806。

为了方便起见,在介绍ARP协议的工作原理的时候会按照下图来解释,图中省略了一些不必要的字段:

数据链路帧

step1:当pc1要和pc2通信的时候,如果pc1的缓存表中有pc2的记录,则直接将pc2的mac地址放入目的mac地址中,直接发送相关的数据包。如果pc1的ARP缓存表中没有pc2的记录,就会发起一个ARP请求。

step2:pc1会将自己的IP地址和MAC地址填入ARP请求分组的源字段中,同时将pc2的IP地址填入ARP请求分组的目的IP字段中,并且将目的MAC地址置空(即设置成全为0)。 同时将pc1的MAC地址填入到数据链路帧的源MAC字段中,将数据链路帧的目的MAC字段置成广播地址(即全为1)。这样同一个网络中的所有主机都会收到这个ARP请求分组。

step3:所有接收到ARP请求分组的主机都会对该ARP请求分组进行处理,如果ARP请求分组中的IP地址和自身的不匹配则直接抛弃,除了pc2。

step4:pc2收到了ARP请求分组,就知道了是想要自己的MAC地址,因此就会封装一个ARP响应分组用于响应这个ARP请求分组。 pc2会将自己的IP地址和MAC地址填入到ARP响应分组的源IP和源MAC字段中,同时将pc1的IP和MAC填入到ARP响应分组的目的IP和目的MAC字段中(pc1的信息可以在pc1发出的ARP请求分组中得知)。同时将pc2的MAC地址和pc1的MAC地址填入到数据链路帧的源MAC和目的MAC字段中。最后将ARP响应分组以单播的形式发出(因为目的MAC是知道的所以只需要用单播即可)。 同时pc2还会做一件很重要的事情,就是将pc1的MAC和IP的信息保存到pc2的ARP缓存表中,至于为什么要这么做大家应该都可以想到。

step5:pc1收到了ARP响应分组之后就知道pc2的MAC地址了这样pc1就可以和pc2发起通信了。同时pc1也会将pc2的MAC和IP的信心保存到pc1的ARP缓存表中。

上面说了这么多,实际上总结一下就是一句话:ARP请求采用广播发送, ARP响应采用单播发送。

3. 揭开真实ARP分组的面纱

关于ARP协议说了这么多了,那真是情况下ARP协议长到底长什么样呢?毕竟看过真实的东西要比仅看看文字描述理解的更深入,所以我就用wireshark在我本机上抓了一些包。让我们来看看ARP协议到底长什么样:

这是我本机的网络情况,下面的ARP分组就是基于本机和路由器的一个交互:

这是路由器发来的ARP请求分组

路由器发来的ARP请求分组

这是本机响应给路由器的ARP响应分组

本机响应给路由器的ARP响应分组

根据上面三张图片的内容和之前讲的应该很容易对照起来,也可以发现实际情况下ARP的一个流程和之前说的也是一致的。通过抓包可以对ARP分组有一个更具体的映像。

4. 总结

计算机网络的知识还是很有必要要了解一下的,尽管可能和平时写代码的关联不大。在学习计算机网络的时候一些资料将的还是很抽象的,所以要更好的理解可能的话最好还是要动手抓包看看实际情况下网络中传输的到底是什么,资料上说的数据包到底是什么。

该篇文章是之前写的一些技术文章中的一篇,后面陆陆续续会迁移到这里,希望可以帮助到一些乎友

arp协议的主要功能是_计算机网络之ARP协议相关推荐

  1. arp协议的主要功能是_程序员需要掌握的一些网络协议汇总

    今天我们来看下各层的网络协议,虽然开发过程中写代码不会直接涉及,但是理解好网络协议对编程和理解系统的整个运行过程是非常有帮助的哦. 一.应用层协议 1.HTTP HTTP(HyperText Tran ...

  2. arp协议的主要功能是_【思唯网络学院】ARP理论知识详解(一)

    一.简介 ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为以太网MAC地址的协议. ARP安全是针对ARP攻击的一种安全特性,它通过一系列对ARP表项学 ...

  3. 计算机网络——ICMP/IGMP协议原理

    摘要 ICMP全称是Internet Control Message Protocol,也就是互联网控制报文协议.网络包在复杂的网络传输环境里,常常会遇到各种问题.当遇到问题的时候,总不能死个不明不白 ...

  4. IKE协议的重要功能有哪些?

    IKE协议的重要功能有哪些?对于网络工程师们来说,协议一定是不陌生的,今天要来给大家介绍的是IKE协议,也就是因特网密钥交换协议. ​ IKE协议是什么? IKE协议是一份符合因特网协议安全(IPSe ...

  5. tcp协议的主要功能是什么_计算机网络 | 一文搞懂什么是TCP/IP协议

    什么是TCP/IP协议? 计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件, ...

  6. tcp协议的主要功能是什么_前端要知道的网络知识一:TCP/IP 协议到底在讲什么...

    你之所以不知道那套书在讲什么,是因为你还没有认识到网络协议有什么用,怎么用,以什么形式在使用,网络协议的概念很简单,就几句话,你只知道网络协议的概念,只知道很多大神都推荐这套书,都强调网络协议的重要性 ...

  7. 计算机网络实验arp协议分析,计算机网络ARP地址协议解析实验报告

    计算机网络ARP地址协议解析实验报告 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 计算机网络实验报告.实验目的:1. 掌握ARP协议 ...

  8. snmp是什么层协议_计算机网络基础:TCP/IP协议相关知识笔记?

    1.TCP/IP特性 逻辑编址:每一块网卡会在出厂时由厂家分配了唯一的永久性物理地址.针对Internet,会为每台连入因特网的计算机分配一个逻辑地址也就是IP地址. 路由选择:专门用于定义路由器如何 ...

  9. 【计算机网络】ARP协议工作原理

    地址解析协议ARP 一 发送数据的过程 在学习ARP协议的工作原理之前,我们需要先知道为什么需要ARP协议,它在数据传输过程中有怎样的作用. 以下是计算机网络中发送数据的一个大致过程. 首先要知道,源 ...

最新文章

  1. 获得服务器硬件信息(CPUID、硬盘号、主板序列号、IP地址等)
  2. Identity Mappings in Deep Residual Networks
  3. 她穿着由自己17封拒稿信做成的裙子,通过了博士论文答辩!
  4. 解决idea修改html、js、css后,浏览器不能同步加载
  5. 计算机维修与护理论文,计算机维修与维护方面论文选题 计算机维修与维护论文题目怎样定...
  6. 环信php创建群组,【PHP】接入环信创建群组和IM用户
  7. 最简单的WIN7内核PE系统
  8. 记录日常收支,查看每个账户收支明细
  9. 一位全减器逻辑电路图_一种一位全减器电路的制作方法
  10. 统一认证 ldap mysql_Centos7 Ldap统一认证部署
  11. 手机端 H5 语音识别转化为文字 demo
  12. ProcessOn 在线作图,真香指南
  13. 如何在python同一行内输入若干个数?
  14. java栈里储存的是什么_JVM中的堆和栈到底存储了什么
  15. 2020 DEMO CHINA首次进入成都,解码智慧经济新时代
  16. 什么是银行的表内表外业务?
  17. OK1028A-C实现路由器功能
  18. HTML5重要知识点
  19. java 格式化 浮点数_如何在javascript中格式化浮点数?
  20. 公众号多题库查题系统

热门文章

  1. 7723java梦游游戏,渠道SDK登录
  2. 七年级计算机与信息安全教案,计算机与信息安全教案.docx
  3. Leetcode每日一题:767.reorganize-string(重构字符串)
  4. Leetcode每日一题:67.add-binary(二进制求和)
  5. 机器学习-吴恩达-笔记-11-异常检测
  6. 3种方法实现http虚拟主机
  7. 公有链、私有链、联盟链、许可链,这些区块链又分别代表着什么意思?
  8. Python2读取Excel文件时候文件名称是中文的时候处理
  9. mpvue返回上一个页面_Mpvue+Vant-Weapp开发小程序遇坑之解决系列
  10. Linux Redhat下安装Jenkins