003网际协议.docx

上传人:b****5 文档编号:8736655 上传时间:2023-02-01 格式:DOCX 页数:22 大小:188.16KB
下载 相关 举报
003网际协议.docx_第1页
第1页 / 共22页
003网际协议.docx_第2页
第2页 / 共22页
003网际协议.docx_第3页
第3页 / 共22页
003网际协议.docx_第4页
第4页 / 共22页
003网际协议.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

003网际协议.docx

《003网际协议.docx》由会员分享,可在线阅读,更多相关《003网际协议.docx(22页珍藏版)》请在冰豆网上搜索。

003网际协议.docx

003网际协议

下载

 

第3章IP:

网际协议

 

3.1引言

IP是TCP/IP协议族中最为核心的协议。

所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输(见图1-4)。

许多刚开始接触TCP/IP的人对IP提供不可靠、无连接的数据报传送服务感到很奇怪,特别是那些具有X.25或SNA背景知识的人。

不可靠(unreliable)的意思是它不能保证IP数据报能成功地到达目的地。

IP仅提供最好的传输服务。

如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:

丢弃该数据报,然后发送ICMP消息报给信源端。

任何要求的可靠性必须由上层来提供(如TCP)。

无连接(connectionless)这个术语的意思是IP并不维护任何关于后续数据报的状态信息。

每个数据报的处理是相互独立的。

这也说明,IP数据报可以不按发送顺序接收。

如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。

在本章,我们将简要介绍IP首部中的各个字段,讨论IP路由选择和子网的有关内容。

还要介绍两个有用的命令:

ifconfig和netstat。

关于IP首部中一些字段的细节,将留在以后使用这些字段的时候再进行讨论。

RFC791[Postel1981a]是IP的正式规范文件。

3.2IP首部

IP数据报的格式如图3-1所示。

普通的IP首部长为20个字节,除非含有选项字段。

4位4位首部版本长度

16位标识

8位服务类型(TOS)

16位总长度(字节数)

3位13位片偏移标志

8位生存时间

8位协议

16位首部检验和

20字节

32位源IP地址

32位目的IP地址

选项(如果有)

 

数据

 

图3-1IP数据报格式及首部中的各字段

分析图3-1中的首部。

最高位在左边,记为0bit;最低位在右边,记为31bit。

4个字节的32bit值以下面的次序传输:

首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。

这种传输次序称作bigendian字节序。

由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。

以其他形式存储二进制整数的机器,如littleendian格式,则必须在传输数据之前把首部转换成网络字节序。

目前的协议版本号是4,因此IP有时也称作IPv4。

3.10节将对一种新版的IP协议进行讨论。

首部长度指的是首部占32bit字的数目,包括任何选项。

由于它是一个4比特字段,因此首部最长为60个字节。

在第8章中,我们将看到这种限制使某些选项如路由记录选项在当今已

没有什么用处。

普通IP数据报(没有任何选择项)字段的值是5。

服务类型(TOS)字段包括一个3bit的优先权子字段(现在已被忽略),4bit的TOS子字

段和1bit未用位但必须置0。

4bit的TOS分别代表:

最小时延、最大吞吐量、最高可靠性和最小费用。

4bit中只能置其中1bit。

如果所有4bit均为0,那么就意味着是一般服务。

RFC1340[ReynoldsandPostel1992]描述了所有的标准应用如何设置这些服务类型。

RFC1349[Almquist1992]对该RFC进行了修正,更为详细地描述了TOS的特性。

图3-2列出了对不同应用建议的TOS值。

在最后一列中给出的是十六进制值,因为这就是在后面将要看到的tcpdump命令输出。

制值

应用程序最小时延最大吞吐量最高可靠性最小费用16进

 

控制数据任意块数据

 

命令阶段数据阶段

UDP查询TCP查询区域传输

差错查询任何IGP

 

图3-2服务类型字段推荐值

Telnet和Rlogin这两个交互应用要求最小的传输时延,因为人们主要用它们来传输少量的交互数据。

