TCP.IP网络编程_第1页
TCP.IP网络编程_第2页
TCP.IP网络编程_第3页
TCP.IP网络编程_第4页
TCP.IP网络编程_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第18章IP数据报和数据报转发18.1概述前面我们介绍了互联网的体系结构,因特网寻址以及用来将IP地址翻译成硬件地址的地址解析软件。本章我们将讨论互联网中基本的通讯服务,包括互联网中包的格式以及路由器如何处理和转发这些包。第19章接着讨论路由器如何利用底层硬件来传送包。无连接服务网络互联的目的是为了提供这样一种包通讯系统:一台计算机上运行的程序能够向另一台计算机上运行的程序发送数据。在一个设计良好的互联网中,底层物理网络对应用程序来说是透明的这些应用程序能够收发数据而又无须了解很多细节,比如本机所连的局域网目的机所连的远程网络以及两者之间的互联等等。协议的设计者必须决定互联网协议要提供哪些通讯

2、服务,以及如何高效地实现这些服务另外,设计者还须决定是否为程序提供面向连接(connection-oriented)的服务,或是无连接(connectionless)的服务,或是两者都提供。TCP/IP的设计者既提供了无连接服务,也提供了面向连接的服务:他们选择了无连接的基本传送服务(deliveryservice),并在这些无连接的底层服务之上增加了可靠的面向连接的服务。这一设计非常成功,以至于经常被其他的协议所模仿。18.3虚拟包无连接的互联网服务其实是包交换的一种扩展这种服务允许发送方通过互联网传输单独的包。每一个包独立地在网上传送,它本身包含了用以标识接收方的信息。一个包是如何在互联网

3、上传输的呢?答案就在于路由器将包从一个网转发到另一个网。源主机创建了一个包,将目的地址放入包的头部,然后将包送往相邻的路由器。当一个路由器收到一个包,就会使用包的目的地址来选择下一个路由器并向之转发。最终,包会到达这样一个路由器,此路由器能够直接将包传给它的最终目的地。一个互联网上的包的格式是怎样的呢?不幸的是,传统的硬件帧格式不适合作为互联网上的包格式。这是因为路由器能够连接异构网络,而不同类型网络的帧格式不同,因此路由器不能直接将包从一个网络传送到另一个网络。另外,路由器也不能简单地重新格式化帧的头部,因为两个网络可能使用不兼容的地址格式(例如,一个输入帧中的地址可能对另一个网络而言是毫无

4、意义的)。为了克服异构性,互联网协议软件定义了一种独立于底层硬件的互联网包格式。结果就产生了一种能无损地在底层硬件中传输的通用的(universal)、虚拟的(virtual)包(第19章将详细说明一个互联网包怎样在物理网中传输)。就像虚拟(virtual)词所示,协议软件负责产生和处理互联网包一底层硬件并不认识这种包的格式。又如通用(universal)词所示,互联网上的每一台主机或路由器都有认识这种包的协议软件。概述如下:由于路由器可能连接异构的网络,它就不能直接将网上送来帧的传给另一个网。为了克服异构性,一个互联网必须定义一种与硬件无关的包格式。18.4IP数据报TCP/IP协议使用IP

5、数据报(IPdatagram)这个名字来命名一个互联网包。令人惊奇的是,IP数据报竟然与硬件帧有同样的基本格式:IP数据报也是以一个头部开始,后跟数据区。图18-1例举了这种数据报格式。头部数据区图l&lIP数据报的基本格式:一个头部后跟着数摇区,头部舎有控制该包发往何地及如何发送的信息一个数据报携带的数据量不固定,发送方根据特定的用途选择合适的数据量。例如,一个应用若需要传送击键信息,则可以将每次击键放在单独的数据报中,而当一个应用要传送大文件时,则会发送大数据报。关键在于:数据报的尺寸取决于发送数据的应用。大小可变的数据报使得IP可以适应各种应用。在当前IP版本(版本4)中,一个数据报的数

6、据量可以小到一个字节,而数据报本身可以大到64K字节(包括头部)。在大部分数据报中,头部比数据区要小得多。为了理解这一点,有必要了解一下传输数据的开销。就像物理网络帧中的帧头,数据报的头部意味着开销传输头部所花费的时间中,并没有传输用户自己的数据。由于数据报头部的尺寸是固定的,发送大数据报导致单位时间内传送了更多的用户数据(即更高的吞吐率)。与帧头类似,数据报头部包含的信息是为了在互联网中寻径用。例如,头部包含发出该数据报的计算机地址和目的计算机的地址。当然,数据报头部的地址形式与帧头的地址形式是不同的数据报包含的是IP地址,而帧包含的是硬件地址。概述如下:一个通过TCP/IP互联网的包叫IP

7、数据报。每个数据报由一个头部和紧跟其后的数据区组成,数据报头部中源地址和目的地址都是IP地址。IP数据报的转发一个数据报沿着从源地址到目的地的一条路径穿过互联网,中间会经过很多路由器。路径上的每个路由器收到这个数据报时,先从头部取出目的地址,根据这个地址决定数据报该发往的下一站。然后路由器将此数据报转发给下一站,该下一站可能就是最终目的地,也可能是另一个路由器。为了使对下一站的选择高效而且便于理解,每个IP路由器在一张路由表(routingtable)中保存有很多路由信息。当一个路由器启动时,需对路由表进行初始化,而当网络的拓扑发生变化或某些硬件发生故障时,必须更新路由表。概念上说,路由表中每

