TCP/IP详解读书笔记:ARP-地址解析协议
地址解析为两种不同的地址形式提供映射:32bit的IP和数据链路层使用的任何类型的地址。
当一台主机把以太网数据帧发送到位于同一局域网的另一台主机,是根据48bit的以太网地址而不是IP地址。设备驱动程序是从不会去检查IP数据报中的目的IP地址。
ARP为IP地址到对应的硬件地址之间提供动态映射。
例子
这个例子是想通过FTP协议连接主机bsdi。
在发送TCP连接前,需要将IP地址映射为硬件地址,这就需要ARP了。
ARP发送一份称作ARP请求的以太网数据桢给以太网的所有主机,也就是广播,目的就是让是这个IP地址的主机吱一声。目的主机收到这份广播报文后,发送一个ARP应答,包含了IP地址和对应的硬件地址。
ARP后面的基本概念就是,网络接口有一个硬件地址。在硬件层次上交换数据就必须有正确的接口地址,内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据,IP地址在这里是毫无用处的。
ARP高速缓存
ARP高效运行的关键是每个主机都有一个ARP高速缓存。这个缓存存储了最近的IP和硬件地址之间的映射,一般生存时间为20分钟,一般在访问条目时重设超时值。
查看ARP高速缓存的命令为:arp -a。
ARP的分组格式
分组格式分为14字节的以太网首部和28字节的ARP请求/应答。
首先是以太网首部。
以太网首部的前两个字段是以太网的源地址和目的地址。目的地址全为1则是广播地址,发送请求时就是广播。
以太网帧类型:表示后面的数据类型,对ARP请求和应答来说,值为0x0806。
接下来是ARP请求/应答。
硬件类型:硬件地址的类型,比如1表示以太网地址。
协议类型:要映射的协议地址类型,0x0800表示IP地址。值得注意的是,它与IP数据报中的以太网数据帧的类型字段的值相同。
硬件地址长度:单位为字节,值为6,也就是48bit硬件地址。
协议地址长度:单位为字节,值为4,也就是32bit IP地址。
op:四种操作类型,ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)。
剩下的4个字段看字面意思就很清楚了,不赘述。
ARP举例
执行一个连接,然后使用tcpdump(linux下命令)查看。
可以看到,第一行中有源主机的硬件地址,目的端为ff:ff:ff:ff,也就是广播地址。紧接着输出的是arp,表明帧类型字段值为0x0806,说明这是一个ARP请求/应答。再后面的60是以太网数据帧的长度。
第二行中我们可以看到,尽管ARP请求是广播的,但是ARP应答是单播的。
第三行是请求建立TCP连接。这个不是这章的重点,等18章详述。
一般情况下,主机在收到ARP请求或发送应答时,都要把请求端的硬件地址和IP存入ARP高速缓存。这样在建立TCP连接时,应答端就不需要发送ARP来解析IP了。
如果尝试连接的是一台不存在的主机,那么会进行多次ARP请求,并会在ARP高速缓存中保存一个不完整的条目。这里有个超时重传的算法问题,TCP时会涉及。
ARP代理
上面讨论的是在同一个以太网中的情况。如果ARP请求是从一个网络的主机发送到另一个网络的主机,那么连接这两个网络的路由器可以回答该请求,这个过程称为委托ARP或ARP代理。这样,发起端就会误以为路由器就是目的主机,而路由器作为目的主机的代理,会把分组转发给目的主机。
这里一个疑问是关于解释一个IP的问题,哪位看懂的请指教。
故意的ARP
一般在系统引导期间进行接口配置时,主机会发送ARP查找自己的IP。这个特性称为“故意的ARP”(原文翻译是免费的ARP,我觉得无意义)。
这个特性有两个作用:
1)确认是否有另一个主机设置了一样的IP。如果IP是唯一的,那么就应该没有ARP应答;一旦有应答,就说明IP设置重复了。
2)如果发送故意ARP的主机正好改变了硬件地址,比如换了一块网卡并重启,那么这个ARP请求可以更新其他主机高速缓存中的旧的硬件地址。
TCP/IP详解读书笔记:ARP-地址解析协议的更多相关文章
- TCP/IP详解读书笔记:链路层
在TCP/IP协议族中,链路层主要有三个目的: 1)为IP模块发送和接受IP数据报: 2)为ARP模块发送ARP请求和接受ARP应答: 3)为RARP模块发送RARP请求和接受RARP应答: 以太网和 ...
- TCP/IP详解读书笔记:概述
分层 分层是一种很通用的架构模式.通过分层,可以把一个系统分解成多个层,每个层专注于各自的功能,并提供接口给上面的层调用.上面的层不需要了解调用层的详细实现,只依赖于其接口,这就给维护带来了很大的好处 ...
- TCP/IP详解学习笔记(6)-UDP协议
1.UDP简要介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议. 2.UDP协议头 2.1.UDP端口号 ...
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成.其中一个重要的模块就是ICMP(网络控制报文)协议. 当传送 ...
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute【转】
转自:http://blog.csdn.net/goodboy1881/article/details/670761 1.IMCP协议介绍 前面讲到了,IP协议并不是一个可靠的协议(是一种尽力传送的协 ...
- TCP/IP详解学习笔记 这位仁兄写得太好了
TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...
- TCP/IP详解学习笔记 这位仁兄写得太好了.(转载)
TCP/IP详解学习笔记 这位仁兄写得太好了 TCP/IP详解学习笔记 这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/20444 ...
- 【转】TCP/IP详解学习笔记(一)
TCP/IP详解学习笔记 这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP详解学习笔记(13)-T ...
- 【转】TCP/IP详解学习笔记(二)
TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据 ...
随机推荐
- Vmware 14.0 版本中安装Ubuntu 17.10版本无法调整分辨率的问题
装完ubuntu后发现在vmware中选择了查看-自动调整大小-自适应客户机,虚拟机也无法随着窗口大小来切换分辨率,其实是因为WAYLAND限制了. 1. 先安装vim sudo apt-get in ...
- 把文章里边的html标签去掉(去掉文字的样式,显示css设置的样式)
java: validHeasers.add(tr[0].replace("<(.[^>]*)>",""));//去除HTML标签
- Mybatis 一个搜索框对多个字段进行模糊查询
<select id="list" parameterType="ParamConfigCondition" resultType="Param ...
- java程序main方法的参数String[] args
public class ArgsTest { public static void main(String[] args) { System.out.println(args.length); fo ...
- hdu 3572 Task Schedule(最大流&&建图经典&&dinic)
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- OJ刷题---简单password破解
题目要求: 输入代码: #include<iostream> #include <cstdio> #include <cstring> using namespac ...
- Linux Load average负载详细解释
http://tianmaotalk.iteye.com/blog/1027970 Linux Load average负载详细解释 linux查看机器负载
- java基础讲解04-----数据类型和运算符
1.java的基本数据类型 1.数值型 { 整数型 byte , short ,int ,long 浮点型 float , double } 2.字符型 3.布尔型 2.运算符 1.赋 ...
- unity3d为对象添加脚本的两种方法
首先添加一个物体,然后新建一个C#脚本.接下去有两种方法把C#脚本与物体绑定. 1.在类声明上方添加如下代码: [AddComponentMenu("a/b")] 这句话表示在该物 ...
- SUSE11SP3--安装svn
SUSE上安装新版本的subversion是一件很麻烦的事情,涉及到的依赖太多,包括需要更新部分工具的版本. 为了以较小的代价安装subversion,我决定在SUSE11下安装 subversion ...