第1 8章IP数据报和数据报转发
18.1 概述
前面我们介绍了互联网的体系结构,因特网寻址以及用来将IP地址翻译成硬件地址的地址解析软件。本章我们将讨论互联网中基本的通讯服务,包括互联网中包的格式以及路由器如何处理和转发这些包。第1 9章接着讨论路由器如何利用底层硬件来传送包。
18.2 无连接服务
网络互联的目的是为了提供这样一种包通讯系统:一台计算机上运行的程序能够向另一台计算机上运行的程序发送数据。在一个设计良好的互联网中,底层物理网络对应用程序来说是透明的——这些应用程序能够收发数据而又无须了解很多细节,比如本机所连的局域网、目的机所连的远程网络以及两者之间的互联等等。
协议的设计者必须决定互联网协议要提供哪些通讯服务,以及如何高效地实现这些服务。另外,设计者还须决定是否为程序提供面向连接(connection-oriented)的服务,或是无连接(connectionless)的服务,或是两者都提供。TCP/IP的设计者既提供了无连接服务,也提供了面向连接的服务:他们选择了无连接的基本传送服务(delivery service),并在这些无连接的底层服务之上增加了可靠的面向连接的服务。这一设计非常成功,以至于经常被其他的协议所模仿。
18.3 虚拟包
无连接的互联网服务其实是包交换的一种扩展——这种服务允许发送方通过互联网传输单独的包。每一个包独立地在网上传送,它本身包含了用以标识接收方的信息。
一个包是如何在互联网上传输的呢?答案就在于路由器将包从一个网转发到另一个网。源主机创建了一个包,将目的地址放入包的头部,然后将包送往相邻的路由器。当一个路由器收到一个包,就会使用包的目的地址来选择下一个路由器并向之转发。最终,包会到达这样一个路由器,此路由器能够直接将包传给它的最终目的地。
一个互联网上的包的格式是怎样的呢?不幸的是,传统的硬件帧格式不适合作为互联网上的包格式。这是因为路由器能够连接异构网络,而不同类型网络的帧格式不同,因此路由器不能直接将包从一个网络传送到另一个网络。另外,路由器也不能简单地重新格式化帧的头部,因为两个网络可能使用不兼容的地址格式(例如,一个输入帧中的地址可能对另一个网络而言是毫无意义的)。
为了克服异构性,互联网协议软件定义了一种独立于底层硬件的互联网包格式。结果就产生了一种能无损地在底层硬件中传输的通用的(universal)、虚拟的(virtual)包(第19章将详细说明一个互联网包怎样在物理网中传输)。就像虚拟(virtual)一词所示,协议软件负责产生和处理互联网包—底层硬件并不认识这种包的格式。又如通用(universal)一词所示,互联网上的每一台主机或路由器都有认识这
种包的协议软件。概述如下:由于路由器可能连接异构的网络,它就不能直接将网上送来帧的传给另一个网。为了克服异构性,一个互联网必须定义一种与硬件无关的包格式。
18.4 IP数据报
TCP/IP协议使用IP数据报(IP datagram)这个名字来命名一个互联网包。令人惊奇的是,IP数据报竟然与硬件帧有同样的基本格式:IP数据报也是以一个头部开始,后跟数据区。
图1 8 - 1例举了这种数据报格式。
一个数据报携带的数据量不固定,发送方根据特定的用途选择合适的数据量。例如,一个应用若需要传送击键信息,则可以将每次击键放在单独的数据报中,而当一个应用要传送大文件时,则会发送大数据报。关键在于:数据报的尺寸取决于发送数据的应用。大小可变的数据报使得IP可以适应各种应用。
在当前IP版本(版本4)中,一个数据报的数据量可以小到一个字节,而数据报本身可以大到6 4 K字节(包括头部)。在大部分数据报中,头部比数据区要小得多。为了理解这一点,有必要了解一下传输数据的开销。就像物理网络帧中的帧头,数据报的头部意味着开销——传输头部所花费的时间中,并没有传输用户自己的数据。由于数据报头部的尺寸是固定的,发送大数据报导致单位时间内传送了更多的用户数据(即更高的吞吐率)。与帧头类似,数据报头部包含的信息是为了在互联网中寻径用。例如,头部包含发出该数据报的计算机地址和目的计算机的地址。当然,数据报头部的地址形式与帧头的地址形式是不同的——数据报包含的是IP地址,而帧包含的是硬件地址。
概述如下:一个通过TCP/IP互联网的包叫IP数据报。每个数据报由一个头部和紧跟其后的数据区组成,数据报头部中源地址和目的地址都是IP地址。
18.5 IP数据报的转发
一个数据报沿着从源地址到目的地的一条路径穿过互联网,中间会经过很多路由器。路径上的每个路由器收到这个数据报时,先从头部取出目的地址,根据这个地址决定数据报该发往的下一站。然后路由器将此数据报转发给下一站,该下一站可能就是最终目的地,也可能是另一个路由器。为了使对下一站的选择高效而且便于理解,每个IP路由器在一张路由表(routing table)中保存有很多路由信息。当一个路由器启动时,需对路由表进行初始化,而当网络的拓扑发生变化或某些硬件发生故障时,必须更新路由表。概念上说,路由表中每一项都指定了一个目的地和为到达这个目的地所要经过的下一站。
图18-2 a)中,三个路由器将四个网络连接成为一个的互联网,b)是一个路由器中的路由表。
如图所示,路由器R2直接连接网络2和网络3,因此,R2能将数据报直接发往连在这两个网络上的任何目的地。当一个数据报的目的地在网络4中时,R2就需将数据报发往路由器R3。路由表中列出的每个目的地是一个网络,而不是一个单独的主机。这个差别非常重要,因为一个互联网中的主机数可能是网络数的1000倍以上。因而,使用网络作为目的地可以使路由表的尺寸变得较小。
概述如下:
由于路由表中的每个目的地对应于一个网络,路由表中的项数正比于互联网中的网络个数。
18.6 IP地址与路由表项
事实上,一个IP路由表比18-2图中的例子稍复杂一些。
首先,每一项的目的地(Destination)域只包含目的地网络的网络前缀。
第二,每项中有一个附加域包含了一个地址屏蔽码(address mask),这个屏蔽码决定了目的地中的哪些位对应着网络前缀。
第三,当下一站(Next Hop)域指的是一个路由器时,将使用一个IP地址。图18 - 2的路由表在实际当中是以图1 8 - 3的形式出现。(大部分互联网连接了不止四个网络,一个典型的路由表还应包含一个缺省路由,即一个对应于所有未在表中列出的目的地的项。)
表中头两个网络都有一个A类前缀,第三个网络有一个B类前缀,第四个网络有一个C 类前缀。每个路由器被指定了两个IP地址,一个地址对应一个接口。例如,连接网络30.0.0.0和40.0.0.0的路由器被指定了地址30.0.0.7和40.0.0.7。尽管路由器的两个接口有同样的主机后缀,其实IP并不要求这种一致——网络管理员可以自由地为每个接口指定不同的值。
18.7 屏蔽码域和数据报转发
使用路由表为数据报选择下一站的过程叫路由(routing)或转发(forwarding)。查表时屏蔽码域用来从一个IP地址中取出网络部分。为了理解屏蔽码是怎样使用的,想象一个路由正要转发一个数据报。假设数据报包含了目的地址D,路由软件必须在路由表中到指明D的下一站的那一项。为了做到这一点,软件检测路由器中的每一项,利用屏蔽码域提取地址D的前缀,并把结果与目的地域加以比较。如果相同,数据报将按该项中所指的下一站进行转发。
屏蔽码的引入使得提取前缀的工作非常高效——软件将屏蔽码与数据报目的地址D进行布尔与(and)运算。因而,检测表中第i项的计算过程可以表述如下:if((Mask[i]& D)==Destination[i])forwardtoNextHop[i];
举一个例子,考虑一个目的地址为192.4.10.3的数据报,假设该数据报到达了一个包含图18-3所示路由表的路由器上,并假设软件顺序搜索表中每一项,则对于第一项,因为255.0.0.0& 192.4.10.3不等于30.
0.0.0,故匹配失败。同样,第二、三项都不符和,路由软件最终选择了地址为128.1.0.9的下一站,因为255.255.255.0 & 192.4.10.3 == 192.4.10.0
tcp ip协议技术
18.8 目的地和下一站地址
数据报头部的目的地址与其被转发的下一站地址之间到底有什么关系呢?数据报中的目的地IP地址(DESTINATION IP ADDRESS)域包含了最终目的地址。当路由器收到一个数据报,会取出目的地址D,用它来计算数据报将发往的下一路由器的地址N。尽管这个数据报被直接发往地址N,但头部中仍保持着目的地址D。也就是说:一个数据报头部中的目的地址总是指最终目的地。当一个路由器将这个数据报转发给另一个路由器时,下一站的地址并不在数据报头部里出现。所有的路由器都是使用IP地址进行计算的。在计算出下一站的地址N之后,IP软件使用第1 7章所述的地址联编技术将地址N翻译成等价的硬件地址以便传输。在下一章中,我们将讨论数据报是怎样穿过一个物理网络的。
18.9 尽力传递
除了定义互联网数据报格式,IP还定义了通信的语义,并使用“尽力而为”(best-effort)
这个词来描述所提供的服务。从本质上讲,这个标准指出了尽管IP层会努力地尝试传递每个数据报,但并不保证处理以下问题:
• 数据报重复。
• 延迟传送或乱序传送。
• 数据的损坏。
• 数据报的丢失。
以上问题都需要上层协议软件加以处理。
IP层会出现这些问题也许看起来很奇怪,然而,这里有一个重要的原因:每一层的协议软件各自只负责通信的某些方面,IP层就不负责处理以上问题。因而,当底层物理网络会出现以上的这些问题时,使用IP的任何软件都必须自己解决。
概述如下:由于IP是为了操作各种类型的网络硬件而设计,而这些硬件可能工作得并不太好,因此IP数据报也会发生丢失、重复、延迟、乱序或损坏等问题,这些问题都需靠高层协议软件来解决。
18.10 IP数据报头部格式
图1 8 - 4给出了一个IP数据报头部包含的各个域,包括源IP地址(SOURCE IP ADDRESS)、目的地IP
地址(DESTINATION IP ADDRESS)和类型(TYPE)域,源IP地址域含有发送方的IP 地址,目的地址域含有接收方的IP地址,类型域指明数据的类型。
数据报头部里的每个域都有固定的大小。数据报以4位的协议版本号(当前版本号4)和4位的头部长度开始,头部长度指出以32位字长为单位的头部长度。服务类型(SERVICE TYPE)域包含的值指明发送方是否希望以一条低延迟的路径或是以一条高吞吐率的路径来传送该数据报,当一个路由器知道多条通往目的地的路径时,就可以靠这个域对路径加以选择。总长(TOTAL LENGTH)域为16位的整数,说明以字节计的数据报总长度,包括头部长度和数据长度。第1 9章将解释标识(IDENTIFICATION)域、标志(FLAGS)域和和段偏移(FRAGMENT OFFSET)域。生存时间(TIME TO LIVE)域用来阻止
数据报在一条包含环路的路径上永远地传送。当软件发生故障或管理人员错误地配置路由器时,就会产生这样的路径。发送方负责初始化生存时间域,这是一个从1到255之间的整数。每个路由器处理数据报时,会将头部里的生存时间减1,如果达到0,数据报将被丢弃,一个出错消息被发回给源主机。头部校验和(HEADER CHECKSUM)域确保头部在传送过程中不被改变。发送方对除了校验和域的头部数据每1 6位对1求补,所有结果累加,并将和的补放入头部校验和域中。接收方进行同样计算,但包括了校验和域。如果校验和正确,则结果应该为0(数学上,1的求补是一个逆加,因此将一个值加到它自身的补上将得到零)。为了保证数据报不过大,IP定义了一

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。