原贴地址:https://blog.csdn.net/djl806943371/article/details/88751893

ARP协议是什么:

在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,链路层接收到上层即网络层提供的数据中,只包含目的主机的IP地址。ARP要做的就是根据网络层地址(IP地址)来找寻链路层地址(MAC地址)。

两台设备通信示意图:

对上图中的过程进行简单解释:当设备A想给设备B发送数据时,以HTTP的GET请求为例,应用层将GET请求封装发送给传输层,传输层添加TCP包头后发送给网络层,网络层添加IP包头后发送给链路层,链路层通过子网掩码获知设备B与自己不在同一个network下,需要穿过网关与B通信。那么此时链路层添加链路层包头,链路层包头的destination IP为网关左侧网卡IP即192.168.0.1,destination MAC地址为网关左侧网卡地址即0:18:e7:f3:ce:1a。到达网关右侧时,链路层包头改变,destination IP改为设备B的IP,destination MAC地址为B的MAC地址。

以上过程清晰明了,但是存在一个问题:设备A知道自身IP及MAC地址,知道网关IP,但是如何获知网关左侧网卡的MAC地址。这就是ARP要做的事情。

ARP实现过程:

以下图为例:当client需要它所在network内某一IP对应设备的MAC地址时,首先查看自己缓存的IP、MAC映射表,如果能够查询到,则直接发送到对应MAC地址,如果查询不到,则在整个network上发送广播,广播内容包含自己的IP、MAC地址以及目标IP地址,network内所有设备都会收听到广播,所有收到广播的设备都会更新自己的缓存中设备A的IP、MAC地址,同时,发现广播中目的IP与自身IP一致的设备(该例中为网关)会回复发送广播的设备A自己的MAC地址,设备A获知并更新缓存的网关IP及MAC地址。每台设备的缓存都有有效期,超过有效期将会清除缓存。

一条ARP packet内容(如下图):其中Hardware标明packet发送者链路类型,Protocol标明packet发送者网络协议类型,length标明MAC及IP地址长度,Opcode标明该packet是请求还是回复,下面则是自身IP、MAC地址及目标IP、MAC地址。所有内容以大端顺序存储。

一条请求广播示例:

一条回复示例:

ARP的优点:

要创建自身除外某台设备的IP、MAC映射的唯一方式是收到这台设备的广播或者回复,所以如果某台设备损坏或者退出了这个network群,当过一段时间network内所有设备的缓存过期(几十分钟到几小时)之后,这台设备将在这个network群中消失。这样可以更轻松的debug和寻找问题。

特别注意:

在最初的协议中,回复是单播,但是现在广播也很常见,这样可以更方便的让所有其他设备更新缓存的映射表,并且network中会有很多无端的ARP请求广播,请求不存在的映射,这样也可以方便地让其他所有设备更新映射表。

Introduction to Computer Networking学习笔记(五):ARP协议(Address Resolution Protocol)相关推荐

  1. Introduction to Computer Networking学习笔记(十五):Queue Model 包交换中的缓冲模型

    本章知识点比较零散,因此一篇文章进行总结,并且不具有连贯性,仅记录自己认为有价值的内容. 将较大的包拆分为小包进行传输,可以减小端对端延迟,原因如下图: 数据传输时,突发大量的数据包会增加延迟,简单周 ...

  2. ARP(Address Resolution Protocol)地址解析协议初识

    ARP址解析协议是根据IP地址获取物理地址的一个TCP/IP协议.它工作在OSI七层模型的中第二层--数据链路层. 使用ARP地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址 ...

  3. WebRTC学习笔记五 SDP(Session Description Protocol)

    SDP里面内容虽然很多,但是条理很清楚.SDP值为字符串,通过换行符生成一行一行的SDP报文,所有行可分为三类:全局行.音频行.视频行 v - Version,版本,版本,应等于0 o - Origi ...

  4. TCP/IP学习笔记:TCP/IP协议介绍

    TCP/IP的通讯协议 这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础.TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.2 ...

  5. TCP/IP协议学习笔记(一)IP协议

    IP相当与OSI模型中的第三层,网路层. 网络层的主要作用是"实现终端节点之间的通信". IP大致分为三大作用模块,它们是IP寻址.路由(最终节点为止的转发)以及IP分包与组包. ...

  6. 华清远见fs4412开发板学习笔记(五)

    fs4412开发板学习笔记(五) 作业1: 输入10个整数,按从小到大的顺序输出(选择排序) 每轮排序在未排序的集合中找到(最小/最大),将找到的数与未排序的 第一个数交换位置. 5 4 3 2 1 ...

  7. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  8. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

  9. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  10. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

最新文章

  1. 剑指offer:机器人的运动范围
  2. STM32开发 -- md5sum命令
  3. linux基础篇-系统中进程相关概念
  4. img title属性值利用#13换行
  5. c语言增强图像直方图均衡化,图像直方图均衡化增强opencv与C语言版
  6. java中怎么表示数组中的某个值_简易Java(12):如何高效检查一个数组中是否包含某个值?...
  7. Linux环境变量总结
  8. java中使用lua操作redis
  9. 大神如何一招完美解决Hadoop集群无法正常关闭的问题!| 博文精选
  10. 数据结构—链表—单链表应用-增序排列节点
  11. 一生都学不完的计谋(经典)
  12. 成像反了_宋国荣, 窦致夏:快速超声 C 扫描成像中的信号频域分析法及其应用...
  13. 软件_mongo占用磁盘空间过大
  14. QChart修改标题颜色,修改X轴Y轴字体颜色
  15. 人生苦短,聊聊Python的那些特点
  16. 42条微信营销小技巧!
  17. CSDN写文章MarkDown用到的表情包收集(转自Github)
  18. VScode 显示垂直标尺
  19. http的安全方法和幂等性
  20. 【转】国内超级计算机发展情况简介

热门文章

  1. Leetcode 147 Insertion Sort List
  2. treeview实例
  3. android 屏幕宽高
  4. ElasticSearch全文搜索引擎之索引和文档的API操作详解
  5. 【Hoxton.SR1版本】Spring Cloud Gateway网关初体验
  6. redis分布式锁学习总结
  7. Java集合Collection之实现原理解读(ArrayList)
  8. Java多线程之FutureTask
  9. 当纺织遇上阿里云,数学博士钻进车间要让企业更高效
  10. 13. 使用类 【连载 13】