IP 地址构造和分类
IP 地址由 网络标识
和 主机标识
两部分组成,网络标识代表着网络地址,主机标识代表着主机地址。网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址都不重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的 主机标识
则不允许在同一网段内重复出现。
举个例子来说:比如说我在石家庄(好像不用比如昂),我所在的小区的某一栋楼就相当于是网络标识,某一栋楼的第几户就相当于是我的主机标识,当然如果你有整栋楼的话,那就当我没说。你可以通过xx省xx市xx区xx路xx小区xx栋来定位我的网络标识,这一栋的第几户就相当于是我的网络标识。
IP 地址分为四类,分别是 A类、B类、C类、D类、E类,它会根据 IP 地址中的第 1 位到第 4 位的比特对网络标识和主机标识进行分类。
A 类
:(1.0.0.0 - 126.0.0.0)(默认子网掩码:255.0.0.0 或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类 IP 地址的最前面为 0 ,所以地址的网络号取值于 1~126 之间。一般用于大型网络。B 类
:(128.0.0.0 - 191.255.0.0)(默认子网掩码:255.255.0.0 或 0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类 IP 地址的最前面为 10 ,所以地址的网络号取值于 128~191 之间。一般用于中等规模网络。C 类
:(192.0.0.0 - 223.255.255.0)(子网掩码:255.255.255.0 或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类 IP 地址的最前面为 110 ,所以地址的网络号取值于 192~223 之间。一般用于小型网络。D 类
:是多播地址。该类 IP 地址的最前面为 1110 ,所以地址的网络号取值于 224~239 之间。一般用于多路广播用户。E 类
:是保留地址。该类 IP 地址的最前面为 1111 ,所以地址的网络号取值于 240~255 之间。
为了方便理解,我画了一张 IP 地址分类图,如下所示
根据不同的 IP 范围,有下面不同的地总空间分类
子网掩码
子网掩码(subnet mask)
又叫做网络掩码,它是一种用来指明一个 IP 地址的哪些位标识的是主机所在的网络。子网掩码是一个 32位 地址,用于屏蔽 IP 地址的一部分以区别网络标识和主机标识。
一个 IP 地址只要确定了其分类,也就确定了它的网络标识和主机标识,由此,各个分类所表示的网络标识范围如下
用 1
表示 IP 网络地址的比特范围,0
表示 IP 主机地址的范围。将他们用十进制表示,那么这三类的表示如下
保留地址
在IPv4 的几类地址中,有几个保留的地址空间不能在互联网上使用。这些地址用于特殊目的,不能在局域网外部路由。
IP 协议版本
目前,全球 Internet 中共存有两个IP版本:IP 版本 4(IPv4)
和 IP 版本6(IPv6)
。IP 地址由二进制值组成,可驱动 Internet 上所有数据的路由。IPv4 地址的长度为 32 位,而 IPv6 地址的长度为 128 位。
Internet IP 资源由 Internet 分配号码机构(IANA)
分配给区域 Internet 注册表(RIR),例如 APNIC,该机构负责根 DNS ,IP 寻址和其他 Internet 协议资源。
下面我们就一起认识一下 IP 协议中非常重要的两个版本 IPv4 和 IPv6。
IPv4
IPv4 的全称是 Internet Protocol version 4
,是 Internet 协议的第四版。IPv4 是一种无连接的协议,这个协议会尽最大努力交付数据包,也就是说它不能保证任何数据包能到达目的地,也不能保证所有的数据包都会按照正确的顺序到达目标主机,这些都是由上层比如传输控制协议控制的。也就是说,单从 IP 看来,这是一个不可靠的协议。
前面我们讲过网络层分组被称为
数据报
,所以我们接下来的叙述也会围绕着数据报展开。
IPv4 的数据报格式如下
IPv4 数据报中的关键字及其解释
版本字段(Version)
占用 4 bit,通信双方使用的版本必须一致,对于 IPv4 版本来说,字段值是 4。首部长度(Internet Header Length)
占用 4 bit,首部长度说明首部有多少 32 位(4 字节)。由于 IPv4 首部可能包含不确定的选项,因此这个字段被用来确定数据的偏移量。大多数 IP 不包含这个选项,所以一般首部长度设置为 5, 数据报为 20 字节 。服务类型(Differential Services Codepoint,DSCP)
占用 6 bit,以便使用不同的 IP 数据报,比如一些低时延、高吞吐量和可靠性的数据报。服务类型如下表所示
拥塞通告(Explicit Congestion Notification,ECN)
占用 2 bit,它允许在不丢弃报文的同时通知对方网络拥塞的发生。ECN 是一种可选的功能,仅当两端都支持并希望使用,且底层网络支持时才被使用。最开始 DSCP 和 ECN 统称为 TOS,也就是区分服务,但是后来被细化为了 DSCP 和 ECN。数据报长度(Total Length)
占用 16 bit,这 16 位是包括在数据在内的总长度,理论上数据报的总长度为 2 的 16 次幂 - 1,最大长度是 65535 字节,但是实际上数据报很少有超过 1500 字节的。IP 规定所有主机都必须支持最小 576 字节的报文,但大多数现代主机支持更大的报文。当下层的数据链路协议的最大传输单元(MTU)
字段的值小于 IP 报文长度时,报文就必须被分片。标识符(Identification)
占用 16 bit,这个字段用来标识所有的分片,因为分片不一定会按序到达,所以到达目标主机的所有分片会进行重组,每产生一个数据报,计数器加1,并赋值给此字段。标志(Flags)
占用 3 bit,标志用于控制和识别分片,这 3 位分别是- 0 位:保留,必须为0;
- 1 位:
禁止分片(Don’t Fragment,DF)
,当 DF = 0 时才允许分片; - 2 位:
更多分片(More Fragment,MF)
,MF = 1 代表后面还有分片,MF = 0 代表已经是最后一个分片。
如果 DF 标志被设置为 1 ,但是路由要求必须进行分片,那么这条数据报回丢弃 分片偏移(Fragment Offset)
占用 13 位,它指明了每个分片相对于原始报文开头的偏移量,以 8 字节作单位。存活时间(Time To Live,TTL)
占用 8 位,存活时间避免报文在互联网中迷失
,比如陷入路由环路。存活时间以秒为单位,但小于一秒的时间均向上取整到一秒。在现实中,这实际上成了一个跳数计数器:报文经过的每个路由器都将此字段减 1,当此字段等于 0 时,报文不再向下一跳传送并被丢弃,这个字段最大值是 255。协议(Protocol)
占用 8 位,这个字段定义了报文数据区使用的协议。协议内容可以在 https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml 官网上获取。首部校验和(Header Checksum)
占用 16 位,首部校验和会对字段进行纠错检查,在每一跳中,路由器都要重新计算出的首部检验和并与此字段进行比对,如果不一致,此报文将会被丢弃。源地址(Source address)
占用 32 位,它是 IPv4 地址的构成条件,源地址指的是数据报的发送方目的地址(Destination address)
占用 32 位,它是 IPv4 地址的构成条件,目标地址指的是数据报的接收方选项(Options)
是附加字段,选项字段占用 1 - 40 个字节不等,一般会跟在目的地址之后。如果首部长度 > 5,就应该考虑选项字段。数据
不是首部的一部分,因此并不被包含在首部检验和中。
在 IP 发送的过程中,每个数据报的大小是不同的,每个链路层协议能承载的网络层分组也不一样,有的协议能够承载大数据报,有的却只能承载很小的数据报,不同的链路层能够承载的数据报大小如下。