8、一项都指定了一个目的地和为到达这个目的地所要经过的下一站。图18-2a)中,三个路由器将四个网络连接成为一个的互联网,b)是一个路由器中的路由表。网辂I;:O;鼬矽;一二邇聲a)目的地下一站net1R(uet2直接传送ner3直接传送b)图18-2a).,路由器将四个网络连接成个互联网的例子b)路由器也的槪念路由表,其中每一项列出一个目的网络和到达目的网络路径中的、一站如图所示,路由器R2直接连接网络2和网络3,因此,R2能将数据报直接发往连在这两个网络上的任何目的地。当一个数据报的目的地在网络4中时,R2就需将数据报发往路由器R3。路由表中列出的每个目的地是一个网络,而不是一个单独的主机。这

9、个差别非常重要,因为一个互联网中的主机数可能是网络数的1000倍以上。因而,使用网络作为目的地可以使路由表的尺寸变得较小。概述如下:由于路由表中的每个目的地对应于一个网络,路由表中的项数正比于互联网中的网络个数。IP地址与路由表项事实上,一个IP路由表比18-2图中的例子稍复杂一些。首先,每一项的目的地(Destination)域只包含目的地网络的网络前缀。第二,每项中有一个附加域包含了一个地址屏蔽码(addressmask),这个屏蔽码决定了目的地中的哪些位对应着网络前缀。第三,当下一站(NextHop)域指的是一个路由器时,将使用一个IP地址。图18-2的路由表在实际当中是以图18-3的形

10、式出现。(大部分互联网连接了不止四个网络,一个典型的路由表还应包含一个缺省路由,即一个对应于所有未在表中列出的目的地的项。)128.1.0.9ie2.4.ta.9H的地30.0.0.040.0.0.0128.1.0.0192.4J0.D屏蔽码255.000255.0.0.02&5.255.0.0255.255.255J下一站40.0.0.7deliverdirectdeliverdirect128J.D.9图1S-3叮艸牛個绪和二平贾由器纠用时一午互联阿,钳牛路中器接II分配一个IP也址K)是中间那亍第世器的路由表,蔓中每“坝列出一牛E的世.一个層敝码科對达E的地.的卜一站表中头两个网络都有一

11、个A类前缀,第三个网络有一个B类前缀,第四个网络有一个C类前缀。每个路由器被指定了两个IP地址,一个地址对应一个接口。例如,连接网络30.0.0.0和40.0.0.0的路由器被指定了地址30.0.0.7和40.0.0.7。尽管路由器的两个接口有同样的主机后缀,其实IP并不要求这种一致一一网络管理员可以自由地为每个接口指定不同的值。屏蔽码域和数据报转发使用路由表为数据报选择下一站的过程叫路由(routing)或转发(forwarding)。查表时屏蔽码域用来从一个IP地址中取出网络部分。为了理解屏蔽码是怎样使用的,想象一个路由正要转发一个数据报。假设数据报包含了目的地址D,路由软件必须在路由表中

12、找到指明D的下一站的那一项。为了做到这一点,软件检测路由器中的每一项,利用屏蔽码域提取地址D的前缀,并把结果与目的地域加以比较。如果相同,数据报将按该项中所指的下一站进行转发。屏蔽码的引入使得提取前缀的工作非常高效软件将屏蔽码与数据报目的地址D进行布尔与(and)运算。因而,检测表中第i项的计算过程可以表述如下:if(Maski&D)=Destinationi)forwardtoNextHopi;举一个例子,考虑一个目的地址为192.4.10.3的数据报,假设该数据报到达了一个包含图18-3所示路由表的路由器上,并假设软件顺序搜索表中每一项,则对于第一项,因为255.0.0.0&192.4.1

13、0.3不等于30.0.0.0,故匹配失败。同样,第二、三项都不符和,路由软件最终选择了地址为128.1.0.9的下一站,因为255.255.255.0&192.4.10.3=192.4.10.0目的地和下一站地址数据报头部的目的地址与其被转发的下一站地址之间到底有什么关系呢?数据报中的目的地IP地址(DESTINATIONIPADDRESS)域包含了最终目的地址。当路由器收到一个数据报,会取出目的地址D,用它来计算数据报将发往的下一路由器的地址No尽管这个数据报被直接发往地址N,但头部中仍保持着目的地址Do也就是说:一个数据报头部中的目的地址总是指最终目的地。当一个路由器将这个数据报转发给另一

14、个路由器时,下一站的地址并不在数据报头部里出现。所有的路由器都是使用IP地址进行计算的。在计算出下一站的地址N之后,IP软件使用第17章所述的地址联编技术将地址N翻译成等价的硬件地址以便传输。在下一章中,我们将讨论数据报是怎样穿过一个物理网络的。尽力传递除了定义互联网数据报格式,IP还定义了通信的语义,并使用“尽力而为”(best-effort)这个词来描述所提供的服务。从本质上讲,这个标准指出了尽管IP层会努力地尝试传递每个数据报,但并不保证处理以下问题:数据报重复。延迟传送或乱序传送。数据的损坏。数据报的丢失。以上问题都需要上层协议软件加以处理。IP层会出现这些问题也许看起来很奇怪,然而,

15、这里有一个重要的原因:每一层的协议软件各自只负责通信的某些方面,IP层就不负责处理以上问题。因而,当底层物理网络会出现以上的这些问题时,使用IP的任何软件都必须自己解决。概述如下:由于IP是为了操作各种类型的网络硬件而设计,而这些硬件可能工作得并不太好,因此IP数据报也会发生丢失、重复、延迟、乱序或损坏等问题,这些问题都需靠高层协议软件来解决。IP数据报头部格式图18-4给出了一个IP数据报头部包含的各个域,包括源IP地址(SOURCEIPADDRESS)、目的地IP地址(DESTINATIONIPADDRESS)和类型(TYPE)域,源IP地址域含有发送方的IP地址,目的地址域含有接收方的I

