《TCP/IP协议详解》读书笔记(一)

2019, May 31    

第1章 概述

域名系统(DNS):一个分布的数据库,由它来提供IP地址和主机名之间的映射信息

逐层封装:TCP报文段→IP数据报→帧

分用:当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各 层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的 上层协议。这个过程称作分用(Demultiplexing)

应 用 程 序  IGMP  以 太 网  驱 动 程 序  进 入 的 帧  应 用 程 序  应 用 程 序  应 用 程 序  根 据 TCP 或 UDP 首  部 中 的 端 口 号 进 行  分 用  根 据 IP 首 部 中 的 协  议 值 进 行 分 用  乁 根 据 以 太 网 首 部 中  了 的 帧 类 型 进 行 分 用  图 I . 8 以 太 网 数 据 帧 的 分 用 过 程 TCP/IP协议族分为四层:链路层、网络层、运输层和应用层,每一层各有不同的责任。 在T C P / I P中,网络层和运输层之间的区别是最为关键的:网络层( I P)提供点到点的服务, 而运输层(T C P和U D P)提供端到端的服务。

第2章 链路层

在TCP/IP协议族中,链路层主要有三个目的:

(1)为IP模块发送和接收IP数据报;

(2)为ARP模块发送ARP请求和接收ARP应答;

(3)为RARP发送RARP请求和接收RARP应答。TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、FDDI(光纤分布式数据接口)及RS-232串行线路等。

最大传输单元MTU

正如在图2 - 1看到的那样,以太网和802. 对数据帧的长度都有一个限制,其最大值分别是 1500和1492字节。链路层的这个特性称作 MTU,最大传输单元。不同类型的网络大多数都有一个上限。 如果IP层有一个数据报要传,而且数 据的长度比链路层的 MTU还大,那么IP层 就需要进行分片( fragmentation),把数据 报分成若干片,这样每一片都小于 MTU。 我们将在11 . 5节讨论IP分片的过程。

第3章 IP:网际协议

不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。

无连接(connectionless)这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。

TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。第8章我们讨论Traceroute程序时将再回来讨论该字段。

IP路由选择

从概念上说,IP路由选择是简单的,特别对于主机来说。如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。大多数的主机都是采用这种简单机制。

过程:I P层在 内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报 来自某个网络接口时,I P首先检查目的I P地址是否为本机的I P地址之一或者I P广播地址。如果 确实是这样,数据报就被送到由 I P首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么( 1)如果I P层被设置为路由器的功能,那么就对数据报进行转发 (也就是说,像下面对待发出的数据报一样处理);否则( 2)数据报被丢弃。

路由表表项

  • 目的I P地址。它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标志字段来指定(如下所述)。主机地址有一个非0的主机号(见图1 - 5),以指定某一特定的 主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)。
  • 下一站(或下一跳)路由器( next-hop router)的IP地址,或者有直接连接的网络 IP地址。下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。下 一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。
  • 标志。其中一个标志指明目的 I P地址是网络地址还是主机地址,另一个标志指明下一 站路由器是否为真正的下一站路由器,还是一个直接相连的接口(我们将在 9 . 2节中 详细介绍这些标志)。
  • 为数据报的传输指定一个网络接口。

第4章 ARP:地址解析协议

当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48 bit的以 太网地址来确定目的接口的。设备驱动程序从不检查 I P数据报中的目的I P地址。

地址解析为这两种不同的地址形式提供映射: 32 bit的I P 地址和数据链路层使用的任何类型的地址

ARP的功能:从逻辑Internet地址到对应的物理硬件地址需要进行翻译。

ARP动态寻址的过程:ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机。这个过程称作广播。ARP请求数据帧中包含目的主机的IP地址(主机名为bsdi),其意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址。”目的主机的ARP层收到这份广播报文后,识别出这是发送端在寻问它的IP地址,于是发送一个ARP应答。这个ARP应答包含IP地址及对应的硬件地址。

##

ARP高速缓存:ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。

ARP代理:如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托ARP或ARP代理(ProxyARP)。这样可以欺骗发起ARP请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。

免费ARP

0 : 0 : CO : 6f : 2d : 40 ff:ff:ff:ff:ff:ff arp 60 :  arp who—has 140 , 252.13.35 tell 140.25243.35  图 4 免 费 ARP 的 例 子

免费ARP有两个方面的作用:

  1. 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址
  2. 如果发送免费ARP的主机正好改变了硬件地址,那么这个分组就可以使其他高速缓存中旧的硬件地址进行相应的更新。

第5章 RARP:逆地址解析协议

RARP协议是许多无盘系统在引导时用来获取IP地址的。RARP分组格式基本上与ARP分组一致。一个RARP请求在网络上进行广播,它在分组中标明发送端的硬件地址,以请求相应IP地址的响应。应答通常是单播传送的。

RARP带来的问题包括使用链路层广播,这样就阻止大多数路由器转发RARP请求,只返回很少信息:只是系统的IP地址。在第16章中,我们将看到BOOTP在无盘系统引导时会返回更多的信息:IP地址和引导主机的名字等。

虽然RARP在概念上很简单,但是RARP服务器的实现却与系统相关。因此,并不是所有的TCP/IP实现都提供RARP服务器。

第6章 ICMP:Internet控制报文协议

ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。

ICMP报文是在IP数据报内部被传输的,如图所示。

1560340184985

下面各种情况都不会导致产生ICMP差错报文:

  1. ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)。
  2. 目的地址是广播地址(见图3 - 9)或多播地址(D类地址,见图1 - 5)的IP数据报。
  3. 作为链路层广播的数据报。
  4. 不是IP分片的第一片(将在11 . 5节介绍分片)。
  5. 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

这些规则是为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴。

ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。

ICMP时间戳请求允许系统向另一个系统查询当前的时间。