一 概述

我们知道,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. C# 从数据库中删除,插入,修改 索引选中条目

    一.删除 1. ) { var currentSelectIndex = usrListView.SelectedIndex; var item = usrView[currentSelectInde ...

  2. QT 信号与槽 QT简单加法器的实现

    信号与槽 背景: 面向过程 模块之间低耦合设计(高内聚). 函数调用: 直接调用 回调调用(低耦合) 面向对象 模块之间低耦合设计(高内聚) 对象调用 直接调用 接口调用 QT: 信号与槽解决问题: ...

  3. 关于MyEclipse修改项目名称后,部署到tomcat显示旧的项目名称

    问题:用Myeclipse部署项目的时候,     出现部署到tomcat下的项目是之前的项目,而不是当前的项目.   解决方案:工程名->右键->Properties->MyEcl ...

  4. 关于小程序http请求的问题

    解决wx.request 发起的是 HTTPS 请求的问题 对于wx.request,大家可以理解为是微信小程序版的ajax,基于安全性考虑他的url地址必须是以https开头的,但对于一个开发者来说 ...

  5. PyPI使用国内源

    默认的pip源的速度实在无法忍受,于是便搜集了一些国内的pip源,如下: 阿里云 https://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi. ...

  6. 聚类——K-means

    聚类——认识K-means算法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.聚类与分类 聚类: 无监督学习.聚类是在预先不知道欲划分类的情况下, ...

  7. Java循环中try...finally...遇到continue

    一段很简单的代码,先自己在大脑中给出结果: for (int i = 0; i < 5; i++) { System.out.println("enter: i=" + i) ...

  8. 【转】WPF查找子控件和父控件方法

    一.查找某种类型的子控件,并返回一个List集合 public List<T> GetChildObjects<T>(DependencyObject obj, Type ty ...

  9. Python——greenlet

    目录 1. 介绍 2. 父greenlet 3. 实例化 4. 在greenlets间切换 5. 垂死的greenlets 6. greenlet的方法和属性 7. greenlets和Python线 ...

  10. Spring Boot--02MVC设置

    package com.smartmap.sample.ch1.conf; import java.util.List; import javax.servlet.http.HttpServletRe ...