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. vertx连接mysql数据库

    1:创建一个verticle组件 package jdbcConnection; import io.vertx.core.AbstractVerticle; import io.vertx.core ...

  2. 详解Linux(centos7)下安装OpenSSL安装图文方法

    OpenSSL是一个开源的ssl技术,由于我需要使用php相关功能,需要获取https的文件所以必须安装这个东西了,下面我整理了两种关于OpenSSL安装配置方法. 安装环境:  操作系统:CentO ...

  3. Fisher精确检验【转载】

    转自:https://en.wikipedia.org/wiki/Fisher%27s_exact_test https://www.cnblogs.com/Dzhouqi/p/3440575.htm ...

  4. 转载一篇debug文章

    http://versprite.com/og/ios-reverse-engineering-part-two-debugging-and-tracing-with-lldb/ iOS Revers ...

  5. LeetCode--53 最大连续子序列(总结)

    # 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. # 示例:# 输入: [-2,1,-3,4,-1,2,1,-5,4],# 输出: 6# 解释 ...

  6. mysql的锁机制

    一.读锁(共享锁/Share Locks,S锁). 1.select * from table_name where ... lock in share mode.(事务A) (1)这种方式是获取指定 ...

  7. zoj3814

    这题说的是给了一个数在longlong范围内 然后求出小于这个数的最大的回文,枚举每位减去1后 , 他后面的位置上全部都置为9,然后在枚举每个前半部分,然后贪心取得这个数的最大值,贪心的时候写错了,错 ...

  8. 拉取远程仓库到本地错误The authenticity of host 'github.com (13.229.188.59)' can't be established.

    1.个人在github上面创建了仓库,通过本地的git拉取远程仓库到本地报错信息如下: 这是因为Git使用SSH连接,而SSH第一次连接需要验证GitHub服务器的Key.确认GitHub的Key的指 ...

  9. java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串

    java,url长链接生成短链接,短链接生成器,自定义字符串,对字符串md5混合KEY加密,根据短链接获得key值,不重复的随机数,不重复的随机字符串 package com.zdz.test; im ...

  10. SpringBoot之集成Socket

      1.Socket是什么,这里不做介绍.开发环境:jdk1.8,win7_64旗舰版,idea   2.初始化一个springboot项目   3.开始Socket服务端实现,Socket相关接口在 ...