4.1 引言

数据链路 如以太网(Ethernet) 或者 令牌环网 都有自己的寻址机制(一般为 48 bit 的地址)。

一个网络(数据链路层) 可以同时被多个不同的网络使用。比如,一组使用TCP/IP协议的主机 和 另一组使用某种PC网络软件的主机 可以共享(share)相同的电缆。

当一台主机把以太网数据帧 发送到位于 同一局域网(LAN) 的另一台主机时,是根据48 bit 的以太网地址 来确定目的接口的。

地址解析协议 为这两种不同的地址形式 提供映射。

数据链路层地址 --(RARP)--> IP地址(Internet 地址)

数据链路层地址 <--(ARP)-- IP地址(Internet 地址)
  • ARP 为 IP地址 到 对应的硬件地址 之间提供 动态映射。之所以使用了 动态 这个词,是因为这个过程是自动完成的。一般应用程序用户或者系统管理员不需要关心这个问题。
  • RARP 被那些没有磁盘驱动器的系统所使用(一般是无盘工作站或X终端),它需要管理员进行手工设置。

4.2 一个例子

Terminal 键入 ftp bsdi 这个形式的命令,都会进行以下步骤:

  • (1) 应用程序FTP客户端 调用函数 gethostbyname(3) 把 主机名(bsdi) 转换成 32 bit 的 IP地址。 这个函数在 DNS(域名系统) 中被称作 解析器。
  • (2)FTP客户端 请求 TCP(运输层) 用转换得到的 IP地址 建立连接。
  • (3)TCP 发送一个连接请求 分段到远端的主机。即 给上述IP地址(某个接口) 发送一个IP数据报。
  • (4) 假如 目的主机是在本地网络上(如 以太网,令牌环网 或者 点对点链路的另一端),那么IP数据报可以直接发送到目的主机。如果目的主机在一个远程网络,那么就通过 IP选路 来确定下一站路由器地址,并转发数据报。

    这两种情况,IP数据报都是被送到位于本地网络的一台主机或者路由器上。
  • (5) 假如 是一个以太网(Ethernet),那么发送端主机必须把 32 bit 的 IP地址 变换为 48 bit 的以太网地址。

    从 逻辑 Internet 地址 到对应的 物理硬件地址(MAC) 需要进行翻译,这就是ARP的作用。

  • (6)ARP发送一份称作 ARP请求 的 以太网数据帧 给以太网上的每一台主机。这个过程称作广播
ARP请求:
Hello, 你好吗,我的 IP地址 是 ···,如果你是 ··· 这个 IP地址 的主人,请回答!
  • (7)目的主机的 ARP层 收到这份广播报文之后,识别出这是发送端在询问它的IP地址,于是发送一个 ARP应答。这个 ARP应答 包括 IP地址 以及 对应的硬件地址。
ARP应答:
你好,我是 ··· IP地址 的主人,很高兴认识你,我的IP地址是 ··· ,我的硬件地址(MAC)是 ···。
  • (8)收到 ARP应答 之后,使 ARP 进行 请求-应答交换 的 IP数据报 现在就可以开始传送了。
  • (9)发送 IP数据报 到目的主机。

一个基本概念:网络接口有一个硬件地址(或者说是 链路层地址),知道主机的 IP地址 并不能让 内核(比如 以太网驱动程序) 发送一帧数据 给主机。内核必须知道 目的端的硬件地址 才能发送数据。

点对点链路 不使用 ARP。当设置这些链路的时候(一般为主机引导过程进行),必须告知内核 链路每一端 的 IP地址。

4.3 ARP 高速缓存

每个主机上 都有一个 ARP高速缓存,这是 ARP高速运行的关键。

这个高速缓存 存放了 最近 Internet地址 到 硬件地址(MAC) 的 映射记录。

生存周期一般为 20分钟,起始时间 从被创建时算起。

第四章 其他的知识

ARP代理 :如果 ARP请求 是从一个网络的主机 发送往另一个网络的主机,那么连接这俩网络的路由器就可以回答该请求,这个过程称作 ARP代理 或者 委托ARP。这样可以欺骗 发起 ARP请求的发送端。

免费ARP :ARP的特性,它是指主机发送 ARP 查找自己的IP地址。

  • 一个主机可以通过它来 确定 另外一个主机 是否设置了 相同的 IP地址。
  • 如果发送 免费ARP 的主机刚好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,这样硬件地址就改变了,并重新启动),那么这个分组就可以 使其他主机的高速缓存中 旧的硬件地址,进行相应的更新。

其他内容拾遗

ICMP

