网际协议(IP,Internet Protocol)

网际协议(IP)是开放系统互联模型(OSI model)的一个主要协议,也是TCP/IP中完整的一部分。尽管“因特网”(Internet)这个词在协议的名字里出现,但其使用范围却超出了因特网,事实上,因特网上的所有系统都使用或兼容IP,而IP却可以用在与因特网无关的各种网络上。准确地说,只要是需要有效地连接众多机器的网络,使用IP都很合适,尽管现在IP面临一些竞争者,例如适用于中小型网络微机的Novell NetWare IPX。

  IP完成什么工作呢?它主要的任务有两个:一是寻址,二是管理分割数据片(Datagrams)。用IP传输数据片十分可靠,它决定数据片传送的目标,当传输通道发生问题时还会选择其他路径。

  IP的第二个重要特性常用作处理网路不理想的情况,例如数据片输送延时,传输路径出错,数据在分割或重组时出错等。然而IP并不保证信息被准确接收,因为它只检测标题信息(Header Information),不会检测数据片的数据,这些是其他层模型的工作(说起这一点,IP对较早期传送的包处理也不恰当,它仅仅猜测周围的节点中哪个最好,却不能保证该节点是最快和最有效的)。IP中的一部分定义了网关如何管理数据片,在什么时候以及如何产生出错信息,和怎样恢复错误。

  前面已经提及数据是如何分割和重组的,IP所提供的包(Packet)最大是65,535字节,这不是大部分网络能处理的,因此IP在有必要的情况下会自动把数据片分割成较小的数据片。

  当第一个从大数据片分割出来的小数据片到达目的地的时候,接收方的IP层就开始重组这些数据,重组数据的顺序依照IP标题的一个域。如果预定时间之内没有收到所有数据片的话,接收方就会放弃以接收的数据片。因此,理论上一个完整的数据片能成功地发送的机会比一个被分割的数据片大,这也是很多程序避免分割数据的原因。

  IP不会理会数据片通过哪一个节点,也不理会谁是发送方或接收方,它以32位(二进制位)网络地址处理数据包的传送路径。在一个版本号为6或称为第二代IP的新版本中,IP可以处理更大的标题,其详细内容将在稍后讲述。

  网际协议数据片标题(The Internet Protocol Datagram Header)

  IP和硬件网络,例如以太网(Ethernet)的信息包装方式基本相同,最大的不同点是:以太网的标题包含硬件地址,IP标题包含IP地址。当以太网接收到IP包的时候,会在被分割的数据片前面加上一个自己的标题,这个过程叫做封装。两者之间的转化通过地址决策协议(ARP,Address Resolution Protocol)来完成。

  注意:封装在这里是指在数据的前后加上一些其他数据,附加的数据包含有原数据的详细信息。

  数据片是IP传输的单元,有时叫做网络数据片或IP数据片。IP的规范中(大多数其他TCP/IP族的协议也一样)以“字(Word)”这个术语来定义标题和末尾。每个字32位是最常见的情况,但有些操作系统的字长不同(例如一些小型机或更高级的系统用64位字),一般来说都是8位一个字节,4个字节一个字。

  当所有可用域都使用的时候,IP标题的长度是6个32位字(一共24个字节),最短的IP标题用5个字(共20个字节)。要理解所有IP标题域,最好记住:IP不依赖硬件,同时需要考虑所有版本的IP软件(向下兼容性)。下图是IP标题的示意图。
图3-1

  版本号(Version Number)
  这个域包含软件所使用的IP版本信息,长度是4位。这个域是必须的,它关系到标题其他部分的解码,因为每个版本的标题不尽相同。使用最广泛的版本是4,最新的版本6还没有得到广泛支持。