另一方面,FTP文件传输则要求有最大的吞吐量。

最高可靠性被指明给网络管理

(SNMP)和路由选择协议。

用户网络新闻(Usenetnews,NNTP)是唯一要求最小费用的应用。

现在大多数的TCP/IP实现都不支持TOS特性,但是自4.3BSDReno以后的新版系统都对它进行了设置。

另外,新的路由协议如OSPF和IS-IS都能根据这些字段的值进行路由决策。

在2.10节中,我们提到SLIP一般提供基于服务类型的排队方法,允许对交互通信

数据在处理大块数据之前进行处理。

由于大多数的实现都不使用TOS字段,因此这种排队机制由SLIP自己来判断和处理,驱动程序先查看协议字段(确定是否是一个TCP段),然后检查TCP信源和信宿的端口号,以判断是否是一个交互服务。

一个驱动程序的注释这样认为,这种“令人厌恶的处理方法”是必需的,因为大多数实现都不允许应用程序设置TOS字段。

总长度字段是指整个IP数据报的长度,以字节为单位。

利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度。

由于该字段长16比特,所以IP数据报最长可达65535字节(回忆图2-5,超级通道的MTU为65535。

它的意思其实不是一个真正的MTU—它使用了最长的IP数据报)。

当数据报被分片时,该字段的值也随着变化,这一点将在11.5节中进一步描述。

尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都会对它进行分片。

而且,主机也要求不能接收超过576字节的数据报。

由于TCP把用户数据分成若干片,因此一般来说这个限制不会影响TCP。

在后面的章节中将遇到大量使用UDP的应用(RIP,TFTP,BOOTP,DNS,以及SNMP),它们都限制用户数据报长度为512字节,小于576字节。

但是,事实上现在大多数的实现(特别是那些支持网络文件系统NFS的实现)允许超过8192字节的IP数据报。

总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。

尽管以太网的最小帧长为46字节(见图2-1),但是IP数据可能会更短。

如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容。

标识字段唯一地标识主机发送的每一份数据报。

通常每发送一份报文它的值就会加1。

11.5节介绍分片和重组时再详细讨论它。

同样,在讨论分片时再来分析标志字段和片偏移字段。

RFC791[Postel1981a]认为标识字段应该由让IP发送数据报的上层来选择。

假设有两个连续的IP数据报,其中一个是由TCP生成的,而另一个是由UDP生成的,那么它们可能具有相同的标识字段。

尽管这也可以照常工作(由重组算法来处理),但是在大多数从伯克利派生出来的系统中,每发送一个IP数据报,IP层都要把一个内核变量的值加

1,不管交给IP的数据来自哪一层。

内核变量的初始值根据系统引导时的时间来设置。

TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。

它指定了数据报的生存时间。

TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。

当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。

第8章我们讨论Traceroute程序时将再回来讨论该字段。

我们已经在第1章讨论了协议字段,并在图1-8中示出了它如何被IP用来对数据报进行分用。

根据它可以识别是哪个协议向IP传送数据。

首部检验和字段是根据IP首部计算的检验和码。

它不对首部后面的数据进行计算。

ICMP、

IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。

为了计算一份数据报的IP检验和,首先把检验和字段置为0。

然后,对首部中每个16bit

进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。

当收到一份IP数据报后,同样对首部中每个16bit进行二进制反码的求和。

由于接收方在计算过

程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。

如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。

但是不生成差错报文,由上层去发现丢失的数据报并进行重传。

ICMP、IGMP、UDP和TCP都采用相同的检验和算法,尽管TCP和UDP除了本身的首部和数据外,在IP首部中还包含不同的字段。

在RFC1071[Braden,BormanandPatridge1988]中有关于如何计算Internet检验和的实现技术。

由于路由器经常只修改TTL字段(减1),因此当路由器转发一份报文时可以增加它的检验和,而不需要对IP整个首部进行重新计算。

RFC

1141[MalloryandKullberg1990]为此给出了一个很有效的方法。