16、P地址,类型域指明数据的类型。04016192431版本头部扶度服务类型总长标识杯志,段偏移生疗时同类型头部校验和;源IP地址目的地IP地址IP可选项(可省略)充填数据开.始I-图1&4IP数据报头部中的各个域。其中,源地址和疔的地地址均是IP地址数据报头部里的每个域都有固定的大小。数据报以4位的协议版本号(当前版本号4)和4位的头部长度开始,头部长度指出以32位字长为单位的头部长度。服务类型(SERVICETYPE)域包含的值指明发送方是否希望以一条低延迟的路径或是以一条高吞吐率的路径来传送该数据报,当一个路由器知道多条通往目的地的路径时,就可以靠这个域对路径加以选择。总长(TOTALLEN

17、GTH)域为16位的整数,说明以字节计的数据报总长度,包括头部长度和数据长度。第19章将解释标识(IDENTIFICATION)域、标志(FLAGS)域和和段偏移(FRAGMENTOFFSET)域。生存时间(TIMETOLIVE)域用来阻止数据报在一条包含环路的路径上永远地传送。当软件发生故障或管理人员错误地配置路由器时,就会产生这样的路径。发送方负责初始化生存时间域,这是一个从1到255之间的整数。每个路由器处理数据报时,会将头部里的生存时间减1,如果达到0,数据报将被丢弃,一个出错消息被发回给源主机。头部校验和(HEADERCHECKSUM)域确保头部在传送过程中不被改变。发送方对除了校验

18、和域的头部数据每16位对1求补,所有结果累加,并将和的补放入头部校验和域中。接收方进行同样计算,但包括了校验和域。如果校验和正确,则结果应该为0(数学上,1的求补是一个逆加,因此将一个值加到它自身的补上将得到零)。为了保证数据报不过大,IP定义了一套可选项(options)。当一个IP数据报没携带可选项时,头部长度(H.LEN)域的值为5,头部以目的地址(DESTINATIONADDRESS)域作为结束。因为头部长度总是32位的倍数,如果可选项达不到32位的整数倍,全0的充填(PADDING)域会被加入以保证头部长度为32位的倍数。18.11小结互联网协议定义了在TCP/IP互联网上传送的基本

19、单位一IP数据报。每个数据报类似于一个硬件帧,因为都是由头部跟其后的数据区组成。就象硬件帧一样,头部包含了传送数据报至特定目的地的信息。与硬件帧不同的是,数据报头部包含的是IP地址。路由器中IP的软件使用一个路由表来决定数据报发送的下一站。路由表中的每一项对应于一个目的地网络,这就使得路由表的尺寸与互联网中的网络数目成正比。当挑选一条路径时,IP软件将把目的地址的网络前缀与表中的每一项进行比较。尽管IP软件选择了数据报发往的下一站,但下一站的地址并不出现在数据报头部中。相反,头部中总是放着最终目的地的地址。练习18.1用虚拟包代替帧的主要优点是什么?18.2写一个计算机程序,输入一个象图18-

20、3b)的IP路由表以及一系列的目的地址。对每一个目的地址,该程序顺序搜索路由表,找到正确的下一站作为输出。修改前一个练习的程序,使用散列代替顺序搜索。比较两个程序的速度,看看散列到底快多少。18.4写一个计算机程序,从一个IP数据报中取出源地址和目的地地址,以点分十进制表示法输出。写一个计算机程序,计算头部校验和。使用这个程序检测从网上捕获的数据报,看看校验和失败的频度如何。写一个计算机程序,从IP数据报头部中提取所有的域。以十六进制的形式或点分十进制的形式打印它们的值。如果一个数据报包含一个8位的可选项和一个8位的数据值,则头部的头部长度域的值和总长度域的值分别是多少?18.8假设两个路由器

21、被错误地配置,以至对某些目的地D产生了路由环。解释一下为什么目的地为D的数据报不会永远地在环中传送。第19章IP封装、分段与重组19.1概述第18章描述了IP数据报的格式,并讨论了在通往目的地路径上的每一站中,是怎样利用路由表中的信息来选择下一站的。本章通过详尽描述数据报的传输来结束对IP的讨论,包括主机或路由器怎样穿过物理网发送一个数据报以及路由器怎样处理大数据报的问题。19.2数据报传输与帧当主机或路由器处理一个数据报时,IP软件首先选择数据报发往的下一站N,然后通过物理网络将数据报传送给N。不幸的是,网络硬件并不了解数据报格式或因特网寻址。相反,每种硬件技术定义了自己的帧格式和物理寻址方

22、案,硬件只接收和传送那些符合特定帧格式以及使用特定的物理寻址方案的包。另外,由于一个互联网可能包含异构网络技术,穿过当前网络的帧格式与前一个网络的帧格式可能是不同的。19.3封装在物理网络不了解数据报格式的情况下,数据报怎样才能在该网络中传输呢?答案就在于一种技术:封装(encapsulation)。当一个IP数据报被封装进一个帧中时,整个数据报被放进帧的数据区。网络硬件象对待普通帧一样对待包含一个数据报的帧。事实上,硬件不会检测或改变帧的数据区内容。图19-1举例说明了这一概念。2头部IP数据区帧头部帧数据区图141封装在一个硬件帧中的一个数劭报,整个数搦报位于帧的数据区实际上,有些蚊格式中