IP的定义保证了软件在分析数据片的其他数据之前必须先检测版本号,如果软件不能处理数据片的IP版本,接收方IP层会忽略数据片的内容。
  标题长度(Header Length)
  4位描述标题长度的域,指定以32位字作为单位。为了正确地解码,IP必须知道标题结束的位置,这就是这个域的作用(数据片中没有数据开始位置的标记,标题长度就是计算数据块启始位置的依据)。前面说过,最短的标题是5个字(20个字节),最长6个字(24个字节)。
  服务类型(Type of Service)
  服务类型域长8位(1字节),用处是指出如何处理数据片,6个字的标题包含这个域。该域的各个位具体对应含义如下图所示。头三个位指出数据片的优先级,取值由0(普通)到7(网络控制),数字越大则优先级越高,并至少在理论上数据片会越快到达目标,但实际上大部分情况下这个域会被忽略。

  后面三位每一个都是独立的标志位,分别是数据片的延时,吞吐量和可靠性。0是普通状态,1对应于各个位分别代表低延时、高吞吐量以及高可靠性,最后的两个位没有用。和优先级域一样,这个域通常被设定成相同数值,不被理会。
  通常情况下,服务类型域的所有位都被设为0,因为除了一些特别的网络之外,该域实际上没有用。

  数据片长度或包长度域(Datagram Length or Packet Length)
  这个域以字节描述数据片的总长度,包括标题,这个值减去标题长度就是数据的长度。这个域长16位,因为数据片的长度(包括标题)最大是655,35字节。

  鉴定域(Identification)
  这个域用作保存送出节点创建的唯一标识符,这个域是必须的,因为它用作保证数据片不会混乱。

  标记域(Flags)
  标记域长3位,左边第一位没用,剩下的两位分别称为DF(Don't Fragment)和MF(More Fragments),标记着数据片是否被分割。
DF的值为1的情况下是无论如何不能分割数据片的;若本地IP层软件一定要分割该值标记为1的数据片,该数据片就会被视作无效,同时会返回一个出错信息到送信息的设备。
  MF的值为1的话,说明当前数据片是被分割的,后面还有其他数据片(又叫子数据片)跟着,必须进行重组以得到完整的信息。连续数据片中的最后一个的MF值设为0(完成),好让接收方知道什么时候停止。
  碎片偏移(Fragment Offset)
  如果MF(More Fragments)标志位的值为1(说明这是一个大数据片分割出来的部分),碎片偏移说明子数据片在完整信息中的位置,令IP可以按正确顺序重组碎片包。
偏移总是相对信息的开头而言,这个域长13个二进制位,偏移的计算是以8个字节为单位,相应地包最大长度为65,535字节。接收方以鉴定域判段数据据片属于那个信息,再以碎片偏移重组完整信息。
  生命周期(Time To Live)
  这个域给出一个以秒为单位的时间,如果数据片在网络中停留的时间超过这个限制的话,将被视作无效。该域是由发送节点设置的,一般取15到30秒。
TCP/IP标准规定每个处理数据包的节点最少使生命周期域减1(秒),尽管处理的时间可能少于1秒。当网关接收到数据片时会记录其到达时间,而又不能马上处理该数据片的话,就按生命周期域开始倒数。如果网关超过负荷而不能及时处理数据片,生命周期计数器就会超时而导致数据片失效。
  若生命周期域是0,则节点放弃该数据片并给发送方一个信息,让发送方重发该数据片。设计生命周期域的目的是防止IP包在网络中无限循环。
  传输协议(Transport Protocol)
  这个域描述了数据包所使用传输协议的识别号码,该号码由网络信息中心(NIC,Network Information Center)制定。现在大概定义了50种协议,其中最重要的就是网际控制信息协议(ICMP,号码是1)和传输控制协议(TCP,号码是6),如果需要所有号码的列表,请参阅有关RFC文献(事实上也没有必要,因为大部分协议几乎从不使用)。
  标题和校正(Header Checksum)
  这个域的数字是IP标题域的和校正(不是数据域),作用是增加处理速度。由于生命周期域每经过一个节点都有变化,所以和校正亦会随之而改变。
  发送方地址和目标地址(Sending Address and Destination Address)
  这个域包含有32位的发送方IP地址和目标IP地址,这个域是数据片创建时制定的,不可改变。
  选项(Options)
  这个域是可选的,由若干可变长度的编码组成。如果数据片使用了一个以上的选项,则它们会以连续的方式出现在IP标题。所有的选项由一个字节控制,这个字节通常分为三个部分:1个二进制位的拷贝标志(Cpy Fag),2个二进制位的选项类(Option Class),以及5个二进制位的选项号码(Option Number)。拷贝标志用于指定当网关需要分割数据的时候如何处理选项,取值为0的时候,只拷贝选项到第一个分割的数据片;取值为1的话,拷贝选项到每一个分割的数据片。
  选项类和选项号码指出选项的类型以及其确切含义。当前只有两套选项类(两个二进制位一共可以支持4套),当取值为0时,选项应用于数据片或网络控制,取值2说明选项用于调试或管理,1和3没用。选项类和选项号码的常用值如下表所示。
选项类    选项号码    描述
0    0    选项列表结尾标记
0    1    没有选项(用作填充)
0    2    安全选项(仅作军事用途)
0    3    松散来源选径
0    7    灵活选径选项(附加域)
0    9    严格来源选径
2    4    时间戳有效(附加域)

  填充(Padding)
  填充选项的内容依赖于已经选择的选项,用途是保证数据片标题的完整。
  数据片的生命
  为了明白IP和其他TCP/IP层如何包装数据片并将它传到另一台机器,让我们看看一个典型的数据片所走的路线。应用程序送出数据片要经过以下几个步骤:首先,应用程序构造一个在特定长度之内的IP数据片,计算其和校正(Checksum),之后构造IP标题;第二步是决定数据传送路线的第一站,如果数据片是送到本地网络的话,就是数据沿传至目标最近路径的一台机器,相反是送到因特网的话,就是网关。对于重要的数据,还需要在其标题加上选项说明;最后,送出数据片。
  数据片沿着网络所经过的每一个网关都会对它进行检查。网关的网络层(Network Layer)剥离数据片的网络层标题之后,IP层会计算和校正并检测数据片的完整性,如果和校正不匹配,该数据片将被放弃,同时返回一个出错信息到传送方。接下来检数据片的测生命周期(TTL域),放弃超时的数据片,返回出错信息到发送方。正确无误的话,重新计算数据片的和校正与生命周期,按照数据片的目标,以分析目标地址或数据片IP标题里的指定选径选项决定其下一步的去向。
  分割的数据片会被正确地重组,包括时间戳、选径,然后又送到网络上。
  当数据片最终到达目标设备,系统会计算和校正,以确定是否还有其他部分。如果还需要更多以重组完整的信息,则系统进入等待状态,其间运行一计时器保证其他数据片在合理的时间到达。比较极端的一个情况是系统收到所有的数据碎片,但在计时器超时之前不能把它们正确重组,数据亦视作无效,并返回出错信息到发送方。最后,剥去IP标题,重新得到原始数据并将其送到更高层应用程序,如果需要的确话还要回复发送方。
  在选径、记录时间戳等附加信息之后,数据片的长度会增加。

你可能感兴趣的:(网际协议(IP,Internet Protocol))