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数据 ...
随机推荐
- OSG立体模式下动态修改相机远近裁剪面的实现
1. 非立体模式下动态修改相机远近裁剪面 class GLB_DLLCLASS_EXPORT CGlbGlobeClipHandler : public osg::NodeCallback { ...
- 推送代码分支时出现:fatal: 'origin' does not appear to be a git repository
关于ubuntu进行提交本地分支到远程库出现问题: 解决方案: 执行如下命令: git remote add origin git@github.com:yourusername/test.git y ...
- Firefox的缓存问题
使用Firefox调试代码时,JS或CSS文件修改后,怎么刷新都不生效.原来是Firefox缓存的问题.但Firefox没有像IE一样有个每次读取最新的设置. 设置Firefox不缓存页面: 新建标签 ...
- Java自定义注解基础知识
注解分为三类:没有任何元素的注解,有一个元素的注解和有多个元素的注解. 1. Marker注解 这类注解没有任何元素,此类注解仅仅是一个标示.如下所示: public @interface Good ...
- Python自然语言处理资料库
1.LTP [1]- 语言技术平台(LTP) 提供包括中文分词.词性标注.命名实体识别.依存句法分析.语义角色标注等丰富. 高效.精准的自然语言处理技术.经过哈工大社会计算与信息检索研究中心 11 年 ...
- spring的条件装配bean
1 应用程序环境的迁移 问题: 开发软件时,有一个很大的挑战,就是将应用程序从一个环境迁移到另一个环境. 例如,开发环境中很多方式的处理并不适合生产环境,迁移后需要修改,这个过程可能会莫名的出现很多b ...
- Hooops - iPhone上的Dribbble应用
来源:GBin1.com Dribbble一直没有一个官方的应用,有时候这真的很恶心.有时你远离电脑,却想浏览一些镜头来寻找灵感.对于那些喜欢Dribbble自然,充满原始感觉的人们,非常幸运的,可以 ...
- 手机端UC浏览器,在java开发的下载功能中存在的问题?
在java web开发中,不同浏览器对下载文件的格式有不同的要求,有时会出现视频,音频等文件无法下载的问题.我在开发中,也遇到类似的问题,觉得很苦恼. 经过百度和请教学习,得到2个解决方案. 首先得到 ...
- 微信小程序小红点未读消息如何实现?
如图类似的 这样的需求还挺多的,那么如何实现呢? data: { userInfo: {}, projectSource: 'https://github.com/liuxuanqiang/wec ...
- 【Datastage】函数大全
一. 类型转换函数 类型转换函数用于更改参数的类型. 以下函数位于表达式编辑器的"类型转换"类别中.方括号表示参数是可选的.缺省日期格式为 %yyyy-%mm-%dd. 以下示例按 ...