一 概述

我们知道,IP协议是用来在不同的物理网络之间数据传输的。要在不同的网络之间数据传输,至少须要将IP协议所用的地址转换成特定网络所使用的物理地址。

一般来说。就是将IPv4地址转换为mac地址。要想与一个特定的设备进行数据交换,光知道它的IP地址是不够的。还须要知道它的物理地址。

而地址解析协议(ARP)就是来完毕这个工作的,它能将IPv4地址转换为设备的硬件地址。须要注意的是。ARP仅仅能转换IPv4的地址。IPv6须要使用另外的协议进行转换。

另外须要说明的是,网络层和数据链路层地址并非由同一个组织进行分配的。

对于硬件地址来说。是由生产它的厂家进行分配的。而且一旦生产出来,物理地址永远不会改变。

而IP地址是由使用者或者管理员分配的。而且是能够更改的。我们知道IP数据包是封装在数据链路层的帧里的。

当一个包括IP数据包得以太网帧数据在一个局域网内传输时。是通过48bit的以太网地址(硬件地址)来决定目的port的。

ARP提供动态的地址解析。就是说,解析的过程是自己主动的、自适应的,当物理地址改变(可是IP地址没变)的时候,比方更换网卡,ARP仍然可以正确的通过IP地址找到相应的网卡。而不须要进行额外的配置。


二 一个样例
当我们使用网络的时候。比方打开浏览器,浏览一个网页,我们使用的主机须要推断如何与我们感兴趣的站点server主机建立连接。第一个须要推断的就是server主机是处于本地还是非本地。换句话说。是在同一个局域网还是处于另外的网络。

假设处于同一个局域网。仅仅须要ARP协议就可以訪问。否则,须要通过路由器进行连接。

当两台主机处于同一网段,或者说处于同一局域网。那么用ARP能够直接进行訪问(direct delivery)。我们通过一个样例来说明直接訪问要经历哪些步骤。

比方我们在浏览器里输入http://10.0.0.1。将会发生下面步骤:
1.应用程序(浏览器)获取目的IP地址,这里是10.0.0.1。
2.应用程序请求TCP协议建立与10.0.0.1的连接
3.TCP发送连接请求给10.0.0.1。

4.我们这里如果10.0.0.1和本地主机处于同一局域网,因此请求连接数据能够直接发送而不用经过路由器。
5.这个时候,须要找到10.0.0.1相应的主机。就必须将该IP地址转换为相应的物理地址。这就是ARP的作用。ARP使用广播的方式数据传输,假设局域网不支持广播。那么须要用到更加复杂的协议,当然,这样的情况非常少见。
6.ARP给每一个连接在这个局域网的主机发送ARP请求数据。ARP请求数据里面包括目的IP地址,也就是10.0.0.1。该请求的意思是,假设你的IP地址是10.0.0.1,那么把你的mac地址发给我。

7.如上图所看到的,本地主机广播ARP请求给全部主机,仅仅有具有目的IP地址的主机会做出应答。应答数据中包含了自身的mac地址。

应答不再採用广播方式,而是单播给发送请求的主机。与此同一时候,全部收到ARP请求的主机,都能在请求数据中得到发送请求的主机的IP地址和相应的mac地址。他们会将其存在自己的缓存中,以供兴许使用。

8.收到应答后。TCP的连接请求信息如今就行发送了,由于如今可以找到目的主机在哪儿了。

9.发送数据至目的主机。

点对点链路(PPP)不使用ARP。在设置这些链路时,必须告知内核链路每一端的IP地址。因此像以太网这种硬件地址并不涉及。
三 ARP快速缓存
ARP高效执行的关键是因为每一个主机上都有一个ARP快速缓存。这个快速缓存存放了近期IP地址到硬件地址之间的映射记录。

快速缓存中每一项记录的生存时间一般位20分钟,開始时间从被创建时開始。

四 ARP帧格式

