tcp/ip(三)

3.1 引言
I P是T C P / I P协议族中最为核心的协议。所有的T C P、U D P、I C M P及I G M P数据都以I P数据
报格式传输(见图1 - 4)。许多刚开始接触T C P / I P的人对I P提供不可靠、无连接的数据报传送
服务感到很奇怪,特别是那些具有X . 2 5或S N A背景知识的人。
不可靠( u n r e l i a b l e)的意思是它不能保证I P数据报能成功地到达目的地。I P仅提供最好
的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, I P有一个简单的错误
处理算法:丢弃该数据报,然后发送I C M P消息报给信源端。任何要求的可靠性必须由上层来
提供(如T C P)。
无连接( c o n n e c t i o n l e s s)这个术语的意思是I P并不维护任何关于后续数据报的状态信息。
每个数据报的处理是相互独立的。这也说明, I P数据报可以不按发送顺序接收。如果一信源
向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由
选择,可能选择不同的路线,因此B可能在A到达之前先到达。
在本章,我们将简要介绍I P首部中的各个字段,讨论I P路由选择和子网的有关内容。还
要介绍两个有用的命令: i f c o n f i g和n e t s t a t。关于I P首部中一些字段的细节,将留在以
后使用这些字段的时候再进行讨论。RFC 791[Postel 1981a]是I P的正式规范文件。
3.2 IP首部
I P数据报的格式如图3 - 1所示。普通的I P首部长为2 0个字节,除非含有选项字段。
图3-1 IP数据报格式及首部中的各字段
4位
版本
4位首部
长度
8位服务类型
(TOS)
16位总长度(字节数)
13位片偏移
16位首部检验和
3位
标志
16位标识
8位协议
32位源IP地址
32位目的IP地址
选项(如果有)
数据
8位生存时间
20字节
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
分析图3 - 1中的首部。最高位在左边,记为0 bit;最低位在右边,记为31 bit。
4个字节的32 bit值以下面的次序传输:首先是0~7 bit,其次8~15 bit,然后1 6~23 bit,
最后是24~31 bit。这种传输次序称作big endian字节序。由于T C P / I P首部中所有的二进制整数
在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数
的机器,如little endian格式,则必须在传输数据之前把首部转换成网络字节序。
目前的协议版本号是4,因此I P有时也称作I P v 4。3 . 1 0节将对一种新版的I P协议进行讨论。
首部长度指的是首部占32 bit字的数目,包括任何选项。由于它是一个4比特字段,因此
首部最长为6 0个字节。在第8章中,我们将看到这种限制使某些选项如路由记录选项在当今已
没有什么用处。普通I P数据报(没有任何选择项)字段的值是5。
服务类型(TO S)字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TO S子字
段和1 bit未用位但必须置0。4 bit的TO S分别代表:最小时延、最大吞吐量、最高可靠性和最
小费用。4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。RFC 1340
[Reynolds and Postel 1992] 描述了所有的标准应用如何设置这些服务类型。RFC 1349
[Almquist 1992]对该R F C进行了修正,更为详细地描述了TO S的特性。
图3 - 2列出了对不同应用建议的TO S值。在最后一列中给出的是十六进制值,因为这就是
在后面将要看到的t c p d u m p命令输出。
图3-2 服务类型字段推荐值
Te l n e t和R l o g i n这两个交互应用要求最小的传输时延,因为人们主要用它们来传输少量的
交互数据。另一方面, F T P文件传输则要求有最大的吞吐量。最高可靠性被指明给网络管理
(S N M P)和路由选择协议。用户网络新闻( Usenet news, NNTP)是唯一要求最小费用的应
用。
现在大多数的T C P / I P实现都不支持TO S特性,但是自4.3BSD Reno以后的新版系统都对它
进行了设置。另外,新的路由协议如O S P F和I S - I S都能根据这些字段的值进行路由决策。
在2 . 1 0节中,我们提到S L I P一般提供基于服务类型的排队方法,允许对交互通信
第3章IP:网际协议使用25
下载
应用程序最小时延最大吞吐量最高可靠性最小费用
16进
制值
控制
数据
任意块数据
命令阶段
数据阶段
UDP查询
TCP查询
区域传输
差错
查询
任何IGP
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
数据在处理大块数据之前进行处理。由于大多数的实现都不使用TO S字段,因此这种
排队机制由S L I P自己来判断和处理,驱动程序先查看协议字段(确定是否是一个T C P
段),然后检查T C P信源和信宿的端口号,以判断是否是一个交互服务。一个驱动程序
的注释这样认为,这种“令人厌恶的处理方法”是必需的,因为大多数实现都不允许
应用程序设置TOS字段。
总长度字段是指整个I P数据报的长度,以字节为单位。利用首部长度字段和总长度字段,
就可以知道I P数据报中数据内容的起始位置和长度。由于该字段长1 6比特,所以I P数据报最
长可达6 5 5 3 5字节(回忆图2 - 5,超级通道的M T U为6 5 5 3 5。它的意思其实不是一个真正的
M T U—它使用了最长的I P数据报)。当数据报被分片时,该字段的值也随着变化,这一点将
在11 . 5节中进一步描述。
尽管可以传送一个长达6 5 5 3 5字节的I P数据报,但是大多数的链路层都会对它进行分片。
而且,主机也要求不能接收超过5 7 6字节的数据报。由于T C P把用户数据分成若干片,因此一
般来说这个限制不会影响T C P。在后面的章节中将遇到大量使用U D P的应用( R I P,T F T P,
B O O T P,D N S,以及S N M P),它们都限制用户数据报长度为5 1 2字节,小于5 7 6字节。但是,
事实上现在大多数的实现(特别是那些支持网络文件系统N F S的实现)允许超过8 1 9 2字节的
I P数据报。
总长度字段是I P首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据
以达到最小长度。尽管以太网的最小帧长为4 6字节(见图2 - 1),但是I P数据可能会更短。如
果没有总长度字段,那么I P层就不知道4 6字节中有多少是I P数据报的内容。
标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。在
11 . 5节介绍分片和重组时再详细讨论它。同样,在讨论分片时再来分析标志字段和片偏移字
段。
RFC 791 [Postel 1981a]认为标识字段应该由让IP发送数据报的上层来选择。假设有
两个连续的I P数据报,其中一个是由T C P生成的,而另一个是由U D P生成的,那么它们
可能具有相同的标识字段。尽管这也可以照常工作(由重组算法来处理),但是在大多
数从伯克利派生出来的系统中,每发送一个I P数据报,I P层都要把一个内核变量的值加
1,不管交给IP的数据来自哪一层。内核变量的初始值根据系统引导时的时间来设置。
T T L(t i m e - t o - l i v e)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据
报的生存时间。T T L的初始值由源主机设置(通常为3 2或6 4),一旦经过一个处理它的路由器,
它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送I C M P报文通知源主机。第8
章我们讨论Tr a c e r o u t e程序时将再回来讨论该字段。
我们已经在第1章讨论了协议字段,并在图1 - 8中示出了它如何被I P用来对数据报进行分
用。根据它可以识别是哪个协议向I P传送数据。
首部检验和字段是根据I P首部计算的检验和码。它不对首部后面的数据进行计算。I C M P、
I G M P、U D P和T C P在它们各自的首部中均含有同时覆盖首部和数据检验和码。
为了计算一份数据报的I P检验和,首先把检验和字段置为0。然后,对首部中每个16 bit
进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在检验和字段中。当
收到一份I P数据报后,同样对首部中每个16 bit进行二进制反码的求和。由于接收方在计算过
26使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,
那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么I P就丢弃收到的
数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。
I C M P、I G M P、U D P和T C P都采用相同的检验和算法,尽管T C P和U D P除了本身的首部和
数据外,在I P首部中还包含不同的字段。在RFC 1071[Braden, Borman and Patridge 1988]中有
关于如何计算I n t e r n e t检验和的实现技术。由于路由器经常只修改T T L字段(减1),因此当路
由器转发一份报文时可以增加它的检验和,而不需要对I P整个首部进行重新计算。R F C
1141[Mallory and Kullberg 1990]为此给出了一个很有效的方法。
但是,标准的BSD实现在转发数据报时并不是采用这种增加的办法。
每一份I P数据报都包含源I P地址和目的I P地址。我们在1 . 4节中说过,它们都是32 bit的
值。
最后一个字段是任选项,是数据报中的一个可变长的可选信息。目前,这些任选项定义
如下:
• 安全和处理限制(用于军事领域,详细内容参见RFC 1108[Kent 1991])
• 记录路径(让每个路由器都记下它的I P地址,见7 . 3节)
• 时间戳(让每个路由器都记下它的I P地址和时间,见7 . 4节)
• 宽松的源站选路(为数据报指定一系列必须经过的I P地址,见8 . 5节)
• 严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能
经过其他的地址)。
这些选项很少被使用,并非所有的主机和路由器都支持这些选项。
选项字段一直都是以32 bit作为界限,在必要的时候插入值为0的填充字节。这样就保证
I P首部始终是32 bit的整数倍(这是首部长度字段所要求的)。
3.3 IP路由选择
从概念上说, I P路由选择是简单的,特别对于主机来说。如果目的主机与源主机直接相
连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么I P数据报就直接送到
目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。大多
数的主机都是采用这种简单机制。
在本节和第9章中,我们将讨论更一般的情况,即I P层既可以配置成路由器的功能,也可
以配置成主机的功能。当今的大多数多用户系统,包括几乎所有的U n i x系统,都可以配置成
一个路由器。我们可以为它指定主机和路由器都可以使用的简单路由算法。本质上的区别在
于主机从不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。内含路由器
功能的主机应该从不转发数据报,除非它被设置成那样。在9 . 4小节中,我们将进一步讨论配
置的有关问题。
在一般的体制中,I P可以从T C P、U D P、I C M P和I G M P接收数据报(即在本地生成的数据
报)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)并进行发送。I P层在
内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报
来自某个网络接口时, I P首先检查目的I P地址是否为本机的I P地址之一或者I P广播地址。如果
确实是这样,数据报就被送到由I P首部协议字段所指定的协议模块进行处理。如果数据报的
第3章IP:网际协议使用27
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
目的不是这些地址,那么( 1)如果I P层被设置为路由器的功能,那么就对数据报进行转发
(也就是说,像下面对待发出的数据报一样处理);否则( 2)数据报被丢弃。
路由表中的每一项都包含下面这些信息:
• 目的I P地址。它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标
志字段来指定(如下所述)。主机地址有一个非0的主机号(见图1 - 5),以指定某一特定的
主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)。
• 下一站(或下一跳)路由器( next-hop router)的I P地址,或者有直接连接的网络I P地
址。下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。下
一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。
• 标志。其中一个标志指明目的I P地址是网络地址还是主机地址,另一个标志指明下一
站路由器是否为真正的下一站路由器,还是一个直接相连的接口(我们将在9 . 2节中
详细介绍这些标志)。
• 为数据报的传输指定一个网络接口。
I P路由选择是逐跳地( h o p - b y - h o p)进行的。从这个路由表信息可以看出, I P并不知道到
达任何目的的完整路径(当然,除了那些与主机直接相连的目的)。所有的I P路由选择只为数
据报传输提供下一站路由器的I P地址。它假定下一站路由器比发送数据报的主机更接近目的,
而且下一站路由器与该主机是直接相连的。
I P路由选择主要完成以下这些功能:
1) 搜索路由表,寻找能与目的I P地址完全匹配的表目(网络号和主机号都要匹配)。如果
找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标
志字段的值)。
2) 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目
指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所
有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表
目进行寻径的。
这种搜索网络的匹配方法必须考虑可能的子网掩码。关于这一点我们在下一节中进行
讨论。
3) 搜索路由表,寻找标为“默认( d e f a u l t)”的表目。如果找到,则把报文发送给该表目
指定的下一站路由器。
如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自
本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。
完整主机地址匹配在网络号匹配之前执行。只有当它们都失败后才选择默认路由。默认
路由,以及下一站路由器发送的I C M P间接报文(如果我们为数据报选择了错误的默认路由),
是I P路由选择机制中功能强大的特性。我们在第9章对它们进行讨论。
为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这是I P路由选择机制
的另一个基本特性。这样做可以极大地缩小路由表的规模,比如I n t e r n e t上的路由器有只有几
千个表目,而不会是超过1 0 0万个表目。
举例
首先考虑一个简单的例子:我们的主机b s d i有一个I P数据报要发送给主机s u n。双方都在
28使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
同一个以太网上(参见扉页前图)。数据报的传输过程如图3 - 3所示。
当I P从某个上层收到这份数据报后,它搜索路由表,发现目的I P地址(1 4 0 . 2 5 2 . 1 3 . 3 3)在
一个直接相连的网络上(以太网1 4 0 . 2 5 2 . 1 3 . 0)。于是,在表中找到匹配网络地址(在下一节
中,我们将看到,由于以太网的子网掩码的存在,实际的网络地址是1 4 0 . 2 5 2 . 1 3 . 3 2,但是这
并不影响这里所讨论的路由选择)。
数据报被送到以太网驱动程序,然后
作为一个以太网数据帧被送到s u n主机上
(见图2 - 1 )。I P数据报中的目的地址是
s u n的I P地址( 1 4 0 . 2 5 2 . 1 3 . 3 3),而在链
路层首部中的目的地址是48 bit的s u n主
机的以太网接口地址。这个48 bit的以太
网地址是用A R P协议获得的,我们将在
下一章对此进行描述。
现在来看另一个例子:主机b s d i有一份I P数据报要传到f t p . u u . n e t主机上,它的I P地
址是1 9 2 . 4 8 . 9 6 . 9。经过的前三个路由器如图3 - 4所示。首先,主机b s d i搜索路由表,但是没有
找到与主机地址或网络地址相匹配的表目,因此只能用默认的表目,把数据报传给下一站路
由器,即主机s u n。当数据报从b s d i被传到s u n主机上以后,目的I P地址是最终的信宿机地
址(1 9 2 . 4 8 . 9 6 . 9),但是链路层地址却是s u n主机的以太网接口地址。这与图3 - 3不同,在那里
数据报中的目的I P地址和目的链路层地址都指的是相同的主机( s u n)。
图3-4 从b s d i 到f t p . u u . n e t (192.48.96.9)的初始路径
第3章IP:网际协议使用29
下载
图3-3 数据报从主机bsdi到sun的传送过程
目的网络=
140.252,13,0
以太网140.252.13
链路层
首部
目的
目的
IP首