23、还包含一个象帧头一样的帧尾接收方怎样知道输入帧的数据区中含有一个IP数据报还是其他数据呢?发送方和接收方必须就帧类型域中的值达成一致。当发送方将一个数据报放入帧中,就须在帧类型域内放入代表IP数据报的特定值。当这样一个帧到达接收方,接收方就能根据它的类型域值知道帧中含有一个IP数据报。携带了一个IP数据报的帧同样要有一个目的地址。因此,封装除了将数据报放入帧的数据区,还要求发送方提供数据报去往的下一站的计算机物理地址。为了得到这个物理地址,发送方机器上的软件将执行第17章所述的地址联编过程,以将下一站的IP地址翻译成等价的物理地址,这个物理地址也就是帧头部中的目的地址。概述如下:为了在物理网络

24、中传输,数据报被封装在帧中。帧中的目的地址是数据报去往的下一站的地址;这个地址是通过将下一站的IP地址翻译成等价的物理地址而得到的。19.4在互联网上的传输在一次传输中封装只发生一次。发送方在选好下一站之后,将数据报封装到一个帧当中,并通过物理网络传给下一站。当帧到达下一站时,接收软件从帧中取出数据报,然后丢弃这一帧。如果数据报必须通过另一个网络转发时,就会产生一个新的帧。图19-2说明了一个数据报从源主机出发,在通过三个网络和两个路由器到达目的主机的过程中,是怎样被封装和解封的。由于每个网络可能使用一种不同于其他网络的硬件技术,因此帧的格式也相应地不同。捋由冨2rw主机图19-2牛匹数据报在

25、直联网中传输的每一步过程半中的不同形式。当数据报要通过一个物理网络时,会被封装进返个側络所对砲旳帧当中耐机阀彰;J二耳.丄_/路由器1頤头m帧头i效据据铀蟄2iff111Ih-r数据握如图所示,主机和路由器只在内存中保留了整个数据报而没有多余的帧头信息。当数据报通过一个物理网络时,才会被封装进一个合适的帧中。帧头的大小依赖于相应的网络技术。例如,如果网络1是一个以太网,帧1有一个以太网头部。类似地,如果网络2是一个FDDI环,则帧2有一个FDDI头部。有一点很重要,即在通过互联网的整个过程中,帧头并没有累积起来。只有在数据报要通过一个网络时,才被封装。当帧到达下一站时,数据报将被从输入帧中取出

26、来,然后才被路由和重新封装到一个输出帧中。因而,当数据报到达它的最终目的地时,携带数据报的帧被丢弃,使得数据报的大小与其最初被发送时是一样的。关键在于:当封装在一个网络帧的数据报到达时,接收方会将其从帧的数据区中取出来,同时丢弃帧头。19.5MTU、数据报长度和封装每一种硬件技术都规定了一帧所能携带的最大数据量。这一限制称为最大传输单元(maximumtransmissionunit,MTU)。对于MTU这一限制,不存在例外网络硬件在设计上不能接受或传输数据量大于MTU的帧。因而一个数据报必须小于或等于一个网络的MTU,否则无法进行封装。在一个互联网中,包含各种异构的网络,MTU限制可能会导致

27、一些问题。特别是由于一个路由器可能连着不同MTU值的多个网络,能从一个网上接收数据报并不意味着一定能在另一个网上发送此数据报。例如,图19-3中,一个路由器连接了两个网络,这两个网络的MTU值分别为1500和1000。岡络1型g=l刊0RO图197连接着两个具有不同MTU值的网络的一个路由器。通过网络1的一帧可以包含1500字节的数据,同时网络2中的一帧最多只能含育1000字节的数搦在图中,主机H2连着MTU值为1000的网络2。因此,H2能传送的数据报的尺寸小FT2(NmJ=lOOO)于等于1000字节。然而,主机H1连着MTU值为1500的网络1,因此能传送最多到1500字节的数据报。如果

28、H1将一个1500字节的数据报发给H2,路由器R收到数据报后却不能在网络2上发送它。一个IP数据报使用一种叫分段(fragmentation)的技术来解决这一问题。当一个数据报的尺寸大于将发往的网络的MTU值时,路由器会将数据报分成若干较小的部分,叫段(fragment),然后再将每段独立的进行发送。令人吃惊的是,每一小段与其他的数据报有同样的格式,只是头部的标志(FLAGS)域中有一位标识了一个数据报是一个段还是一个完整的数据报(数据报头格式参见18.4节)。段的头部中的其他域中包含有其他一些信息,以便用来重组这些段,重新生成原始数据报。另外,头部的段偏移(FRAGMENTOFFSET)域指

29、出该段在原始数据报中的位置。在对一个数据报分段时,路由器使用相应网络的MTU和数据报头部尺寸来计算每段所能携带的最大数据量以及所需段的个数,然后生成这些段。路由器先为每一段生成一个原数据报头部的副本作为段的头部,然后单独修改其中的一些域例如路由器会设置标志(FLAGS)域中的相应位以指示这些数据报含的是一个段。最后,路由器从原数据报中复制相应的数据到每个段中,并开始传送。图19-4表明了这一过程。IF头部1IP头部2数抵IP头部3图1亠4一个IP数拥报被分成段。每段携带着頑始数拥报的一部分数据.并有类似,原始数据报的【P头部IP头部原抬数据报文区概述如下:数据报尺寸不能大于它所经网络的MTU。

30、当一个路由器收到一个数据报,且这个数据报比将要去往的网络MTU大时,路由器会将数据报分成若干较小的部分叫段(fragment)o每一段都使用IP数据报格式,但只携带了原数据报的一部分数据。19.6重组在所有的段的基础上重新产生原数据报的过程叫重组(reassembly)。由于每个段都以原数据报头部的一个副本作为开始,因此都有与原数据报同样的目的地址。另外,含有最后一块数据的段在头部设置有一个特别的位,因此,执行重组的接收方能报告是否所有的段都成功地到达。有趣的是,互联网协议规定只有最终目的主机才会对段进行重组。例如,考虑图19-5中的例子。1119-5-个数擔报分段的互联剧例子c-旦一个数据报

