4.3.3 网络层协议

4.3.3 网络层协议

前已述及,TCP/IP参考模型中网络层的核心协议是IP,另外还有4个辅助协议,这里重点介绍网络层的核心协议IP。

目前为止Internet广泛采用的IP是IPv4。为了解决IPv4地址资源紧缺问题,1996年,国际互联网工程任务组(IETF)研究制定了IPv6。下面介绍IPv4,在4.3.6小节将会讨论IPv6。

为了叙述方便,下面将IPv4简写为IP。

1.IP的特点

IP的主要特点有:

·仅提供不可靠、无连接的数据报传送服务;

·IP是点对点的,所以要提供路由选择功能;

·IP(IPv4)地址长度为32 bit。

2.IP地址

Internet为每一个上网的主机分配一个唯一的标识符,即IP地址。IP地址有两种——分类的IP地址和无分类编址(CIDR)。这里介绍分类的IP地址。

(1)IP地址的结构

IP地址是分等级的,其地址结构如图4-15所示。

图4-15 IP地址的结构

IP地址长32 bit(现在由Internet名字与号码指派公司ICANN进行分配),包括两部分:网络地址(网络号)——用于标识连入Internet的网络;主机地址(主机号)——用于标识特定网络中的主机。

IP地址分两个等级的好处是:

·IP地址管理机构在分配IP地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配,这样方便IP地址的管理;