在以太网上解析IP地址时。ARP请求和应答分组的格式如上图所看到的。一開始的14字节是以太网头部,在上一章介绍数据链路层时讨论过。

剩余的部分是由ARP协议所定义的。ARP数据部分的前8个字节是通用的,后面的部分是特定的。这里是针对IP地址和以太网物理地址的转换。其实,除此之外,ARP还能够用于其它类型的网络。假设换了其它类型。这里的发送方和接收方的硬件地址和IP地址都要做出对应的更改。所以说这个部分是特定的,而前面的Hard Type字段到Op字段8个字节是通用的。不管转换什么样的网络类型,都是这8字节。


在以太网帧头部的两个部分各自是目的地址字段和源地址字段,在发送ARP请求时,目的地址字段要填充为全1,也就是广播地址。

类型或长度字段(Length/Type)为0x0806,表示这是ARP协议数据。

Hard Type字段表示硬件地址类型,值为1表示以太网地址。Prot Type表示要解析的协议地址类型,值为0x0800表示IPv4地址。Hard Size字段和Prot Size字段分别表示硬件地址和协议地址的长度,这里各自是6和4.相应的时mac地址6字节。IP地址4字节。Op字段指出4种操作类型。1表示ARP请求。2表示ARP应答,3表示RARP请求,4表示RARP应答。RARP是ARP的逆协议。如今已经非常少用到了。接下来的各自是发送端的硬件地址、协议地址,目的端的硬件地址、协议地址。

大概就是这样了。

五 ARP代理(Proxy ARP)
代理ARP就是通过使用一个主机(一般是一个特定配置的路由器),来作为指定的设备对还有一设备的ARP请求作出应答。 举个样例


PC1和PC2尽管属于不同的广播域。但它们处于同一网段中,因此PC1会向PC2发出ARP请求广播包。请求获得PC2的mac地址。因为路由器不会转发广播包,因此ARP请求仅仅能到达路由器,不能到达PC2。当在路由器上启用ARP代理后,路由器会查看ARP请求。发现IP地址172.16.20.100属于它连接的还有一个网络,因此路由器用自己的接口mac地址替换PC2的mac地址,向PC1发送了一个ARP应答。

PC1收到ARP应答后。会觉得PC2的mac地址就是00-00-0c-94-36-ab。不会感知ARP代理的存在。

正是因为这个原因,代理ARP用的不多,而且假设可能,尽可能避免使用它。


六 Gratuitous ARP 和地址冲突检測(ACD)
Gratuitous ARP的意思就是主机向自身IP地址发送ARP请求。这样做得目的有两个:
(1)这样能够让主机知道自身的IP地址有没有已经被其它主机占用。

显然,假设已经被其它主机占用的话。返回的mac地址和自身mac地址不一致。

(2)假设主机刚好更换了网卡,那么使用Gratuitous ARP就能让广播域中其它的主机更新正确的IP地址到mac地址映射。由于其它主机的ARP缓存中存储的可能是更换网卡之前的mac地址,因此须要更新。