31、被分段,这叫段转发到最终冃的地后,才会被重纽图中,如果主机H1发送一个1500字节的数据报,路由器R1将会把数据报分为两段,转发给路由器R2;R2并不进行段的重组,只是直接转发这些段。最终目的主机H2搜集了这些段之后,将重组它们,以生成原数据报。只在最终目的地重组段有两大好处。首先,减少了路由器中状态信息的数量。当转发一个数据报时,路由器不需要知道它是不是一个段。其次,允许路径动态地变化。如果一个中间路由器要重组段,则所有的段都须到达这个路由器才行。而且通过将重组推后到目的地,IP就可以自由地将数据报的不同段沿不同的路径传输。标识一个数据报前面说过IP并不保证送达,因而单独的段可能会丢失或不按

32、次序到达。另外,如果一个源主机将多个数据报发给同一个目的地,这些数据报的多个段就可能以任意的次序到达。IP软件怎样重组这些乱序的段呢?发送方将一个惟一的标识放进每个输出数据报的标识(IDENTIFICATION)域中。当一个路由器对一个数据报分段时,就会将这一标识数复制到每一段中,接收方就可利用收到的段的标识数和IP源地址来确定该段属于那个数据报。另外,段偏移(FRAGMENTOFFSET)域可以告诉接收方各段的次序。段丢失记得IP并不保证送达一如果底层网络遗失了包,则封装其中的数据报或段也就遗失了。而只有一个数据报的所有的段都收到了,才能重组该数据报。因此有一个相应问题出现:一个数据报的一部

33、分段到达的同时,很可能仍有一些段被延迟或丢失。尽管这时数据报还不能被重组,接收方仍须保留所有已收到的段,以防未到的段可能只是被延迟。当然,接收方不能将这些段保留任意长的时间,因为它们会占用大量的内存资源。为了避免耗尽内存,IP规定了保留段的最大时间。当数据报的某一段第一个到达时,接收方开始一个计时器。如果数据报的所有段在规定时间内在到达,接收方取消计时,重组数据报。否则,到了时间,而所有段还未到齐,接收方会丢弃已到达的段。引入IP重组计数器结果是全有/全无(all-or-nothing):要么所有的段都到达了并且IP重组数据报,要么IP丢弃了整个数据报。另外,没有任何机制使接收方去告知发送方已

34、收到哪些段。由于发送方本身并不知道有关分段的事情,这一设计就显得有用。更进一步地,如果发送方重发该数据报,路由可能不同,因为每次传输并不总是通过同样的路由器。因此,无法保证重发的数据报会象上次一样地被分段。段的进一步分解分段之后,路由器将每一段转发给它的目的地。如果某段遇到一个MTU值更小的网络时会发生什么事情呢?分段方案本身规划得很仔细,使得段本身能够再被分段。路径上的另一个路由器会将段分成更小的一些段。如果一个互联网设计得很糟糕,其中的网络按MTU从大到小依次连接,则路径上的每个路由器就必须对段再进行分段。IP对源段与子段并不加以区分,接收方也并不知道收到的是一个第一次分段后形成的段还是一

35、个已经被多个路由器多次分段后形成的段。同等对待所有段的优点在于:接收方并不需要先重组子段后才能重组原数据报。这样一来就节省了CPU时间,减少了每一段的头部中所需的信息量。小结一个IP数据报在物理网络中传输之前要先被封装到该网络的帧当中。为了封装一个数据报,发送方把整个数据报放在网络帧的数据区中。发送方还必须解决下一站的物理地址问题,这一地址被放进帧头的目的地域中。封装在一个网络只发生一次路由器从输入帧中取出数据报,然后再把数据报封装进一个输出帧中。每一种网络技术都规定了一个包所能携带的最大数据量,这一数据量的限制称为网络最大传输单元(MTU)。当一个路由器收到一个数据报,且此数据报比要去的网络

36、的MTU大时,路由器将它分成若干较小的数据报,这一过程叫分段(fragment)。每一段独立地去往最终目的地,最终目的地负责将这些段重组成原数据报。练习为什么在一个互联网中需要使用分段技术,而在一个典型的广域网中不需要?因为互联网中存在不同MTU的介质,而典型广域网MTU都相同。假设一个数据报在穿过一个互联网的过程中经过N个路由器,则数据报会被封装几次?N次尽管可以使用小数据报来避免分段的发生,但发送方几乎不这么做,为什么?发送方根本不知道药经过的介质的MTU,分段是由路由器来处理的一个数据报最多可分为多少段?解释一下。一个IP报文最大64K,64*1024-IP头部-MTU头部IP规定任何数

37、据报都可能被延迟,意味着数据报到达的次序可能与它们发送的次序不同。如果一个数据报的某一段在前一数据报的所有段全部到达之前到达,目的地如何知这些段属于哪一个数据报?其头部包含了IP数据包头部信息19.6写一个计算机程序,输入一个IP数据报和一个MTU值,程序负责为这个数据报分段,使每一段适合于指定的MTU值。写一个计算机程序实现重组。程序接受一系列的段,然后重组它们以形成一个完整的数据报。并通过乱序的段来进行测试。提示:查一下标志(FLAG)域中更多段(MOREFRAGMENT)位的含义。19.8路径MTU(pathMTU)定义为:从源到目的地一条路径上的最小MTU。当前的IP标准推荐主机在选择