但是,标准的BSD实现在转发数据报时并不是采用这种增加的办法。

每一份IP数据报都包含源IP地址和目的IP地址。

我们在1.4节中说过,它们都是32bit的

值。

最后一个字段是任选项,是数据报中的一个可变长的可选信息。

目前,这些任选项定义如下:

•安全和处理限制(用于军事领域,详细内容参见RFC1108[Kent1991])

•记录路径(让每个路由器都记下它的IP地址,见7.3节)

•时间戳(让每个路由器都记下它的IP地址和时间,见7.4节)

•宽松的源站选路(为数据报指定一系列必须经过的IP地址,见8.5节)

•严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。

这些选项很少被使用,并非所有的主机和路由器都支持这些选项。

选项字段一直都是以32bit作为界限,在必要的时候插入值为0的填充字节。

这样就保证

IP首部始终是32bit的整数倍(这是首部长度字段所要求的)。

3.3IP路由选择

从概念上说,IP路由选择是简单的,特别对于主机来说。

如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上。

否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。

大多数的主机都是采用这种简单机制。

在本节和第9章中,我们将讨论更一般的情况,即IP层既可以配置成路由器的功能,也可以配置成主机的功能。

当今的大多数多用户系统,包括几乎所有的Unix系统,都可以配置成一个路由器。

我们可以为它指定主机和路由器都可以使用的简单路由算法。

本质上的区别在于主机从不把数据报从一个接口转发到另一个接口,而路由器则要转发数据报。

内含路由器功能的主机应该从不转发数据报,除非它被设置成那样。

在9.4小节中,我们将进一步讨论配置的有关问题。

在一般的体制中,IP可以从TCP、UDP、ICMP和IGMP接收数据报(即在本地生成的数据报)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)并进行发送。

IP层在内存中有一个路由表。

当收到一份数据报并进行发送时,它都要对该表搜索一次。

当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。

如果确实是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。

如果数据报的

目的不是这些地址,那么

(1)如果IP层被设置为路由器的功能,那么就对数据报进行转发

(也就是说,像下面对待发出的数据报一样处理);否则

(2)数据报被丢弃。

路由表中的每一项都包含下面这些信息:

•目的IP地址。

它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标

志字段来指定(如下所述)。

主机地址有一个非0的主机号(见图1-5),以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网)。

•下一站(或下一跳)路由器(next-hoprouter)的IP地址,或者有直接连接的网络IP地

址。

下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。

下一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。

•标志。

其中一个标志指明目的IP地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口(我们将在9.2节中详细介绍这些标志)。

•为数据报的传输指定一个网络接口。

IP路由选择是逐跳地(hop-by-hop)进行的。

从这个路由表信息可以看出,IP并不知道到达任何目的的完整路径(当然,除了那些与主机直接相连的目的)。

所有的IP路由选择只为数据报传输提供下一站路由器的IP地址。

它假定下一站路由器比发送数据报的主机更接近目的,而且下一站路由器与该主机是直接相连的。

IP路由选择主要完成以下这些功能:

1)搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。

如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。

2)搜索路由表,寻找能与目的网络号相匹配的表目。

如果找到,则把报文发送给该表目

指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。

目的网络上的所有主机都可以通过这个表目来处置。

例如,一个以太网上的所有主机都是通过这种表目进行寻径的。

这种搜索网络的匹配方法必须考虑可能的子网掩码。

关于这一点我们在下一节中进行讨论。

3)搜索路由表,寻找标为“默认(default)”的表目。

如果找到,则把报文发送给该表目指定的下一站路由器。

如果上面这些步骤都没有成功,那么该数据报就不能被传送。

如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。

完整主机地址匹配在网络号匹配之前执行。

只有当它们都失败后才选择默认路由。

默认

路由,以及下一站路由器发送的ICMP间接报文(如果我们为数据报选择了错误的默认路由),是IP路由选择机制中功能强大的特性。

我们在第9章对它们进行讨论。

为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这是IP路由选择机制的另一个基本特性。