·路由器仅根据目的主机所连接的网络号来转发IP数据报(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。

(2)IP地址的表示方法

IP地址用点分十进制表示。所谓点分十进制是32 bit长的IP地址以X.X.X.X格式表示,X为8 bit,其值为0~255。即:

点分十进制表示的好处是可以提高IP地址的可读性,而且可很容易地识别IP地址类别。下面介绍IP地址的类别。

(3)IP地址的类别

根据网络地址和主机地址各占多少位,IP地址分成为五类,即A类到E类,如图4-16所示。

图4-16 IP地址的类别

Internet地址格式中,前几个比特用于标识地址是哪一类。A类地址第1个比特为0;B类地址的前2个比特为10;C类地址的前3个比特为110;D类地址的前4个比特为1110;E类地址的前5个比特为11110。由于Internet地址的长度限定于32个比特,所以类的标识符占用位数越多,可使用的地址空间就越小。

Internet的五类地址中,A、B、C三类为主类地址,D、E为次类地址。目前Internet中一般采用A、B、C类地址。下面根据图4-16将这三类地址做个归纳,如表4-1所示。

表4-1 A、B、C三类IP地址归纳

这里有几点说明:

(a)起始地址是指前8个比特表示的地址范围。

(b)A类地址标识的网络种类为27-2,减2的原因有两个:第一,IP地址中的全0表示“这个”(this)。网络号字段为全0的IP地址是个保留地址,意思是“本网络”;第二,网络号字段127(即01111111)保留作为本地软件环回测试本主机用(后面3个字节的二进制数字可任意填入,但不能都是0或都是1)。

(c)每网主机数2n-2,减2的原因是:全0的主机号字段表示该IP地址是本主机所连接到的“单个网络”地址(例如,一主机的IP地址为116.16.32.5,该主机所在网络的IP地址就是116.0.0.0)。而全1表示“所有的(all)”,因此全1的主机号字段表示该网络上的所有主机。

(d)实际上IP地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为多接口主机(其实就是路由器)。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。

(e)另外,D类地址不标识网络,起始地址为224~239,用于特殊用途(做为多播地址)。E类地址的起始地址为240~255,该类地址暂时保留,用于进行某些实验及将来扩展之用。

以上介绍的是两级结构的IP地址,此种两级IP地址存在一些缺点:一是IP地址空间的利用率有时很低,比如A类和B类地址每个网络可标识的主机很多,如果这个网络中同时上网的主机没那么多,显然主机地址资源空闲浪费;二是两级的IP地址不够灵活。为了解决这些问题,Internet采用子网地址,由此IP地址结构由两级发展到三级。

(4)子网地址和子网掩码

①划分子网和子网地址

为了便于管理,一个单位的网络一般划分为若干子网,子网是按物理位置划分的。为了标识子网和解决两级的IP地址的缺点,采用子网地址。

子网编址技术是指在IP地址中,对于主机地址空间采用不同方法进行细分,通常是将主机地址的一部分分配给子网作为子网地址。采用子网编址后,IP地址结构变为三级,如图4-17所示。

图4-17 三级IP地址结构

②子网掩码

子网掩码是一个网络或一个子网的重要属性,其作用有两个:一是表示子网和主机地址位数;二是将某台主机的IP地址和子网掩码相与可确定此主机所在的子网地址。

子网掩码的长度也为32 bit,与IP地址一样用点分十进制表示。

如果已知一个网络的子网掩码,那么我们将其点分十进制转换为32 bit的二进制,其中:“1”代表网络地址和子网地址字段;“0”代表主机地址字段。举例说明如下。

例4-1 某网络IP地址为168.5.0.0,子网掩码为255.255.248.0,求:(a)子网地址、主机地址各占多少位;(b)此网络最多能容纳的主机总数(设子网和主机地址的全0、全1均不用)。

解 (a)此网络采用B类IP地址

B类地址网络地址空间为14,再加2位标志位共16位;后16位为子网地址和主机地址字段

子网掩码对应的二进制:11111111 11111111 11111000 00000000

子网地址占5位,主机地址占11位

(b)此网络最多能容纳的主机数为:(25-2)(211-2)=61 380

例4-2 某主机IP地址为165.18.86.10,子网掩码为255.255.224.0,求此主机所在的子网地址。

解 主机IP地址165.18.86.10的二进制为

10100101 00010010 01010110 00001010

子网掩码255.255.224.0的二进制为

11111111 11111111 11100000 00000000

将主机的IP地址与子网掩码相与,可得此主机所在的子网地址为

10100101 00010010 01000000 00000000

其点分十进制为:165.18.64.0

需要说明的是,Internet中为了简化路由器的路由选择算法,不划分子网时也要使用子网掩码。此时子网掩码:1 bit的位置对应IP地址的网络号字段;0 bit的位置对应IP地址的主机号字段。

(5)公有IP地址和私有IP地址

①公有IP地址

公有IP地址是接入Internet时所使用的全球唯一的IP地址,必须向Internet的管理机构申请。其分配方式有两种:

·静态分配方式——是给用户固定分配IP地址。

·动态分配方式——是用户访问Internet资源时,从IP地址池中临时申请到一个IP地址,使用完后再归还到IP地址池中。而IP地址池可以位于客户管理系统上,也可以集中放置在RADIUS服务器上。

普通用户的公有IP地址一般采用动态分配方式。

②私有IP地址

私有IP地址是仅在机构(网络)内部使用的IP地址,可以由本机构(网络)自行分配,而不需要向Internet的管理机构申请。私有IP地址的分配方式也有两种:

·静态分配方式——是为机构(网络)内部的每台主机固定分配私有IP地址。

·动态分配方式——是利用DHCP为机构(网络)内部新加入的主机自动配置私有IP地址。

虽然私有IP地址可以随机挑选,但是通常使用的是RFC 1918规定的私有IP地址,如表4-2所示。

表4-2 RFC1918规定的私有IP地址

③私有IP地址转换为公有IP地址的方式

使用私有IP地址的用户在访问Internet时,需要网络地址转换(NAT)设备将私有IP地址转换为公有IP地址,转换方式包括以下3种:

·静态转换方式——是在NAT表中事先为每一个需要转换的内部地址(私有IP地址)创建固定的映射表,建立私有IP地址与公有IP地址的一一对应关系,即内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。这样每当内部节点与外界通信时,网络边缘路由器或者防火墙可以做相应的变换。这种方式用于接入外部网络的用户数比较少时。

·动态转换方式——是将可用的公有地址集定义成NAT Pool(NAT池)。对于要与外界进行通信的内部节点,如果还没有建立转换映射,那么网络边缘路由器或者防火墙将会动态地从NAT池中选择一个公有IP地址替换其私有IP地址,而在连接终止时再将此地址回收。

·复用动态方式——利用公有IP地址和TCP端口号来标识私有IP地址和TCP端口号,即把内部地址(私有IP地址)映射到外部网络的一个IP地址的不同端口上。TCP规定使用16位的端口号,除一些保留的端口外,一个公有IP地址可以区分多达6万个采用私有IP地址的用户端口号。(TCP端口号的内容详见4.3.4小节)

由于一般运营商申请到的公有IP地址比较少,而用户数却可能很多,因此一般都采用复用动态方式。

3.IP数据报格式

IP数据报的格式如图4-18所示。

图4-18 IP数据报格式

IP数据报由报头(也称为首部)和数据两部分组成,其中首部又包括固定长度字段(共20字节,是所有IP数据报必须具有的)和可选字段(长度可变)。

下面介绍IP数据报首部各字段的作用。

·版本(4 bit)——指出IP的版本,目前的IP版本号为4(即IPv4)。

·首部长度(4 bit)——以32 bit(4 B)为单位指示IP数据报首部的长度。如果首部只有固定长度字段,那么首部最短为20 B;首部长度字段占用4 bit,首部长度的最大值为15,而它又以4 B为单位指示,所以IP数据报首部的最大长度为60 B,即首部长度为20~60 B。

·服务类型(8 bit)——用来表示用户所要求的服务类型,具体包括优先级、可靠性、吞吐量和时延等。

·总长度(16 bit)——以字节为单位指示数据报的长度,数据报的最大长度为65 535 B。

·标识、标志和片偏移(共32 bit)——控制分片和重组(分片和重组的概念后述)。

·生存时间(8 bit)——记为TTL,控制数据报在网络中的寿命,其单位为秒。

·协议(8 bit)——指出此数据报携带的数据使用何种协议(即数据部分装入的数据类型),以便目的主机的网络层决定将数据部分上交给哪个处理过程。

·首部检验和(16 bit)——对数据报的首部(不包括数据部分)进行差错检验。

·源地址和目的地址——各占4 B,即发送主机和接收主机的IP地址。

·可选字段——长度可变,用来支持排错、测量以及安全等措施。

·填充——IP数据报报头长度为32 bit的整倍数,若不是,则由填充字段添“0”补齐。

4.IP数据报的传输

前面我们已经学习了IP地址的相关内容,在具体探讨IP数据报的传输之前,首先简单介绍一下硬件地址的概念及IP地址与硬件地址的区别。

在IP网络中,每台上网的主机和路由器都要分配IP地址,IP地址放在IP数据报的首部;而在物理网络中每台主机和路由器都有自己的物理地址,也叫硬件地址(固化在网卡中),硬件地址放在物理网络帧的首部。

(1)在发送端

源主机在网络层将传输层送下来的报文段(UDP报文、TCP报文段或SCTP数据报统称为报文段)组装成IP数据报(IP数据报首部的源IP地址是源主机的IP地址;目的IP地址是目的主机的IP地址,不是沿途经过的路由器的IP地址),然后将IP数据报送到网络接口层。

在网络接口层对IP数据报进行封装,即将数据报作为物理网络帧的数据部分,前面加上首部,后面加上尾部,形成可以在物理网络中传输的帧,然后送到物理网络中传输。

这里有两点需要说明:

·每个物理网络都规定了物理帧的大小,物理网络不同,帧的大小限制也不同,物理帧的最大长度称为最大传输单元(MTU)。一个物理网络的MTU由硬件决定,通常情况下是保持不变的。而IP数据报的大小由软件决定,在一定范围内可以任意选择。可通过选择适当的IP数据报大小以适应Internet中不同物理网络的MTU,使一个IP数据报封装成一个物理帧。

·另外,物理帧首部中的地址是硬件地址,其目的地址是下一个路由器的硬件地址,在网络接口层由网络接口软件调用ARP得到下一个路由器的硬件地址(即利用ARP将IP地址转换为物理地址)。

(2)在网络中传输

源主机所发送的IP数据报(已封装成物理网络帧,但习惯说成IP数据报)在到达目的主机前,可能要经过由若干个路由器连接的许多不同种类的物理网络。路由器对IP数据报要进行以下处理:路由选择、传输延迟控制和分片(需要的话进行分片)等,下面分别具体介绍。

①路由选择

每个路由器都要根据目的主机的IP地址对IP数据报进行路由选择。

②传输延迟控制

为避免由于路由器路由选择错误,至使IP数据报进入死循环的路由,而无休止地在网中流动,IP对数据报传输延迟要进行特别的控制。为此,每当产生一个新的数据报,其报头中“生存时间”字段均设置为本数据报的最大生存时间,单位为秒。随着时间流逝,路由器从该字段减去消耗的时间。一旦TTL小于0,便将该数据报从网中删除,并向源主机发送出错信息。

③分片

(a)分片的概念

IP数据报要通过许多不同种类的物理网络传输,而不同的物理网络MTU大小的限制不同。为了选定最佳的IP数据报大小,以实现所有物理网络的数据报封装,IP提供了分片机制,在MTU较小的网络上,将数据报分成若干片进行传输。为了说明这个问题,参见图4-19。

图4-19 数据报分片图示

设主机A要和主机B通信。

假如网1的MTU较大,网2的MTU较小。源主机A根据网1的MTU选择合适的IP数据报大小,即一个IP数据报封装成网1的一个物理帧。但是此IP数据报对于网2来说就长了,所以在路由器(的网络层)中要将IP数据报进行分片,每一片在网络接口层封装成短的物理帧,然后送往网2传输。在目的主机中再将各片重组为原始IP数据报。

值得说明的是,分片是在MTU不同的两个网络交界处路由器中进行的,而片重组是由目的主机完成。IP数据报在传输过程中可以多次分片,但不能重组。这种重组方式使各片独立路由选择,不要求中间路由器存储和重组片,简化了路由器协议,减轻了路由器负担,使得IP数据报能以最快速度到达目的主机。

(b)分片方法

每片与原始IP数据报具有相同的格式,每片中包括片头和部分数据报数据。其中,片头大部分是复制原始数据报的报头,只增加了少量表示分片信息的比特(我们认为片头=报头);而片数据≤MTU-片头,另外在求片数据大小时,注意分片必须发生在8 B的整倍数(原因后述)。

例4-3 一个IP数据报长为1 132 B,报头长32 B,现要在MTU为660 B的物理网络中传输,如何分片?画出各片结构示意图。

解 数据区长1 132-32=1 100 B

片头+片数据≤MTU

片数据≤MTU-片头=660-32=628 B

因为分片必须发生在8 B的整倍数,所以每片数据取624 B。

各片结构如图4-20所示。

图4-20中的偏移量是指在原始IP数据报中每片数据首字节与报头最后一个字节的间隔。

(c)分片控制

IP数据报报头中,与控制分片和重组有关的3个字段为标识、标志和片偏移。

图4-20 分片示意图

·标识——占16 bit,标识字段是目的主机赋予IP数据报的标识符,其作用是确保目的主机能重组分片为数据报。分片时,该字段必须原样复制到新的片头中。当分片到达时,目的主机使用标识字段和源地址来识别分片属于哪个IP数据报。

·标志——占3 bit,如图4-21所示。

图4-21 标志字段的意义

标志字段目前只有前两位有意义。标志字段的最低位是MF(More Fragment),MF=1表示后面“还有分片”,MF=0表示这已是最后一个分片;标志字段中间的一位是DF(Don’t Fragment),意思是“不能分片”,只有当DF=0时才允许分片。

·片偏移——占13 bit,指出某片数据在初始IP数据报数据区中的偏移量,其偏移量以8 B为单位指示(所以分片必须发生在8 B的整倍数)。由于各片按独立数据报的方式传输,到达目的主机的过程是无序的,所以重组的片顺序由片偏移字段提供。如果有一片或多片丢失,那么整个数据报必须废弃。

(3)在接收端

当所传数据流到达目的主机时,首先在网络接口层识别出物理帧,然后去掉帧头,抽出IP数据报送给网络层。

在网络层需对数据报目的IP地址和本主机的IP地址进行比较。如果相匹配,那么IP软件接收该数据报并将其交给本地操作系统,由高级协议的软件处理;如果不匹配(说明本主机不是此IP数据报的目的地),那么IP会将数据报报头中的生存时间减去一定的值,结果若大于0,则为其进行路由选择并转发出去。

如果IP数据报在传输过程中进行了分片,那么目的主机会进行重组。