计算机网络-4-2-ARP地址解析协议以及IP数据报不可变组成部分
地址解析协议ARP
在实际的应用中,我们会经常遇见这样的一个问题:我们已知一个机器(主机或者路由器的),我们怎么获取相应的硬件地址?,地址解析协议就是用来解决这个问题的。
ARP协议的作用:

- 由上图可知:
- 首先ARP协议划归为网络层,但是ARP协议是为了从网络层使用的IP地址,解析出在数据链路层的MAC地址,因此有的书也会把ARP协议划分到数据链路层。
ARP协议的要点
网络层使用的是IP地址,但在实际的链路层传输数据帧我们使用的是MAC地址。在一个网络上可能会有新的主机加入或者旧的主机撤去。除此之外更换网络适配器也会导致MAC地址发生变化。ARP地址解析协议解决这个问题的方法是在主机ARP高速缓存中存放一张IP地址到MAC地址的映射表,而且这个表还要动态更新(添加或者删除)
每个主机都有一个ARP高速缓存(ARP cache),里面有着本局域网的各个主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。那么主机该怎么知道这些地址呢?
- ARP进程在本局域网内广播发送一个ARP请求分组。ARP请求分组的主要内容是:我的IP是209.0.0.5,我的MAC地址为00-00-C0-15-AD-18,我想知道IP地址为209.0.0.6的MAC地址为多少?
- 在本局域网所有的主机运行的ARP进程都会收到这条此ARP请求分组。
- 在主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机主动发送一个ARP响应分组,同时在这个ARP响应分组写入自己的MAC地址。由于其他主机的IP地址和ARP请求要查询的IP地址不一样,因此都不会理会这个ARP请求分组。
*
- 在主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机主动发送一个ARP响应分组,同时在这个ARP响应分组写入自己的MAC地址。由于其他主机的IP地址和ARP请求要查询的IP地址不一样,因此都不会理会这个ARP请求分组。
- 注意:
- ARP请求分组是广播,但是ARP响应分组单播,就从源地址发送到一个目的地址。
- 主机A收到这个ARP响应分组后,就在自己本地的ARP缓存中写入主机B的IP地址到MAC地址的映射。同理,当主机B在接收到这个主机A发送过来的ARP请求分组时也会在主机B本地的ARP缓存中写入主机A的IP地址到MAC地址的映射。
- 可见。ARP高速缓存是非常的有用,如果不使用ARP高速缓存,那么任何一台主机只要进行一次通信,就必须要使用ARP协议广播ARP请求分组,只会导致网络上的通信量大大增加。ARP把已经得到的地址映射写入高速缓存中,这样该主机下次再和具有同样目的主机进行通信的时候,可以直接从缓存中获取到硬件地址。
- ARP对保存在缓存中的每一个地址映射项都设立了一个生存周期(TTL),凡是超过TTL项都会被从高速缓存中清除掉,,然后会重新广播获取最新的IP地址与MAC地址映射记录。
ARP协议解决的是同一个局域网内的主机或者路由器IP地址和硬件地址之间的映射关系。如果要找的目标主机和源主机不在同一个网段内,就无法解析出另一个局域网上主机的MAC地址。
ARP的四种经典情况

- 发送方是主机(H1),要把IP数据报发送到同一个网络的另一台主机(H2),这时候H1发送一个ARP请求分组报文找到目的主机H2的MAC地址.
- 发送主机是(H2),要把IP数据报发送到另一个网络上的主机(H3/H4),这时(H1)发送一个ARP请求分组在局域网1内广播,找到局域网1 的路由器R1的MAC地址,剩下的工作交给路由器R1来完成。R1要做的是3和4.
- 发送方是路由器(R1),要把数据报发送给与R1连接在同一个网络上的主机(H3),这时候路由器R1会发送一个ARP请求分组在局域网2内广播,找到主机(H3)的MAC地址。
- 发送方是路由器R1,要把IP数据包报转发到网络3上的一台主机,如(H4),由于H4主机与R1路由器不是在同一个网段内,这时候路由器R1会发送一个ARP请求分组给路由器R2,剩下的步骤和3类似。
IP数据报的格式
- IP数据报的格式