这样做可以极大地缩小路由表的规模,比如Internet上的路由器有只有几千个表目,而不会是超过100万个表目。

举例

首先考虑一个简单的例子:

我们的主机bsdi有一个IP数据报要发送给主机sun。

双方都在

同一个以太网上(参见扉页前图)。

数据报的传输过程如图3-3所示。

当IP从某个上层收到这份数据报后,它搜索路由表,发现目的IP地址(140.252.13.33)在

一个直接相连的网络上(以太网140.252.13.0)。

于是,在表中找到匹配网络地址(在下一节中,我们将看到,由于以太网的子网掩码的存在,实际的网络地址是140.252.13.32,但是这并不影响这里所讨论的路由选择)。

数据报被送到以太网驱动程序,然后作为一个以太网数据帧被送到sun主机上

(见图2-1)。

IP数据报中的目的地址是

sun的IP地址(140.252.13.33),而在链

目的网络=

140.252,13,0

 

以太网140.252.13

链路层IP首

路层首部中的目的地址是48bit的sun主机的以太网接口地址。

这个48bit的以太网地址是用ARP协议获得的,我们将在下一章对此进行描述。

首部部

目的目的

图3-3数据报从主机bsdi到sun的传送过程

现在来看另一个例子:

主机bsdi有一份IP数据报要传到主机上,它的IP地址是192.48.96.9。

经过的前三个路由器如图3-4所示。

首先,主机bsdi搜索路由表,但是没有找到与主机地址或网络地址相匹配的表目,因此只能用默认的表目,把数据报传给下一站路由器,即主机sun。

当数据报从bsdi被传到sun主机上以后,目的IP地址是最终的信宿机地址(192.48.96.9),但是链路层地址却是sun主机的以太网接口地址。

这与图3-3不同,在那里数据报中的目的IP地址和目的链路层地址都指的是相同的主机(sun)。

目的以太网=以太网的140.252.1.4

目的IP=192.48.96.9

下一站=

140.252.104.2(默认)

链路层IP

首部首部

以太网,140.252.1

 

调制解调器

下一站=

140.252.1.4(默认)

IP

首部

调制解调器

目的IP=192.48.96.9

下一站=

140.252.13.33(默认)

下一站=

140.252.1.183(默认)

以太网,140.252.13

链路层IP

首部首部

目的IP=192.48.96.9

目的以太网=以太网的140.252.13.33

图3-4从bsdi到(192.48.96.9)的初始路径

当sun收到数据报后,它发现数据报的目的IP地址并不是本机的任一地址,而sun已被设置成具有路由器的功能,因此它把数据报进行转发。

经过搜索路由表,选用了默认表目。

根据sun的默认表目,它把数据报转发到下一站路由器netb,该路由器的地址是140.252.1.183。

数据报是经过点对点SLIP链路被传送的,采用了图2-2所示的最小封装格式。

这里,我们没有给出像以太网链路层数据帧那样的首部,因为在SLIP链路中没有那样的首部。

当netb收到数据报后,它执行与sun主机相同的步骤:

数据报的目的地址不是本机地址,而netb也被设置成具有路由器的功能,于是它也对该数据报进行转发。

采用的也是默认路由表目,把数据报送到下一站路由器gateway(140.252.1.4)。

位于以太网140.252.1上的主机netb用ARP获得对应于140.252.1.4的48bit以太网地址。

这个以太网地址就是链路层数据帧头上的目的地址。

路由器gateway也执行与前面两个路由器相同的步骤。

它的默认路由表目所指定的下一站路由器IP地址是140.252.104.2(我们将在图8-4中证实,使用Traceroute程序时,它就是gateway使用的下一站路由器)。

对于这个例子需要指出一些关键点:

1)该例子中的所有主机和路由器都使用了默认路由。

事实上,大多数主机和一些路由器可以用默认路由来处理任何目的,除非它在本地局域网上。

2)数据报中的目的IP地址始终不发生任何变化(在8.5节中,我们将看到,只有使用源路由选项时,目的IP地址才有可能被修改,但这种情况很少出现)。

