Introduction to Computer Networking学习笔记(五):ARP协议(Address Resolution Protocol)
原贴地址: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)相关推荐
- Introduction to Computer Networking学习笔记(十五):Queue Model 包交换中的缓冲模型
本章知识点比较零散,因此一篇文章进行总结,并且不具有连贯性,仅记录自己认为有价值的内容. 将较大的包拆分为小包进行传输,可以减小端对端延迟,原因如下图: 数据传输时,突发大量的数据包会增加延迟,简单周 ...
- ARP(Address Resolution Protocol)地址解析协议初识
ARP址解析协议是根据IP地址获取物理地址的一个TCP/IP协议.它工作在OSI七层模型的中第二层--数据链路层. 使用ARP地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址 ...
- WebRTC学习笔记五 SDP(Session Description Protocol)
SDP里面内容虽然很多,但是条理很清楚.SDP值为字符串,通过换行符生成一行一行的SDP报文,所有行可分为三类:全局行.音频行.视频行 v - Version,版本,版本,应等于0 o - Origi ...
- TCP/IP学习笔记:TCP/IP协议介绍
TCP/IP的通讯协议 这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础.TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.2 ...
- TCP/IP协议学习笔记(一)IP协议
IP相当与OSI模型中的第三层,网路层. 网络层的主要作用是"实现终端节点之间的通信". IP大致分为三大作用模块,它们是IP寻址.路由(最终节点为止的转发)以及IP分包与组包. ...
- 华清远见fs4412开发板学习笔记(五)
fs4412开发板学习笔记(五) 作业1: 输入10个整数,按从小到大的顺序输出(选择排序) 每轮排序在未排序的集合中找到(最小/最大),将找到的数与未排序的 第一个数交换位置. 5 4 3 2 1 ...
- python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...
- Ethernet/IP 学习笔记五
Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...
- StackExchange.Redis学习笔记(五) 发布和订阅
StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...
- 吴恩达《机器学习》学习笔记五——逻辑回归
吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...
最新文章
- 剑指offer:机器人的运动范围
- STM32开发 -- md5sum命令
- linux基础篇-系统中进程相关概念
- img title属性值利用#13换行
- c语言增强图像直方图均衡化,图像直方图均衡化增强opencv与C语言版
- java中怎么表示数组中的某个值_简易Java(12):如何高效检查一个数组中是否包含某个值?...
- Linux环境变量总结
- java中使用lua操作redis
- 大神如何一招完美解决Hadoop集群无法正常关闭的问题!| 博文精选
- 数据结构—链表—单链表应用-增序排列节点
- 一生都学不完的计谋(经典)
- 成像反了_宋国荣, 窦致夏:快速超声 C 扫描成像中的信号频域分析法及其应用...
- 软件_mongo占用磁盘空间过大
- QChart修改标题颜色,修改X轴Y轴字体颜色
- 人生苦短,聊聊Python的那些特点
- 42条微信营销小技巧!
- CSDN写文章MarkDown用到的表情包收集(转自Github)
- VScode 显示垂直标尺
- http的安全方法和幂等性
- 【转】国内超级计算机发展情况简介