- IP数据报长度为4个字节,也就是32位
- IP数据报是由报首和数据两部分组成。
- 首部包括20个字节的固定长度和可选字段
- (1:)版本占4位。指的是IP协议的版本。通信双方必须要使用相同的IP协议版本。目前广泛使用的是IP协议版本是IPV4和和IPV6
- (2:)首部长度占用4位,可以表示最大的1111(15)
- (3:)区分服务占用8位,用来获取更好的服务,这个字段只有在使用区分服务的时候才起作用。
- (4:)总长度占用16位,指的是首部和数据之和的长度。单位为字节,总长度字段为16位,因此数据报的长度为(2^16)-1=65535字节,但在现实生活中确实很少遇到。
- 首部包括20个字节的固定长度和可选字段
- 在网络层的下面数据链路层,规定了一个数据帧中的数据字段最大传送单元MTU,当一个IP数据报文封装成链路层的帧的时候,此数据报的长度,一定不能超过数据链路成所规定的MTU值。最常用的以太网规定其MTU最大值为1500字节。如果传输的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。
- 虽然使用尽可能长的IP数据报会使得传输效率更高一些(因为内一个IP数据报中首部长度占数据报总长度的比例小一些),但数据报短些也有好处。每一个IP数据报越短,路由器转发的速度越快。为此,IP协议规定,在互联网中所有的主机和路由器,必须能够接受长度不能超过576字节的数据报,这是假定上层交下来的数据长度有512字节(合理的长度),加上最长部分的IP数据报首部60字节再加上4个字节的富余量,就得到了576字节。当主机需要发送576字节的数据报的时候。应当需要先询问目标主机能否接受所要发送的数据报长度,否则,就要进行分片。
- (5:)标识占16位,IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就+1 ,但是这个并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题,当数据报由于长度超过网络的MTU而必须分片的时候,这个标识的字段的值就会被复制到所有的数据报片的标识字段中,相同标识字段的值使得分片后最后能够正确的重装为原来的数据报。
- (6:)标志(Flag)占3位,只有两位有意义
- 最低位MF(more fragment):当MF=1时候表示后面还有分片,当MF=0表示这已经是最后一个数据报片。
- 中间位DF(don't fragment)意思之不能再分片,只有当DF=0才允许分片。
- (7:)片偏移:占13位,较长的分组在分片后,某片在原分组中的相对位置,也就是说,相对与用户数据字段的起点,该片从何时开始。片偏移以8个字节为便宜单位,也就是说:每个分片的长度一定是8字节的整数倍。
- (8:)生存周期TTL:占8位,表明这是数据报在网络中的寿命,称之为跳数限制。目的就是为了防止在路由器之间无限转圈导致白白耗费网络资源。每经过一个路由器,TTL就-1,当TTL=0,路由器就会丢掉这个IP数据报,一般TTL默认为16。
- (9:)协议,占8位,协议字段指的是此数据报所携带的数据是使用的何种协议,以便于目的主机的IP层知道应将数据部分上交给哪一个协议来处理。
- (10:)首部校验和:占16位,这个字段只检验数据报的首部,不包括数据本身部分,这是因为数据报每经过一次路由器,路由器都会重新计算生存周期,标志,偏移量等等,不检验数据部分可以减少路由器的工作量。除此之外,为了减少校验工作量,IP数据报的首部校验和并不会使用CRC检验码,而是采用从下面简单的校验方式:

- (1)在发送方,先把IP数据报首部划分为许多16位子的序列,并把检验和字段设置为0,用反码算数()把所有16位字相加后,将得到的和的反码写入检验校验和中,接收方收到数据报之后,把首部的所有16位字在使用反码算相加一次,将得到的和取反码,即得到接收端检验和的计算结果。若首部未发生变化,则检验和必然为0,于是就保留这个数据报,否则认为出错,就直接丢弃。
- (11:)源地址 占32位
- (12:)目的地址 占32位
- 以上就是IP数据报不可变组成部分。
计算机网络-4-2-ARP地址解析协议以及IP数据报不可变组成部分的更多相关文章
- 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议
4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...
- ARP地址解析协议
ARP地址解析协议:为IP地址到相应的硬件地址之间提供动态映射. 下面图为例说明地址解析协议的详细工作流程. 结合图中的序号进行说明. client通过FTP协议连接server时,首先解析器会把主机 ...
- ARP地址解析协议原理
概述 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化. 对于IPv4来说,我们使用ARP地址解析协议来完成IP地址 ...
- 《TCP/IP作品详细解释2:达到》注意事项--ARP:地址解析协议
Net/3于ARP和实施密切与路由表相关联的,下图显示了我们的叙述性说明ARP使用样品. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVE9ERDkxMQ ...
- IP地址、MAC地址、ARP地址解析协议
互联网中一台主机要和另一台主机实现通信首先需要知道彼此在互联网中的位置,主机在互联网中的位置是通过ip地址标记的,当找到ip地址后,再通过端口号标识运行在主机中的进程从而实现通信. IP地址: IP地 ...
- ARP:地址解析协议
ARP是地址解析协议,简单语言解释一下工作原理.1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系.2:当源主机要发送数据时,首先检查ARP列表中 ...
- arp:地址解析协议(Address Resolution Protocol)(来自维基百科)
地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在I ...
- 【网络协议】ARP地址解析协议
地址解析协议ARP 在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址.而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址.这就导致在以太 ...
- 【网络基础】ARP地址解析协议
ARP(Address Rssolution Protocol) 地址解析协议 用于将IP地址解析为MAC地址. MAC地址是设备的物理地址,是被分配给每一个网络接口卡的全球唯一序号. 全球唯一:理论 ...
随机推荐
- C#---OleDbHelper
/// <summary> /// OleDbServer数据访问帮助类 /// </summary> public sealed class OleDbHelper { pu ...
- IO流(File类--递归--过滤器--IO字节流--IO字符流--Properties集合--缓冲流--转换流--序列化流--打印流)
一.File类 1.1概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.1.1相对路径与绝对路径 相对路径从盘符开始的路径,这是一个完整 ...
- 微信小程序的button按钮设置宽度无效
亲,你是不是也遇到了微信小程序的button按钮设置宽度无效.让我来告诉你怎么弄 方法1. 样式中加入!important,即:width: 100% !important; wxss代码示例 1 2 ...
- MySQL 源码安装规范
一 .目录规划 MySQL 的目录包括 base 目录和 data 目录,base 目录存放软件文件,每个版本的软件单 独一个目录,例如/usr/local/mysql/mysql5.6.19.dat ...
- Python - 面向对象编程 - self 参数
为什么要讲 self 参数 class PoloBlog: def __init__(self): ... def say(self): ... 在类里面,所有实例方法都需要加 self 参数,且排在 ...
- 7-31 堆栈操作合法性 (20 分) PTA
7-31 堆栈操作合法性 (20 分) 假设以S和X分别表示入栈和出栈操作.如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该 ...
- BFD协议简介
1. 背景 双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测.监控网络中链路或者IP路由的转发连通状况. 为了保护关键应 ...
- 斐波那契数(Java)
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F(0) = 0,F(1) = 1 F(n) = F(n ...
- C# 反射 + Quartz,实现流程处理
场景: 前不久,公司里项目经理要求我实现流程处理,比如,用户可以定义一个定时任务,每周一查看报表.定时任务很简单,用Quartz可以实现,但是用户自己选择报表就比较麻烦,因为系统的不同模块的生成报表的 ...
- CodeForce-785B Anton and Classes(简单贪心)
Anton and Classes Anton likes to play chess. Also he likes to do programming. No wonder that he deci ...