下一站=
140.252.104.2
(默认)
下一站=
140.252.13.33
(默认)
链路层
首部
IP
首部
链路层
首部
IP
首部
目的以太网=以太网的140.252.1.4
目的IP=192.48.96.9
下一站=
140.252.1.4
(默认)
下一站=
140.252.1.183
(默认)
IP
首部
目的IP=192.48.96.9
目的IP=192.48.96.9
目的以太网=以太网的140.252.13.33
以太网,140.252.13
以太网,140.252.1
调制解
调器
调制解
调器
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
当s u n收到数据报后,它发现数据报的目的I P地址并不是本机的任一地址,而s u n已被设
置成具有路由器的功能,因此它把数据报进行转发。经过搜索路由表,选用了默认表目。根
据s u n的默认表目,它把数据报转发到下一站路由器n e t b,该路由器的地址是1 4 0 . 2 5 2 . 1 . 1 8 3。
数据报是经过点对点S L I P链路被传送的,采用了图2 - 2所示的最小封装格式。这里,我们没有
给出像以太网链路层数据帧那样的首部,因为在S L I P链路中没有那样的首部。
当n e t b收到数据报后,它执行与s u n主机相同的步骤:数据报的目的地址不是本机地址,
而n e t b也被设置成具有路由器的功能,于是它也对该数据报进行转发。采用的也是默认路由
表目,把数据报送到下一站路由器g a t e w a y(1 4 0 . 2 5 2 . 1 . 4)。位于以太网1 4 0 . 2 5 2 . 1上的主机
n e t b用A R P获得对应于1 4 0 . 2 5 2 . 1 . 4的48 bit以太网地址。这个以太网地址就是链路层数据帧头
上的目的地址。
路由器g a t e w a y也执行与前面两个路由器相同的步骤。它的默认路由表目所指定的下一
站路由器I P地址是1 4 0 . 2 5 2 . 1 0 4 . 2(我们将在图8 - 4中证实,使用Tr a c e r o u t e程序时,它就是
g a t e w a y使用的下一站路由器)。
对于这个例子需要指出一些关键点:
1) 该例子中的所有主机和路由器都使用了默认路由。事实上,大多数主机和一些路由器
可以用默认路由来处理任何目的,除非它在本地局域网上。
2) 数据报中的目的I P地址始终不发生任何变化(在8 . 5节中,我们将看到,只有使用源路
由选项时,目的I P地址才有可能被修改,但这种情况很少出现)。所有的路由选择决策都是基
于这个目的I P地址。
3) 每个链路层可能具有不同的数据帧首部,而且链路层的目的地址(如果有的话)始终
指的是下一站的链路层地址。在例子中,两个以太网封装了含有下一站以太网地址的链路层
首部,但是S L I P链路没有这样做。以太网地址一般通过A R P获得。
在第9章,我们在描述了I C M P之后将再次讨论I P路由选择问题。我们将看到一些路由表
的例子,以及如何用它们来进行路由决策的。
3.4 子网寻址
现在所有的主机都要求支持子网编址( RFC 950 [Mogul and Postel 1985])。不是把I P地址
看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。
这样做的原因是因为A类和B类地址为主机号分配了太多的空间,可分别容纳的主机数为
22 4-2和21 6-2。事实上,在一个网络中人们并不安排这么多的主机(各类I P地址的格式如图1 - 5
所示)。由于全0或全1的主机号都是无效的,因此我们把总数减去2。
在I n t e r N I C获得某类I P网络号后,就由当地的系统管理员来进行分配,由他(或她)来决
定是否建立子网,以及分配多少比特给子网号和主机号。例如,这里有一个B类网络地址
(1 4 0 . 2 5 2),在剩下的16 bit中,8 bit用于子网号, 8 bit用于主机号,格式如图3 - 5所示。这样
就允许有2 5 4个子网,每个子网可以有2 5 4台主机。
图3-5 B类地址的一种子网编址
30使用TCP/IP详解,卷1:协议
下载
B类
16位8位8位
网络号=140.252 子网号主机号
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
许多管理员采用自然的划分方法,即把B类地址中留给主机的16 bit中的前8 bit作为子网
地址,后8 b i t作为主机号。这样用点分十进制方法表示的I P地址就可以比较容易确定子网号。
但是,并不要求A类或B类地址的子网划分都要以字节为划分界限。
大多数的子网例子都是B类地址。其实,子网还可用于C类地址,只是它可用的比特数较
少而已。很少出现A类地址的子网例子是因为A类地址本身就很少(但是,大多数A类地址都
是进行子网划分的)。
子网对外部路由器来说隐藏了内部网络组织(一个校园或公司内部)的细节。在我们的
网络例子中,所有的I P地址都有一个B类网络号1 4 0 . 2 5 2。但是其中有超过3 0个子网,多于4 0 0
台主机分布在这些子网中。由一台路由器提供了I n t e r n e t的接入,如图3 - 6所示。
在这个图中,我们把大多数的路由器编号为Rn,n是子网号。我们给出了连接这些子网的
路由器,同时还包括了扉页前图中的九个系统。在图中,以太网用粗线表示,点对点链路用
虚线表示。我们没有画出不同子网中的所有主机。例如,在子网1 4 0 . 2 5 2 . 3上,就超过5 0台主
机,而在子网1 4 0 . 2 5 2 . 1上则超过1 0 0台主机。
与3 0个C类地址相比,用一个包含3 0个子网的B类地址的好处是,它可以缩小I n t e r n e t路由
表的规模。B类地址1 4 0 . 2 5 2被划分为若干子网的事实对于所有子网以外的I n t e r n e t路由器都是
透明的。为了到达I P地址开始部分为1 4 0 . 2 5 2的主机,外部路由器只需要知道通往I P地址
1 4 0 . 2 5 2 . 1 0 4 . 1的路径。这就是说,对于网络1 4 0 . 2 5 2只需一个路由表目,而如果采用3 0个C类
地址,则需要3 0个路由表目。因此,子网划分缩减了路由表的规模(在1 0 . 8小节中,我们将
介绍一种新技术,即使用C类地址也可以缩减路由表的规模)。
子网对于子网内部的路由器是不透明的。如图3 - 6所示,一份来自I n t e r n e t的数据报到达
g a t e w a y,它的目的地址是1 4 0 . 2 5 2 . 5 7 . 1。路由器g a t e w a y需要知道子网号是5 7,然后把它
送到k p n o。同样,k p n o必须把数据报送到R 5 5,最后由R 5 5把它送到R 5 7。
图3-6 网络noao.edu(140.252)中的大多数子网安排
第3章IP:网际协议使用31
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
3.5 子网掩码
任何主机在引导时进行的部分配置是指定主机I P地址。大多数系统把I P地址存在一个磁
盘文件里供引导时读用。在第5章我们将讨论一个无盘系统如何在引导时获得I P地址。
除了I P地址以外,主机还需要知道有多少比特用于子网号及多少比特用于主机号。这是
在引导过程中通过子网掩码来确定的。这个掩码是一个32 bit的值,其中值为1的比特留给网
络号和子网号,为0的比特留给主机号。图3 - 7是一个B类地址的两种不同的子网掩码格式。第
一个例子是n o a o . e d u网络采用的子网划分方法,如图3 - 5所示,子网号和主机号都是8 bit宽。
第二个例子是一个B类地址划分成10 bit的子网号和6 bit的主机号。
图3-7 两种不同的B类地址子网掩码的例子
尽管I P地址一般以点分十进制方法表示,但是子网掩码却经常用十六进制来表示,特别
是当界限不是一个字节时,因为子网掩码是一个比特掩码。
给定I P地址和子网掩码以后,主机就可以确定I P数据报的目的是:( 1)本子网上的主机;
(2)本网络中其他子网中的主机;( 3)其他网络上的主机。如果知道本机的I P地址,那么就知道
它是否为A类、B类或C类地址(从I P地址的高位可以得知),也就知道网络号和子网号之间的分
界线。而根据子网掩码就可知道子网号与主机号之间的分界线。
举例
假设我们的主机地址是1 4 0 . 2 5 2 . 1 . 1(一个B类地址),而子网掩码为2 5 5 . 2 5 5 . 2 5 5 . 0(其中8
b i t为子网号, 8 bit为主机号)。
• 如果目的I P地址是1 4 0 . 2 5 2 . 4 . 5,那么我们就知道B类网络号是相同的( 1 4 0 . 2 5 2),但是
子网号是不同的(1和4)。用子网掩码在两个I P地址之间的比较如图3 - 8所示。
• 如果目的I P地址是1 4 0 . 2 5 2 . 1 . 2 2,那么B类网络号还是一样的( 1 4 0 . 2 5 2),而且子网号也
是一样的( 1),但是主机号是不同的。
• 如果目的I P地址是1 9 2 . 4 3 . 2 3 5 . 6(一个C类地址),那么网络号是不同的,因而进一步的
比较就不用再进行了。
图3-8 使用子网掩码的两个B类地址之间的比较
32使用TCP/IP详解,卷1:协议
下载
16位8位8位
16位10位8位
B类
子网掩码
子网掩码
B类
网络号
网络号子网号主机号
子网号主机号
B类网络号末尾指明的子网号末尾
16位8位8位
网络号相符子网号不相等
B类
B类
子网掩码
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
给定两个I P地址和子网掩码后, I P路由选择功能一直进行这样的比较。
3.6 特殊情况的IP地址
经过子网划分的描述,现在介绍7个特殊的I P地址,如图3 - 9所示。在这个图中, 0表示所
有的比特位全为0;- 1表示所有的比特位全为1;n e t i d、s u b n e t i d和h o s t i d分别表示不为全0或全
1的对应字段。子网号栏为空表示该地址没有进行子网划分。
图3-9 特殊情况的IP地址
我们把这个表分成三个部分。表的头两项是特殊的源地址,中间项是特殊的环回地址,
最后四项是广播地址。
表中的头两项,网络号为0,如主机使用B O O T P协议确定本机I P地址时只能作为初始化过
程中的源地址出现。
在1 2 . 2节中,我们将进一步分析四类广播地址。
3.7 一个子网的例子
这个例子是本文中采用的子网,以及如何使用两个不同的子网掩码。具体安排如图3 - 1 0
所示。
图3-10 作者所在子网中的主机和网络安排
如果把该图与扉页前图相比,就会发现在图3 - 1 0中省略了从路由器s u n到上面的以太网之
间的连接细节,实际上它们之间的连接是拨号S L I P。这个细节不影响本节中讨论的子网划分
第3章IP:网际协议使用33
下载
IP 地址可以为
描述
网络号子网号主机号源端目的端
0 0 O K 不可能网络上的主机(参见下面的限制)
0 主机号O K 不可能网络上的特定主机(参见下面的限制)
1 2 7 任何值O K O K 环回地址( 2 . 7节)
-1 -1 不可能O K 受限的广播(永远不被转发)
n e t i d -1 不可能O K 以网络为目的向n e t i d广播
n e t i d s u b n e t i d -1 不可能O K 以子网为目的向n e t i d、s u b n e t i d广播
n e t i d -1 -1 不可能O K 以所有子网为目的向n e t i d广播
以太网,子网140.252.1
以太网,子网140.252.13.32
作者所在子网140.252.13
SLIP子网
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
问题。我们在4 . 6节讨论A R P代理时将再回头讨论这个细节。
问题是我们在子网1 3中有两个分离的网络:一个以太网和一个点对点链路(硬件连接的
S L I P链路)(点对点链接始终会带来问题,因为它一般在两端都需要I P地址)。将来或许会有
更多的主机和网络,但是为了不让主机跨越不同的网络就得使用不同的子网号。我们的解决
方法是把子网号从8 bit 扩充到11 b i t,把主机号从8 bit 减为5 bit 。这就叫作变长子网,因为
1 4 0 . 2 5 2网络中的大多数子网都采用8 bit 子网掩码,而我们的子网却采用11 bit的子网掩码。
RFC 1009[Braden and Postel 1987]允许一个含有子网的网络使用多个子网掩码。新
的路由器需求RFC[Almquist 1993]则要求支持这一功能。
但是,问题在于并不是所有的路由选择协议在交换目的网络时也交换子网掩码。
在第1 0章中,我们将看到R I P不支持变长子网,R I P第2版和O S P F则支持变长子网。在
我们的例子中不存在这种问题,因为在我的子网中不要求使用RIP协议。
作者子网中的I P地址结构如图3 - 11所示,11位子网号中的前8 bit始终是1 3。在剩下的3 bit
中,我们用二进制0 0 1表示以太网,0 1 0表示点对点S L I P链路。这个变长子网掩码在1 4 0 . 2 5 2网
络中不会给其他主机和路由器带来问题—只要目的是子网1 4 0 . 2 5 2 . 1 3的所有数据报都传给路
由器s u n(I P地址是1 4 0 . 2 5 2 . 1 . 2 9),如图3 - 11所示。如果s u n知道子网1 3中的主机有11 bit子
网号,那么一切都好办了。
图3-11 变长子网
1 4 0 . 2 5 2 . 1 3子网中的所有接口的子网掩码是2 5 5 . 2 5 5 . 2 5 5 . 2 2 4,或0 x ffffff e 0。这表明最右边
的5 bit 留给主机号,左边的27 bit留给网络号和子网号。
图3 - 1 0中所有接口的I P地址和子网掩码的分配情况如图3 - 1 2所示。
图3-12 作者子网的IP地址
第1栏标为是“主机”,但是s u n和b s d i也具有路由器的功能,因为它们是多接口的,可
以把分组数据从一个接口转发到另一个接口。
这个表中的最后一行是图3 - 1 0中的广播地址1 4 0 . 2 5 2 . 1 3 . 6 3:它是根据以太网子网号
(1 4 0 . 2 5 2 . 1 3 . 3 2)和图3 - 11中的低5位置1(1 6+8+4+2+1=3 1)得来的(我们在第1 2章中将
看到,这个地址被称作以子网为目的的广播地址( subnet-directed broadcast address))。
34使用TCP/IP详解,卷1:协议
下载
8位=13
16位11位
B类
子网掩码
5位
网络号=140.252 子网号ID 主机号ID
主机IP地址子网掩码网络号子网号主机号注释
在子网1上
在作者所在子网上
在以太网上
点对点
点对点
以太网上的广播地址
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
3.8 ifconfig命令
到目前为止,我们已经讨论了链路层和I P层,现在可以介绍T C P / I P对网络接口进行配置
和查询的命令了。i f c o n f i g( 8 )命令一般在引导时运行,以配置主机上的每个接口。
由于拨号接口可能会经常接通和挂断(如S L I P 链路),每次线路接通和挂断时,
i f c o n f i g都必须(以某种方法)运行。这个过程如何完成取决于使用的S L I P软件。
下面是作者子网接口的有关参数。请把它们与图3 - 1 2的值进行比较。
环回接口( 2 . 7节)被认为是一个网络接口。它是一个A类地址,没有进行子网划分。
需要注意的是以太网没有采用尾部封装( 2 . 3节),而且可以进行广播,而S L I P链路是一
个点对点的链接。
S L I P接口的标志L I N K 0是一个允许压缩s l i p的数据(C S L I P,参见2 . 5节)的配置选项。其
他的选项有L I N K 1(如果从另一端收到一份压缩报文,就允许采用C S L I P)和L I N K 2(所有
外出的I C M P报文都被丢弃)。我们在4 . 6节中将讨论S L I P链接的目的地址。
安装指南中的注释对最后这个选项进行了解释:“一般它不应设置,但是由于一些
不当的ping操作,可能会导致吞吐量降到0。”
b s d i是另一台路由器。由于- a参数是S u n O S操作系统具有的功能,因此我们必须多次执
行i f c o n f i g,并指定接口名字参数:
这里,我们看到以太网接口( w e 0)的一个新选项: S I M P L E X。这个4 . 4 B S D标志表明接
口不能收到本机传送的数据。在B S D / 3 8 6中所有的以太网都这样设置。一旦这样设置后,如
果接口发送一帧数据到广播地址,那么就会为本机拷贝一份数据送到环回地址(在6 . 3小节我
们将举例说明这一点)。
在主机s l i p中,S L I P接口的设置基本上与上面的b s d i一致,只是两端的I P地址进行了互换:
slip % /sbin/ifconfig sl0
sl0: flags=1011<UP,POINTOPOINT,LINK0>
inet 140.252.13.65 --> 140.252.13.66 netmask ffffffe0
最后一个接口是主机s v r 4上的以太网接口。它与前面的以太网接口类似,只是S V R 4版
的i f c o n f i g没有打印R U N N I N G标志:
svr4 % /usr/sbin/ifconfig emd0
emd0: flags=23<UP,BROADCAST,NOTRAILERS>
inet 140.252.13.34 netmask ffffffe0 broadcast 140.252.13.63
第3章IP:网际协议使用35
下载
在所有接口报告的选项
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
i f c o n f i g命令一般支持T C P / I P以外的其他协议族,而且有很多参数。关于这些细节可
以查看系统说明书。
3.9 netstat命令
n e t s t a t( 1 )命令也提供系统上的接口信息。- i参数将打印出接口信息, - n参数则打印出
I P地址,而不是主机名字。
这个命令打印出每个接口的M T U、输入分组数、输入错误、输出分组数、输出错误、冲
突以及当前的输出队列长度。
在第9章将用n e t s t a t命令检查路由表,那时再回头讨论该命令。另外,在第1 3章将用
它的一个改进版本来查看活动的广播组。
3.10 IP的未来
I P主要存在三个方面的问题。这是I n t e r n e t在过去几年快速增长所造成的结果(参见习题
1 . 2)。
1) 超过半数的B类地址已被分配。根据估计,它们大约在1 9 9 5年耗尽。
2) 32 bit的I P地址从长期的I n t e r n e t增长角度来看,一般是不够用的。
3) 当前的路由结构没有层次结构,属于平面型( f l a t )结构,每个网络都需要一个路由表目。
随着网络数目的增长,一个具有多个网络的网站就必须分配多个C类地址,而不是一个B类地
址,因此路由表的规模会不断增长。
无类别的域间路由选择C I D R(Classless Interdomain Routing)提出了一个可以解决第三
个问题的建议,对当前版本的I P(I P版本4)进行扩充,以适应2 1世纪I n t e r n e t的发展。对此我
们将在1 0 . 8节进一步详细介绍。
对新版的I P,即下一代I P,经常称作I P n g,主要有四个方面的建议。1 9 9 3年5月发行的
IEEE Network (vol.7, no.3) 对前三个建议进行了综述,同时有一篇关于C I D R的论文。R F C
1454 [Dixon 1993]对前三个建议进行了比较。
1) SIP,简单I n t e r n e t协议。它针对当前的I P提出了一个最小幅度的修改建议,采用6 4位地
址和一个不同的首部格式(首部的前4比特仍然包含协议的版本号,其值不再是4)。
2) PIP。这个建议也采用了更大的、可变长度的和有层次结构的地址,而且首部格式也不
相同。
3) TUBA, 代表“ TCP and UDP with Bigger Address ”, 它基于OSI 的C L N P
(Connectionless Network Protocol,无连接网络协议),一个与I P类似的O S I协议。它提供大得
多的地址空间:可变长度,可达2 0个字节。由于C L N P是一个现有的协议,而S I P和P I P只是建
议,因此关于C L N P的文档已经出现。RFC 1347[Callon 1992]提供了T U B A的有关细节。文献
[Perlman 1992]的第7章对I P v 4和C L N P进行了比较。许多路由器已经支持C L N P,但是很少有
主机也提供支持。
36使用TCP/IP详解,卷1:协议
下载
该书下载自-书部落-分享计算机经典巨著!--www.shubulo.com!仅供试看^_^
4) TP/IX,由RFC 1475 [Ullmann 1993]对它进行了描述。虽然S I P采用了64 bit的址址,但
是它还改变了T C P和U D P的格式:两个协议均为32 bit的端口号,64 bit的序列号,64 bit的确
认号,以及T C P的32 bit窗口。
前三个建议基本上采用了相同版本的T C P和U D P作为传输层协议。
由于四个建议只能有一个被选为I P v 4的替换者,而且在你读到此书时可能已经做出选择,
因此我们对它们不进行过多评论。虽然C I D R即将实现以解决目前的短期问题,但是I P v 4后继
者的实现则需要经过许多年。
3.11 小结
本章开始描述了I P首部的格式,并简要讨论了首部中的各个字段。我们还介绍了I P路由
选择,并指出主机的路由选择可以非常简单:如果目的主机在直接相连的网络上,那么就把
数据报直接传给目的主机,否则传给默认路由器。
在进行路由选择决策时,主机和路由器都使用路由表。在表中有三种类型的路由:特定
主机型、特定网络型和默认路由型。路由表中的表目具有一定的优先级。在选择路由时,主
机路由优先于网络路由,最后在没有其他可选路由存在时才选择默认路由。
I P路由选择是通过逐跳来实现的。数据报在各站的传输过程中目的I P地址始终不变,但
是封装和目的链路层地址在每一站都可以改变。大多数的主机和许多路由器对于非本地网络
的数据报都使用默认的下一站路由器。
A类和B类地址一般都要进行子网划分。用于子网号的比特数通过子网掩码来指定。我们
为此举了一个实例来详细说明,即作者所在的子网,并介绍了变长子网的概念。子网的划分
缩小了I n t e r n e t路由表的规模,因为许多网络经常可以通过单个表目就可以访问了。接口和网
络的有关信息通过i f c o n f i g和n e t s t a t命令可以获得,包括接口的I P地址、子网掩码、广
播地址以及M T U等。
在本章的最后,我们对I n t e r n e t协议族潜在的改进建议—下一代I P进行了讨论。
习题
3.1 环回地址必须是1 2 7 . 0 . 0 . 1吗?
3.2 在图3 - 6中指出有两个网络接口的路由器。
3.3 子网号为16 bit的A类地址与子网号为8 bit 的B类地址的子网掩码有什么不同?
3.4 阅读RFC 1219 [Tsuchiya 1991],学习分配子网号和主机号的有关推荐技术。
3.5 子网掩码2 5 5 . 2 5 5 . 0 . 2 5 5是否对A类地址有效?
3.6 你认为为什么3 . 9小节中打印出来的环回接口的M T U要设置为1 5 3 6?
3.7 T C P / I P协议族是基于一种数据报的网络技术,即I P层,其他的协议族则基于面向连接的
网络技术。阅读文献[Clark 1988],找出数据报网络层提供的三个优点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值