三、IP 协议
Internet 是今天使用最广泛的网络。因特网中的主要协议是 TCP 和 IP, 所以 Internet 协议也叫 TCP/IP 协议簇。这些协议可划分为 4 个层次,它们与 OSI/RM 的对应关系如表所示。
由于 ARPAnet 的设计者注重的是网络互连,允许通信子网采用已有的或将来的各种协议,所以这个层次结构中没有提供网络访问层的协议。
实际上,TCP/IP 协议可以通过网络访间层连接到任何网络上。与 OSI/RM 分层的原则不同, TCP/IP 协议簇允许同层的协议实体间互相调用,从而完成复杂的控制功能。允许上层过程直接调用不相邻的下层过程,甚至在有些高层协议中控制信息和数据分别传输,而不是共享同一个协议数据单元。
下图所示为主要协议之间的调用关系。
1. IP 地址
(1)IP 网络地址采用“网络·主机”的形式,其中网络部分是网络的地址编码,主机部分是网络中一个主机的地址编码。 IP 地址的格式如图所示。
(2)IP 地址分为 5 类。A、B、C 类是常用地址。
(3)IP 地址的编码规定 全 0 表示本地地址,即本地网络或本地主机;全 1 表示广播地址,任何网站都能接收。
(4)除去全 0 和全 1 地址外,A 类有 126 个网络地址,1600 万个主机地址; B 类有 16382 个网络地址, 64000 个主机地址;
C 类有 200 万个网络地址, 254 个主机地址。
(5)IP地址通常用十进制数表示,即把整个地址划分为4个字节,每个字节用一个十进制数表示,中间用圆点分隔。
(6)IP地址由美国 Intermet 信息中心(InterNIC)管理。
(7)一种更灵活的寻址方案引入了子网的概念,即把主机地址部分再划分为子网地址和主机地址,形成了三级寻址结构。
- 这种三级寻址方式需要子网掩码的支持。
- 子网地址对网络外部是透明的。当 IP 分组到达目标网络后,网络边界路由器把 32 位的 IP 地址与子网掩码进行逻辑“与”运算,从而得到子网地址,并据此转发到适当的子网中。
(8)在点对点通信 unicast) 中使用 A、B、C 类地址,这类地址都指向某个网络中的一个主机。 D 类地址是组播地址,组播 (multicast) 和广播 (broadcast) 类似,都属于点对多点通信,但是又有所不同。组播的目标是一组主机,而广播的目标是所有主机。在一些新的网络应用中要用到组播地址。
实现组播需要特殊的方法。首先是网络中必须有能识别组播地址的路由器,这种路由器叫作组播网关,它接受一个目标地址为组地址的数据报并转发到相应的网络中 。其次 ,主机要能够发送组播数据报,这需要给 IP 软件增加两个功能,其一是 IP 软件要能够接受应用软件指定的目标组地址,其二是网络接口软件要能够把 IP 组地址映射到硬件组地址或广播地址上。另外,主机还需要能够接收组播报文,这要求主机中的 IP 软件能够向组播网关声明加入或退出某个地址组,并且当组播数据报来到时向同一组的各个应用软件各发送一个副本。
E 类保留作为研究之用,IPv6 地址就是在此基础上扩展的。
2. IP 协议的操作
(1)数据报生存期
如果使用了动态路由选择算法,或者允许在数据报旅行期间改变路由决策,则有可能造成回路。最坏的情况是数据报在因特网中无休止地巡回,不能到达目的地并浪费大量的网络资源。
解决办法:规定数据报有一定的生存期 ,生存期的长短以它经过的路由器的多少计数。每经过 个路由器,计数器加 1 , 计数器超过一定的计数值,数据报就被丢弃。当然,也可以用一个全局的时钟记录数据报的生存期,在这种方案下,生成数据报的时间被记录在报头中,每个路由器查看这个记录,决定是继续转发,还是丢弃它。
(2)分段和重装配
每个网络可能规定了不同的最大分组长度。当分组在因特网中传送时,可能要进入一个最大分组长度较小的网络,这时需要对它进行分段,这又引出了新的问题:在哪里对它进行重装配?
解决办法:
办法一:在目的地重装配,但这样只会把数据报越分越小,即使后续子网允许较大的分组通过,但由于途中的短报文无法装配,从而使通信效率下降。
办法二:允许中间的路由器进行重装配 ,这种方法也有缺点。首先是路由器必须提供重装配缓冲区,并且要设法避免重装配死锁;其次是由一个数据报分出的小段都必须经过同一个出口路由器才能再行组装,这就排除了使用动态路由选择算法的可能性。
办法三:IP 协议使用了 4 个字段处理分段和重装配问题。
- 第一个是报文 ID 字段,它唯一地标识了某个站某一个协议层发出的数据。在DoD 的 IP 协议中, ID 字段由源站和目标站地址、 产生数据的协议层标识符以及该协议层提供的顺序号组成。
- 第二个字段是数据长度,即字节数。
- 第三个字段是偏置值,即分段在原来数据报中的位置,以 8 个字节(64 位) 倍数计数。
- 最后是 M 标志,表示是否为最后一个分段。
(3)差错控制和流控
无连接的网络操作不保证数据报的成功提交,当路由器丢弃一个数据报时,要尽可能地向源点返回一些信息。源点的 IP 实体可以根据收到的出错信息改变发送策略或者把情况报告上层协议。丢弃数据报的原因可能是超过生存期、网络拥塞和 CS 校验出错等。在最后一种情况下可能无法返回出错信息,因为源地址字段已不可辨认。
路由器或接收站可以采用某种流控机制来限制发送速率。对于无连接的数据报服务,可采用的流控机制是很有限的。最好的办法也许是向其他站或路由器发送专门的流控分组,使其改变发送速率。
3. IP 协议数据单元
IP 协议的数据格式如图所示,其中的字段如下。
- 版本号:协议的版本号,不同版本的协议格式或语义可能不同,现在常用的是IPv4,正在逐渐过渡到IPv6。
- IHL:IP 头长度,以 32 位字计数,最小为5,即20个字节。
- 服务类型:用于区分不同的可靠性、优先级、延迟和吞吐率的参数。
- 总长度:包含IP头在内的数据单元的总长度(字节数)。
- 标识符:唯一标识数据报的标识符。
- 标志:包括3个标志,一个是 M 标志,用于分段和重装配;另一个是禁止分段标志,如果认为目标站不具备重装配能力,则可使这个标志置位,这样如果数据报要经过一个最大分组长度较小的网络,就会被丢弃,因而最好使用源路由以避免这种灾难发生;第3个标志当前没有启用。
- 段偏置值:指明该段处于原来数据报中的位置。
- 生存期:用经过的路由器个数表示。
- 协议:上层协议(TCP或UDP)。
- 头校检和:对IP头的校验序列。在数据报传输过程中 IP 头中的某些字段可能改变(例如生存期,以及与分段有关的字段),所以校检和要在每一个经过的路由器中进行校验和重新计算。校检和是对 IP头 中的所有 16 位字进行 1 的补码相加得到的,计算时假定校检和字段本身为 0。
- 源地址:给网络和主机地址分别分配若干位,例如7和24、14和16、21和8等。
- 目标地址:同上。
- 任选数据:可变长,包含发送者想要发送的任何数据。
- 补丁:补齐 32位的边界。
- 用户数据:以字节为单位的用户数据,和 IP 头加在一起的长度不超过 65535 字节。