38、数据报尺寸时预先了解路径MTUo阅读有关如何了解路径MTU的文章,在这一章中讨论的哪项技术与了解路径MTU的技术类似。在前一个练习中,了解路径MTU的主要优点是什么?在数据报从一个广域网经路由器进入一个局域网,或由局域网经路由器进入一个广域网的时候,是否会有分段发生?为什么?第20章IP的未来20.1概述前几章讨论了当前ip版本的各个方面:一个ip数据报是由一个头部和其后的数据组成,头部包含了如IP软件用于传递数据报所用的目的地址等等信息,头部中的每个域都是固定大小的,以便处理起来更为有效,第19章还描述了一个IP数据报怎样被封装到一个网络帧中,然后在物理网络中传输。本章集中讨论互联网协议的未

39、来。开头我们会看到对当前ip版本健壮性以及局限性的估计,之后,会看到一个完全崭新的ip版本,这一崭新的版本已由iETF(internetEngineeringTaskForceinternet工程任务编组)提议代替当前版本。本章将介绍新版本的特点,并阐明设计者怎样克服了当前版本中的一些局限。IP的成就当前的IP版本是非常成功的。IP已使Internet处理下述问题成为可能:异构网络、硬件技术的不断变化以及网络规模的急剧增长。为了处理异构性,IP定义了一个统一的包格式(IP数据报)和包的传输机制。IP数据报是因特网中进行通信的基本单位,当一个应用要通过因特网给另外一个应用传送数据时,这些数据是以

40、一个IP数据报的形式通过网络的。IP也定义了一套地址,这些地址允许应用和高层协议在异构网络间进行通信而无须知道底层网络系统在硬件地址上的差异。规模可扩展性也已被证明,当前的因特网在全世界已包含了以百万计的用户,这一事实本身就是最好的证据。当前的IP版本已能适应硬件技术的变化,尽管这一协议在局域网技术流行之前就已制定了,但原先的这些设计在几代硬件技术中仍能很好地工作。现在使用IP的网络比IP设计时所用的网络已快了好几个数量级,而且现今的网络提供的帧尺寸也比IP设计时的网络帧尺寸大得多。由于能受益于不断增大的帧尺寸,IP在现今的网络上仍能高效地工作。概述如下:当前IP版本的成就令人难以置信,该协议

41、竟能够适应硬件技术的变化、异构网络和极大的规模。变革的动机如果IP真的工作得很好,为什么还要变革?主要的动机是在于有限的地址空间。当初设计IP的时候,只有几个计算机网络。设计者决定使用32位的IP地址,因为这样就能允许因特网包含超过一百万个的网络。然而,全球因特网竟以指数增长,不到一年规模就增大了一倍。以当前的增长率,所有可能的网络前缀很快就会被用光,而且还没有考虑越来越快的增长率。因此,设计一个新版本IP的主要动机就是受到了地址空间的限制,持续增长的因特网需要更大的地址来适应。IP变革的第二个动机来源于新的因特网应用,例如,需要传递音频和视频的应用要求数据能以等间隔传递。为了保持这样的信息流

42、在通过因特网时不被打断,IP必须避免经常更换路径。尽管当前的IP数据报头部已经包含了用于请求某类服务的域,但协议并没有定义一种能用于实时传递音频和视频的服务。正在开发中的新应用要求更复杂的寻址和路由能力。例如,协作技术(collaborationtechnologies)能让一群同事之间进行通信就好像开电话会议一样,这一技术已越来越令人感兴趣了。为了合作得高效,互联网需要一种机制,这种机制允许创建组和改变组,并且提供一种方法使每个包能传一份副本到指定组中的每位成员。除了使组中每个成员均能收到包的一个副本,一些应用还使用组来处理负载的分配。也就是说,某种服务存在多个同样的副本。一个包发给一个组时

43、,将会被路由到离发送方最近的一个服务上去。因而,新版本的IP需要包含能进行以上寻址和路由的机制。名称与版本号当研究人员开始新版IP的工作时,需要为这项工作起一个临时的名称。借用了一个流行的电视剧,说他们正从事于IP再造(IP-TheNextGeneration)工作,在很多早期的报告中简称IPng。不幸的是,其他人也制订了很多竞争性的计划,也叫IPng,这一名称也就显得非常含糊。当这一个特定的协议被真正定义时,工作组需要将此协议与所有其他计划区分开来,他们决定在最终标准化的协议头上加入一个正式的版本号。事实上正是这个版本号令人感到奇怪,因为当前的IP版本号是4,大部分人希望下一正式的IP版本号

44、是5。然而,版本号5早已被指定用于一个叫ST的实验性协议。因此,IP的新版本就将6作为它的正式版本号,这一协议也就被称作IPv6。(为了与当前的IP协议加以区别,当前的协议叫做IPv4。)IPv6特性IPv6保留了IPv4的很多非常成功的特征。如IPv4、IPv6都是无连接的一每一个数据报都含有目的地址,每一数据报独立地被路由。就像IPv4样IPv6的数据报头部也含有用于标识一个数据报被丢弃前已经过的最大站数的域。另外,IPv6保留了IPv4可选项中的大部分通用机制。尽管保留了当前版本的基本概念,IPv6仍然修改了所有的细节。例如,IPv6使用更大的地址和一个全新的数据报头部格式。另外,IPv

45、6使用一系列的定长的头部去处理可选信息,而不像当前版本那样只使用一种含有变长的可选项的头部。IPv6中的新加特征主要可分为以下五类:地址尺寸(AddressSize)。每个IPv6地址含128位,代替了原来的32位,这一下地址空间大得足以适应好几十年的全球Internet的发展。头部格式(HeaderFormat)。IPv6的数据报头部与IPv4的完全不一样,IPv4头部的每一个域几乎都变了,或被替代掉了。扩展头部(ExtensionHeader)。不像IPv4只使用一种头部格式,IPv6将信息放于分离的头部之中。一个IPv6的数据报这样组成:IPv6的基本头部,后跟零个或多个扩展头部,再后跟

