- 计算机网络技术实用宝典(第3版)
- 郑化浦
- 2378字
- 2021-03-29 12:30:31
8.2 IP协议
IP协议是TCP/IP协议簇的核心协议之一。IP协议的基本任务是通过互联网传输数据报,各个IP数据报之间是互相独立的。主机上的IP层基于数据链路层服务向传输层提供服务,IP从源传输层实体获取数据,通过网络接口传送给目的主机的IP层。IP协议不保证传送的可靠性,在主机资源不足的情况下,它可能丢弃某些数据报,同时IP也不检查被数据链路层丢弃的报文。
8.2.1 IP寻址基本原理
在传送时,高层协议将数据传给IP,IP将数据封装为IP数据报后通过网络接口发送出去。如果目的主机直接连在本地网中,则IP直接将数据报传送给本地网的目的主机;如果目的主机在远地网络,则IP将数据报传送给本地路由器,由本地路由器将数据报送给下一个路由器或目的主机。这样,一个IP数据报通过一组互连网络从一个IP模块传送到另一个IP模块,直至到达目的地。
路由选择是IP协议主要的功能之一。IP协议的路由选择主要包括以下两个方面的内容:
①发送数据报时的路由处理。上层协议发来的、要求IP协议发送的数据报,有上层协议已指定了发送路由和未指定路由两类。对于前者,IP协议按上层协议指定的路由发送数据报;对于后者,IP协议则以IP数据报中目的IP地址为关键字来搜索路由选择表中的路由,如果找不到任何路由,则向上层协议报告错误信息。
②接收数据报时的路由选择。对不同类型的结点,IP协议收到数据报后对路由的处理所采取的方法是不同的。对于主机结点,则用IP数据报中的目的IP与本机地址进行比较,如果地址匹配,则把IP数据报递交给对应的上层协议;否则,丢弃该数据报。对于路由器结点,则实施发送数据报的处理。
8.2.2 IP数据报
TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报(IP Datagram)。这是一个与硬件无关的虚拟包,由首部和数据两部分组成,其格式如图8-3所示。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首部中的源地址和目的地址都是IP协议地址。
1.IP数据报首部的固定部分中的各字段
①版本:占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(IPv4)。IPv6目前还处于起步阶段。
②首部长度:占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字(1个32位字长是4字节),因此,当IP的首部长度为1111时(十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。这样做的目的是希望用户尽量减少开销。最常用的首部长度就是20字节(首部长度为0101),这时不使用任何选项。
图8-3
③区分服务:占8位,用来获得更好的服务。这个字段在旧标准中叫作服务类型,但实际上一直没有被使用过。直到1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。
④总长度:总长度指首部及数据之和的长度,单位为字节。因为总长度字段为16位,所以数据报的最大长度为216-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中数据字段的最大长度,即最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
⑤标识(Identification):占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接的服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
⑥标志(Flag):占3位,但目前只有2位有意义。
・标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。
・标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
⑦片偏移:占13位。即较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
⑧生存时间:占8位,生存时间字段常用的英文缩写是TTL(Time To Live),其表明数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1s,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。
⑨协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
⑩首部检验和:占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
源地址:占32位。
目的地址:占32位。
2.IP数据报首部的可变部分
IP首部的可变部分就是一个可选字段。选项字段用来支持排错、测量及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项只需1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。
增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IPv6就将IP数据报的首部长度做成固定的。