TCP/IP具体解释学习笔记——地址解析协议ARP的更多相关文章

  1. TCP/IP具体解释学习笔记——数据链路层(2)

    五 Wireless LANs(Wi-Fi) 现在很流行的一种接入互联网的方式就是Wi-Fi了.我们用的ipad.手机.笔记本电脑等等都能够用这样的方式接入互联网,很方便灵活.一个典型的Wi-Fi网络 ...

  2. TCP/IP具体解释学习笔记--TCP的超时与重传

    1.基本概念 TCP之所以能够安全的将数据在传输中的安全性,是因为它每次给对方发送数据,都会等待对方给个确认,当长时间收不到这个确认,发送端就会重发这个数据. 2.超时时间的測量 要測超时时间,TCP ...

  3. TCP/IP具体解释学习笔记--TCP数据流

    1.TCP的交互数据流 (1)基本概念 所谓交互数据流,其对TCP而言,就是他们所产生的大多数的TCP报文段中所包括的数据不超过10个字节.比如聊天等telnet的软件的TCP数据流就属于TCP交互数 ...

  4. TCP/IP具体解释学习笔记--TCP的坚持和保活定时器

    TCP的坚持定时器 1.基本概念 TCP的接收方指名希望从发送方接收的数据字节(窗体大小)来进行流量控制,假设窗体大小为0.那么放送方就会阻止发送数据,直到接收方发来一个已跟新窗体大小的ACK为止,那 ...

  5. TCP/IP详解学习笔记 这位仁兄写得太好了

      TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...

  6. TCP/IP详解学习笔记 这位仁兄写得太好了.(转载)

    TCP/IP详解学习笔记   这位仁兄写得太好了   TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/20444 ...

  7. 【转】TCP/IP详解学习笔记(一)

      TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP详解学习笔记(13)-T ...

  8. TCP/IP详解学习笔记- 概述

    TCP/IP详解学习笔记(1)-- 概述1.TCP/IP的分层结构      网络协议通常分不同层次进行开发,每一层分别负责不同的同信功能.TCP/IP通常被认为是一个四层协议系统.      如图所 ...

  9. 【转】TCP/IP详解学习笔记(二)

    TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据 ...

随机推荐

  1. Python并发编程-线程-一个简单的例子

    from threading import Thread import time def func(n): #子线程完成的 time.sleep(1) print(n) #多线程示例 for i in ...

  2. React Native升级方法——升级到最新版本0.59

    React Native最近有大动作,于2019年3月12日发布新版本0.59.主要有两点值得升级:支持React Hooks:升级了JavaScriptCore,使Android性能有大幅提升.据用 ...

  3. bWAPP练习--injection篇之HTML Injection - Reflected (POST)

    POST的和之前的GET的过程差不多,只是表单的提交方式不一样而已. low 我们在表单中填入一个超链接 <a href="http://www.cnblogs.com/ESHLkan ...

  4. Vue 2.0学习(三)指令与事件

    指令(Directives)是Vue.js模板中最常用的一项功能,它带有前缀v-,前面已经使用过v-html.v-pre等.指令的主要职责就是当表达式的值改变时,相应地将某些行为应用到DOM上. v- ...

  5. RE:从零开始的AGC被虐(到)生活(不能自理)

    RE:从零开始的AGC被虐(到)生活(不能自理) 「一直注视着你,似近似远,总是触碰不到.」 --来自风平浪静的明天 AtCoder Grand Contest 001 B: Mysterious L ...

  6. (转载)打破某些大牛比较呵呵的MySQL无file权限读root hash的谣言

    如题.比如乌云社区发帖的这位大牛http://zone.wooyun.org/content/12432 看那帖子标题就很喜感有木有,大概意思就是创建了一个没有file权限的账户test,然后不能lo ...

  7. Apache URLRewrite 原理及配置实现

    看一下网站上的一些 URL.您是否发现一些类似于 http://yoursite.com/info/dispEmployeeInfo. ... 99&type=summary的 URL?或者, ...

  8. DiskFileUpload上传与Spring的CommonsMultipartResolver上传对比

    最近在做一个小小的上传功能竟被虐得体无完肤, 在使用tomcat内置的DiskFileUpload获取前台jsp传来的附件参数和其他表单参数, 竟然出现莫名其妙的乱码问题, 即使tomcat的serv ...

  9. Pandas中Series和DataFrame的索引

    在对Series对象和DataFrame对象进行索引的时候要明确这么一个概念:是使用下标进行索引,还是使用关键字进行索引.比如list进行索引的时候使用的是下标,而dict索引的时候使用的是关键字. ...

  10. 把json格式的字符串转换成javascript对象或数组

      第一种 JSON.parse(jsonString) 第二种 eval("("+jsonString+")") 第三种 var obj=(function ...