所有的路由选择决策都是基于这个目的IP地址。

3)每个链路层可能具有不同的数据帧首部,而且链路层的目的地址(如果有的话)始终指的是下一站的链路层地址。

在例子中,两个以太网封装了含有下一站以太网地址的链路层首部,但是SLIP链路没有这样做。

以太网地址一般通过ARP获得。

在第9章,我们在描述了ICMP之后将再次讨论IP路由选择问题。

我们将看到一些路由表的例子,以及如何用它们来进行路由决策的。

3.4子网寻址

现在所有的主机都要求支持子网编址(RFC950[MogulandPostel1985])。

不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。

这样做的原因是因为A类和B类地址为主机号分配了太多的空间,可分别容纳的主机数为

224-2和216-2。

事实上,在一个网络中人们并不安排这么多的主机(各类IP地址的格式如图1-5

所示)。

由于全0或全1的主机号都是无效的,因此我们把总数减去2。

在InterNIC获得某类IP网络号后,就由当地的系统管理员来进行分配,由他(或她)来决

定是否建立子网,以及分配多少比特给子网号和主机号。

例如,这里有一个B类网络地址

(140.252),在剩下的16bit中,8bit用于子网号,8bit用于主机号,格式如图3-5所示。

这样就允许有254个子网,每个子网可以有254台主机。

16位8位8位

B类网络号=140.252

子网号

主机号

 

图3-5B类地址的一种子网编址

许多管理员采用自然的划分方法,即把B类地址中留给主机的16bit中的前8bit作为子网地址,后8bit作为主机号。

这样用点分十进制方法表示的IP地址就可以比较容易确定子网号。

但是,并不要求A类或B类地址的子网划分都要以字节为划分界限。

大多数的子网例子都是B类地址。

其实,子网还可用于C类地址,只是它可用的比特数较少而已。

很少出现A类地址的子网例子是因为A类地址本身就很少(但是,大多数A类地址都是进行子网划分的)。

子网对外部路由器来说隐藏了内部网络组织(一个校园或公司内部)的细节。

在我们的网络例子中,所有的IP地址都有一个B类网络号140.252。

但是其中有超过30个子网,多于400台主机分布在这些子网中。

由一台路由器提供了Internet的接入,如图3-6所示。

在这个图中,我们把大多数的路由器编号为Rn,n是子网号。

我们给出了连接这些子网的路由器,同时还包括了扉页前图中的九个系统。

在图中,以太网用粗线表示,点对点链路用虚线表示。

我们没有画出不同子网中的所有主机。

例如,在子网140.252.3上,就超过50台主机,而在子网140.252.1上则超过100台主机。

与30个C类地址相比,用一个包含30个子网的B类地址的好处是,它可以缩小Internet路由表的规模。

B类地址140.252被划分为若干子网的事实对于所有子网以外的Internet路由器都是透明的。

为了到达IP地址开始部分为140.252的主机,外部路由器只需要知道通往IP地址

140.252.104.1的路径。

这就是说,对于网络140.252只需一个路由表目,而如果采用30个C类地址,则需要30个路由表目。

因此,子网划分缩减了路由表的规模(在10.8小节中,我们将介绍一种新技术,即使用C类地址也可以缩减路由表的规模)。

子网对于子网内部的路由器是不透明的。

如图3-6所示,一份来自Internet的数据报到达gateway,它的目的地址是140.252.57.1。

路由器gateway需要知道子网号是57,然后把它送到kpno。

同样,kpno必须把数据报送到R55,最后由R55把它送到R57。

图3-6网络noao.edu(140.252)中的大多数子网安排

3.5子网掩码

任何主机在引导时进行的部分配置是指定主机IP地址。

大多数系统把IP地址存在一个磁盘文件里供引导时读用。

在第5章我们将讨论一个无盘系统如何在引导时获得IP地址。

除了IP地址以外,主机还需要知道有多少比特

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1