46、数据。对音频和视频的支持(Supportforaudioandvideo)oIPv6含有这样一种机制,发送方与接收方能够通过底层网络建立一条高质量的路径,并将数据报与这一路径联系起来。虽然这种机制用于需要较高性能保证的音频和视频应用,它也可用于将数据报与低成本路径联结可扩展的协议(ExtensibleProtocol)oIPv6并不像IPv4那样规定了所有可能的协议特征。相反,设计者们提供了一种方案,使得发送方能为一个数据报增加另外的信息。扩展方案使得IPv6比IPv4更灵活,意味着随时能在设计中增加所需的新特征。IPv6数据报格式如图20-1所示。一个IPv6数据报开始于一个基本头部(bas

47、eheader),后跟零个或多个扩展头部(extensionheader),再后跟数据。可选基本头部扩展头部14V扩展头部N数据区图个IP诂数据报的通用形式扩展头部是可选的-个最小的数据报只含有基本头部和数据区尽管图中指明了数据报的通用格式,但图中的各块并不是按比例画的。事实上,一些扩展头部要比基本头部还大。而且,在很多数据报中,数据区的尺寸比头部的尺寸要大得多。20.7IPv6基本头部格式尽管IPv6的基本头部是IPv4的两倍大,但包含的信息却比IPv4的少,图20-2画出了其格式。图IPv6的基本头部格式。头部包含的域比IPv4.头部的域有所减少如图所示,头部里的大部分空间用在标识发送方和

48、接收方。就像IPv4一样,源地址(SOURCEADDRESS)域标识发送方,目的地址(DESTINATIONADDRESS)域标识接收方。每个地址占用16个字节,四倍于一个IPv4的地址。除了源和目的地址,基本头部还包含了其他五个域。版本(VERS)域指明协议是第6版本。优先级域指明路由的优先级别。负荷长度(PAYLOADLENGTH)域对应于IPv4中的数据报长度域,但与IPv4不同的是,负荷长度只指携带数据的尺寸(即负荷),头部长度不包括在内。站限制(HOPLIMIT)域对应于IPv4中的生存时间(TIME-TO-LIVE)域,IPv6对站限制作了非常严格的解释在数据报到达其目的地之前,站

49、限制已计数到了零,则数据报被丢弃。头部的其他域需要仔细解释一下。流标记(FLOWLABEL)域是为了那些需要性能保证的新应用而准备。这一标记能将数据报与一个特定的底层网络路径联系起来。标记分为两部分:一部分用于规定一个通信量类别(trafficclass),另一部分用于定义一条特定的路径。通信量类别指定了数据报传输所需的通用特性。例如,为了发送间歇的数据流(如击键和鼠标移动),我们可能指定一个低延迟的通信量类别。在互联网上发送实时音频时,发送方可能要求底层网络硬件建立一条延迟小于100毫秒的路径,当这一条路径建立之后,网络系统返回一个路径标记,发送方将这一标记放在每一个沿此路径发送的数据报中。

50、路由器也使用流标记域中的这一标记来将数据报送入预先安排的路径中去。下一头部(NEXTHEADER)域用于指定基本头部后面的信息类型,例如,如果数据报含有一个扩展头部,则下一头部域指明扩展头部的类型,如果没有其他扩展头部,下一头部域指明数据报中的携带的数据类型。图20-3说明了这一概念。20.8IPv6怎样处理多重头部由于IPv6标准为每种可能的头部类型都规定了一个惟一的标识值,因此,对下一头部域的解释不可能搞混。接收方用每个头部的下一头部域来确定头部后面跟的是什么。如果域中的值对应于数据类型,接收方将数据报传给处理数据的软件模块;如果域中的值对应于另一个头部,IP软件负责解释其内容。一旦IP软

51、件处理完一个头部,它将利用下一头部域来确定后面要处理的是数据还是另一个头部。IPv6软件怎样知道一个特定的头部在哪儿结束以及下一项又从哪儿开始呢?某些类型的头部是有固定尺寸的。例如,一个基本头部长度为40字节,而为了转向基本头部后面的那一项,IPv6软件仅仅在基本头部起始地址上加40就行了。某些扩展头部并没有固定的尺寸,在这样的情况下,头部必须含有足够的信息来让IPv6知道头部在哪儿结束。例如,图20-4列出了一个IPv6可选项头部(optionsheader)的一般形式,这种头部携带的信息与IPv4数据报中的可选项类似。081631下二实部|头部长度|一个或多个可遥项图204IPv6可选项扩

52、展头部=不同的数据报会有不同的可选项头部尺寸,因此,头部长度域会指出可选项头部的精确长度可选项扩展头部的图例说明了IPv6处理变长头部的一种方法。当构造一个数据报时,发送方将可选项头部的长度放在头部长度(HEADERLEN)域中。当接收方碰到一个可选项扩展头部,就利用头部长度域来确定下一项的位置,用下一头部域确定下一项的类型。20.9分段、重组和路径MTU尽管IPv6分段类似IPv4分段,细节却不一样。像IPv4一样,原数据报的一个前缀复制到每个段中,负荷长度修改成段长度。不像IPv4的是,IPv6将不将包含分段信息的域放在基本头部,而是放在一种单独的扩展头部中,该头部的存在就表示该数据报是一