ICMP 经常被认为是 IP层 的一个组成部分。它 传递差错报文 以及其他需要注意的信息。

ICMP 是在 IP数据报 的内部 被传输的。

在后面的 IP选路 中,我们能够看到 ICMP主机或者网络不可达差错,ICMP 重定向报文,ICMP路由器发现报文。

Ping 程序

目的是为了 测试另一台主机是否可达

Traceroute 程序

Traceroute 程序能够使我们看到 IP数据报 从一台主机 传到 另外一台主机 所经过的 路由。

2016/7/29

【TCP/IP详解 卷一:协议】第四章 ARP:地址解析协议 以及其他部分的一些知识的更多相关文章

  1. TCP/IP详解 卷一(第四、五章 ARP、RARP)

    数据链路如 以太网都有自己的寻址机制(MAC)地址,而IP层使用的是IP地址. 当一台主机把以太网数据发送定位于同一局域网上的另一台主机时,是根据MAC地址来确定目的接口的.设备驱动程序从不检查IP数 ...

  2. TCP/IP详解 卷一(第三章 IP:网际协议)

    IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 1.不可靠:就是它不能保证IP数据报能成功地到 ...

  3. TCP/IP详解 卷一(第十三章 IGMP:Internet组管理协议)

    本章将介绍用于支持主机和路由器进行多播的Internet组管理协议(IGMP) 它让一个物理网络上的所有系统知道主机当前所在的多播组.多播路由器需要这些信息以便知道多播数据报应该向那些接口转发. 跟I ...

  4. TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)

    UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示

  5. TCP/IP详解 卷一(第六章 ICMP:Internet控制报文协议)

    ICMP是(Internet Control Message Protocol)Internet控制报文协议. 用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可 ...

  6. TCP/IP详解 卷一(第十七章 TCP:传输控制协议)

    与UDP协议相比,TCP提供一种面向连接的.可靠的字节流服务. TCP首部 跟UDP一样,TCP数据被封装在一个IP数据报中,下面显示TCP的首部数据格式 每个TCP段都包含源端和目的端的端口号,用于 ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  9. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  10. 【TCP/IP详解 卷一:协议】第十二章 广播和多播

    建议参考:广播和多播 IGMP 12.1 引言 IP地址知识点回顾: IP地址分为三种:(1)单播地址 (2)广播地址 (3)多播地址 另外一种是,IP地址一般划分成五类:A-E类. 单播 考虑 类似 ...

随机推荐

  1. 前端 HTML body标签相关内容 常用标签 换行标签 br

    换行标签 <br> <br>标签用来将内容换行,其在HTML网页上的效果相当于我们平时使用word编辑文档时使用回车换行. 在第一行中间加上br <!DOCTYPE ht ...

  2. Android应用之——百度地图最新SDK3.0应用,实现最经常使用的标注覆盖物以及弹出窗覆盖物

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/yanglfree/article/details/33333413 一.概述 最新版的百度地图SDK ...

  3. SpringBoot打成的jar包发布,shell关闭之后一直在服务器运行

    1:可以编写shell脚本, 切换到执行的jar包目录,然后使用nohup  让改命令在服务器一直运行 #!/bin/bash cd /srv/ftp/public nohup java -jar l ...

  4. [py]列表生成式-支持条件,多值的拼接

    列表生成式 代码简洁一些 支持多条件, 过滤,或拼接某些值 支持返回多值 是一种生成式 # 生成一个列表 print(list(range(1, 11))) # 生成一个列表x^2 ## 方法1: 返 ...

  5. pythonon ddt数据驱动二(json, yaml 驱动)

    这一篇主要是关于文件的数据驱动. 一.通过json文件驱动 @ddt class MyTest(unittest.TestCase): @file_data('test_data_list.json' ...

  6. vue.js使用typescript踩坑记

    最近在把https://github.com/renrenio/renren-fast-vue这个项目转为typescript,在此记录一下遇到的小坑 name坑:属性该怎么给? 声明文件坑:如何解决 ...

  7. VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)

    上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分. 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类. 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Con ...

  8. linux常用命令:tar 命令

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar 命令可以为linu ...

  9. Q_DECLARE_PRIVATE与Q_DECLARE_PUBLIC

    Q_DECLARE_PRIVATE与Q_DECLARE_PUBLIC 这两个宏在Qt的源码中随处可见,重要性不言而喻.在 部落格的 Inside Qt Series 系列文章中,他用了3篇文章来讲这个 ...

  10. Linux下Oracle常用命令

    1. 备份表 exp database_user/pass tables='(table1,table2)' file=filename.dmp(例如:exp ismrenbao/iflytek ta ...