53、个段。图20-5说明了IPv6的分段。如图所示,每一段都比原数据报小。就像IPv4一样,段尺寸被选为数据报要去的底层网络的最大传输单元(MTU)的尺寸。当然,最后一段往往比其他的小,因为它包含的是原数据报按MTU尺寸分割后剩下的部分。不可分段部分可分段鄒分(包括头部和数擱IPv6中的分段与IPv4中的分段有很大不同。在IPv4中,路由器负责执行分段任务。但在IPv6中,发送数据报的主机负责分段,即期望主机选择一个数据报尺寸使以后不需要再分段,路径上的路由器收到大数据报时就不再对数据报进行分段。不可分段部分段1的头部段1b)头部不可分段部分段3的头部段3|d)图2S5IPv6的分段脈数据的可分段

54、部分a)被放入各段的负荷区b)、c)和心每一段以不可分段部分和一个分段扩展头部的一个副本开始一台主机怎样挑选数据报的尺寸来避免分段呢?主机显然必须了解去往目的地路径上的每一网络的MTU,以便挑选一个数据报尺寸去适应最小的一个MTU。从源到目的地路径上的最小的MTU叫路径MTU(pathMTU),了解路径MTU的过程叫发现路径MTU(pathMTUdiscovery)。通常,发现路径MTU是一个不断重复的过程:一台主机发送一系列不同尺寸的数据报,看看它们能否无错到达目的地(第21章讨论IPv4使用的出错报告机制,IPv6包含一个类似的差错报告机制)。一旦一个数据报足够小,能穿过网络而不被分段,则

55、主机就找到了一个等于路径MTU的数据报尺寸。20.10多重头部的目的为什么IPv6要使用独立的扩展头部呢?有两个原因:经济性和扩展性。经济性很容易理解:将数据报的功能分为独立的头部是很经济的,因为可以节省空间。为了理解这一点,我们要意识到尽管IPv6协议包含很多功能,设计者希望一个数据报只使用很小的一个子集。利用独立的头部,IPv6就能设计很多的特征,而无须要求每一个数据报头部都为每一特征至少保留一个域。例如,尽管很多IPv4数据报没被分段,但IPv4的头部中仍有用于保存分段信息的域。相反,除非数据报被分段,否则IPv6的头部并没有为分段浪费多余的空间。由于大部分数据报只需要很少的头部,避免不

56、必要的头部域能节省可观的空间。另外,更小的数据报在传递过程中花的时间也少,因此,减小数据报尺寸也减少了带宽的要求。为了理解扩展性,考虑为协议增加一个新的特征。像IPv4那样的使用定长头部格式的协议就要完全改变必须重新设计头部以安排支持新特征的域。然而在IPv6中,已存在的协议头部可以保持不变,只是定义了一种新的下一头部(NEXTHEADER)类型和一个新的头部格式。将新的功能放入一个新的头部的主要优点在于:改变因特网中所有计算机之前可以对这一特征进行实验。例如,假设两台计算机的所有者希望测试一种新的数据报封装技术,则两台计算机必须在一种实验性的封装头部的细节上达成一致。发送方将新的头部加入一个

57、数据报,接收方解释收到的数据报中的头部。只要新头部出现在用于路由的头部之后,互联网中的路由器就会在不理解这一实验头部的基础上照传无误(如果实验性的头部被误放在路由头部之前,路由器会丢弃这一数据报)。一旦一个实验中的特征被证明真正有用,它就能够并入标准之中。20.11IPv6编址就像IPv4一样,IPv6为计算机和物理网络之间的每一连接指定了一个惟一的地址。因而,如果一台计算机(例如,路由器)连接着三个物理网络,该计算机就被指定了三个地址。同IPv4一样,IPv6将每一个这样的地址分成一个前缀和一个后缀,前缀指明一个网络,后缀指明网上的某台特定的计算机。尽管采用了同样的方法用于指定计算机地址,I

58、Pv6编址与IPv4编址仍有很多不同。首先,所有的地址细节都不一样。比如,地址没有定义类,前缀和后缀之间的边界可在地址范围内的任何地方,而且不能从地址本身单独确定。因此,每个地址(例如路由表中的)都有一个相应的前缀长度(prefixlength),以便软件知道哪里是前缀的终点。其次,IPv6定义了一套与IPv4的特殊地址完全不同的特殊地址。特别是,IPv6并没有引入直接广播地址。IPv6地址可分为以下三种基本类型:单播(unicast)地址对应于一台单独的计算机,一个送往这种地址的数据报沿着一条最近的路径被路由。组播(multicast)地址对应于一组计算机,这些计算机可能在不同的地点;组中的

59、成员关系在任何时刻都能改变,当一个数据报发往这种地址,IPv6向组中的每一成员传递数据报的一个副本。随机播(anycast)地址对应于一组计算机,这些计算机拥有相同的地址前缀(在同一个点)。一个送往这种地址的数据报,会以一条最短路径被路由,且只送往其中的一台计算机(如,离发送方最近的计算机)。随机编址原先被称为簇(cluster)编址。这种编址的动机来自于一种对重复服务的要求。例如,有一种合作关系是指多台计算机同时提供网上的同一种服务,于是就为这些计算机指定一个随机地址。当一个用户给这一随机地址发来一个数据报IPv6就将数据报发往组(即簇)中的某一台计算机。如果另一个地址的用户也给随机地址发来

60、一个数据报,IPv6可能选择了组中的另一台计算机,将数据报传给它。这样,两台计算机就能同时处理外来的请求。20.12IPv6冒分十六进制表示法尽管128位的地址满足了因特网的发展,但写这样长的数字却是非常麻烦的,例如,用点分十进制表示法写一个128位的数字:105.220.136.100.255.255.255.255.0.0.18.128.140.10.255.255为了减少写一个地址所用的字符个数,IPv6的设计者建议使用一种更紧凑的语法形式,叫冒分十六进制表示法(colonhexadecimalnotation)(这一名字通常简写为colonhex)。其中,每16位为一组,写成十六进制数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论