目录

1、分片和重装配

1.1 分片

1.2 重装配

2、IPv4数据报格式

3、IP地址分类

3.1 5类地址

3.2 几类特殊的IP地址

4、子网与子网掩码

4.1 子网连网

4.2 VLSM

4.3 CIDR

5、IP QoS

6、子网划分方法

6.1 基本子网划分,取网络号

6.2 复杂子网划分,取网络号

6.3 给定IP地址和掩码,计算网络/子网广播地址

6.4 复杂子网划分,获取有效子网数


IPv4协议(Internet Protocol Version 4,IPv4)运行在网络层上,可实现异构的网络之间互联互通。它是一种不可靠、无连接的协议。IPv4定义了在整个TCP/IP互联网上数据传输所用的基本单元(由于采用的是无连接的分组交换,因此也成为了数据报),规定了互联网上传输数据的确切格式;IP软件完成路由选择的功能,选择一个数据发送的路径;除了数据格式和路由选择精确而正式的定义之外,还包括一组不可靠分组传送思想的规则,这些规则指明了主机和路由器应用如何处理分组、何时及如何发出错误信息以及在什么情况下可以放弃分组。IP协议是TCP/IP互联网设计中最基本的部分。

为了防止因出现网络路由环路,而导致IP数据报在网络中无休止地转发,IP协议在IP包头设置了一个TTL位,用来存放数据报生存期(以跳为单位,每经过一个路由器为一跳),每经过一个路由器,计数器加1,超过一定的计数值,就将其丢弃。

1、分片和重装配

在理想情况下,整个数据报被封装在一个物理帧中,可以提高物理网络上的效率。由于IP数据报经常在许多类型的物理网络上传送,而每种物理网络所能够传送的帧的长度是有限的,例如以太网是1500字节,FDDI是4470字节,这个限制成为网络最大传送单元(Maximum Transmission Unit,MTU)。这就使得IP协议在设计上不得不处理这样的矛盾:当数据报通过一个可传送更大帧的网络时,如果数据报大小限制为整个最小的MTU,就会浪费网络带宽资源;如果数据报大于最小的MTU,就可能出现无法封装的问题。为了有效地解决这个问题,IP协议采用了分片和重装配机制来解决。

1.1 分片

IP协议采用的是遇到MTU更小的网络时再分片。

1.2 重装配

为了能够减少中途路由器的工作,降低出错,重装配工作是直到目的主机时才进行的,也就是分片后,遇到MTU更大的网络时并不重新装配,而且保持最小分组,直到目的主机接收完整后再一次性重装配。它使用4个字段来处理分片和重装配问题:

(1)第一个字段是报文ID字段,它唯一标识了某个站某个协议层发出的数据;

(2)第二个字段是数据长度,即字节数;

(3)第三个字段是偏置值,即分片在原来数据报中的位置以8字节的倍数计算;

(4)第四个字段是M标志,用来识别是否为最后一个分片。

整个分片的步骤为:

(1)对数据块的分片必须在64位(8B)的边界上划分,因为除最后一段外,其他段长都是64位的整数倍;

(2)对得到的每一个分片都加上原来的数据报的IP头,组成短报文;

(3)每一个短报文的长度字段修改为它实际包含的字节数;

(4)第一个短报文的偏置值设置为0,其他的偏置值为其前面所有报文长度只和除以8;

(5)最后一个报文的M标志置0(False),其他报文的M标志置为1(True)。

如下所示是一个分片的实例:

网络层ip协议知识很乱学不懂(-网络层协议-IPv4协议)(1)

2、IPv4数据报格式

IP协议的数据报格式如下所示:

网络层ip协议知识很乱学不懂(-网络层协议-IPv4协议)(2)

(1)版本:该字段长4位,表示IP的版本号,值为二进制0100表示IPv4

(2)头部长度(Internet Header Length,IHL):该字段长4位,表示IP头部的长度(即除了数据部分之外),以一个32位的字为基本单位,即4字节。该字段最小值为5,即20字节;可取的最大值为15(二进制为1111),表示报头为60字节。

IP分组首部必须是4字节的整数倍,不是整数倍时,则需要使用填充字段加以填充,这样可以保证IP数据部分永远在4字节的整数倍时开始,实现IP协议较为方便。

(3)服务类型(Type of Service,ToS):该字段长度为8位,指定特殊数据处理方式。该字段分为两部分:3位的优先权字段(现在已忽略不用)和4位的ToS字段。后来该字段被IETF改名为区分服务(Differentiated Services,DS)。该字段的前6位构成了区分代码点(Differentiated Services Code Point,DSCP)和显示拥塞通知(Explicit Congestion Notification,ECN)字段,DSCP用于定义64个不同服务类型,而ECN用于通知拥塞,具体如下图所示:

网络层ip协议知识很乱学不懂(-网络层协议-IPv4协议)(3)

(4)报文总长度(Total Length):该字段长度为16位,单位是字节,指的是首部加上数据之和的长度。所以数据报的最大长度为=65535字节(64KB)。由于有MTU限制(如以太网单个IP数据报就不能超过1500字节),所以超过1500字节的IP数据报就要分段,而总长度是所有分片报文的长度和。IP是一个网络层的协议,需要考虑IP分组穿越不同网络的情况,有时,一个IP分组的长度可能无法满足某些高速网络中的最小数据帧长的要求,此时需要IP分组最后进行填充。如果没有总长度字段的指示,处理程序无法识别出哪里是IP分组的结束。

(5)标识符(Identifier):该字段长度为16位,可以唯一地标识一个IP分组。同一数据报分段后,其标识符一致,这样便于重装成原来的数据报。

(6)标记字段(Flag):该字段长度为3位,第1位没有定义,必须为0;第2位是不分段(DF)位,值为1表示不能分片,为0表示允许分片;第3位是更多分片(MF)位,值为1 表示之后还有分片,为0表示是最后一个分片。

(7)分片偏移字段(Fragment Offset):该字段长度为13位,表示数的单位是8字节,即每个分片长度是8字节的整数倍。该字段指明当前分片在原始IP分组中的偏移地址。

(8)生存时间(Time to Live,TTL):该字段长度为8位,用来设置数据报最多可以经过的路由器数,用于防止无限制转发。当IP分组通过一个路由器时,该分组的TTL将被减1,如果TTL为零,该IP分组将被丢弃,从而避免循环路由的问题。该字段由发送数据的源主机设置,通常为16、32、64、128个。

(9)协议字段(Protocol):该字段长度为8位,指明IP层所封装的上层协议类型,如ICMP(值为1)、IGMP(值为2)、TCP(值为6)、UDP(值为17)等。

(10)头部校验(Header Checksum):该字段长度为16位,是根据IP头部计算得到的校验和码,用于保证首部的完整性。该校验码没有采用复杂的CRC编码,而是对头部中每个16比特进行二进制反码求和(与ICMP、IGMP、TCP、UDP不同,IP报头不对IP报头后面的数据进行校验)。另外,由于路由器经常修改TTL的数值,在RFC1141中给出了一种方法,使得路由器在修改TTL时不需要重新计算整个首部的校验和。

(11)源IP地址、目的IP地址:该字段长度均为32位,用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址,都是IP地址。

(12)可选字段(Options):该字段长度可变,从1字节到40字节不等,用来定义一些任选项,如记录路径、时间戳等。这些选项很少使用,并且不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32位(4字节)的整数倍,如果不足,必须填充0以达到此长度要求。

3、IP地址分类

IP协议给每一台主机分配一个唯一的逻辑地址——IP地址。IP地址使用32位的二进制来表示,为了方便使用,经常将IP写成10进制的形式,中间使用“.”符号将字节分开,这种表示方法叫做点分十进制表示法。IP地址分为网络号和主机号两部分,网络号标识一个网络,一般网络号由互联网信息中心(InterNIC)统一分配。主机号用来表示网络中的一个主机,它一般由网络中的管理员来具体分配。

(1)网络地址:主机号全0表示网络地址,不能做源、目标地址;

(2)广播地址:主机号全1表示广播地址,不能做源地址;

(3)子网掩码:网络号部分全为1,主机号部分全为0;用于计算网络地址用,只需将IP地址和子网掩码做与操作,就可得到网络地址。

3.1 5类地址

根据IP地址的前4位将IP地址分为5类:A类用于大型网络,B类用于中型网络,C类用于小型网络,D类用于组播,E类保留用于实验。各类地址特征如下:

网络层ip协议知识很乱学不懂(-网络层协议-IPv4协议)(4)

(1)A类地址:第一位固定为0,子网位8位,主机位24位

A类地址范围:1.0.0.0~127.255.255.255

A类地址中的私有地址:10.X.X.X,即在互联网上不适用,而只在局域网络中的地址,网络号为10,网络数为1个,地址范围为10.0.0.0~10.255.255.255。

A类地址中的保留地址:127.X.X.X,用作环回(Loopback)地址,环回地址(典型的是127.0.0.1)向自己发送流量。发送到该地址的数据不会离开设备到网络中,而是直接回送到本主机。该地址既可以作为网络地址,又可以作为源地址,是一个虚IP地址。

(2)B类地址:前两位固定为10,子网位16位,主机位16位

B类地址范围:128.0.0.0~191.255.255.255

B类地址中的私有地址:172.16.0.0~172.31.255.255

B类地址中的保留地址:169.254.X.X,如果将PC机上的IP地址设为自动获取,而PC机又没有找到响应的DHCP服务,那么最后PC机可能得到保留地址中的一个IP。

(3)C类地址:前三位固定为110,子网位24位,主机位8位

C类地址范围:192.0.0.0~223.255.255.255

C类地址中的私有地址:192.168.X.X,地址范围为192.168.0.0~192.168.255.255。

(4)D类地址:前四位固定为1110,不分网络地址和主机地址

D类地址范围:224.0.0.0~239.255.255.255。其中,223.0.0.1代表所有主机与路由器;224.0.0.2代表所有组播路由器;224.0.0.5代表OSPF路由器;224.0.0.6代表OSPF指定路由器/备用指定路由器;224.0.0.7代表ST路由器;224.0.0.8代表ST主机;224.0.0.9代表RIP-2路由器;224.0.0.12代表DHCP服务器/中继代理;224.0.0.14代表RSVP封装;224.0.0.18代表虚拟路由器冗余协议(VRRP)。

(5)E类地址:前四位固定为1111,不分网络地址和主机地址

E类地址范围:240.0.0.0~255.255.255.255

3.2 几类特殊的IP地址

地址名称

地址格式

特点

可否作为源地址

可否作为目标地址

有限广播

255.255.255.255

广播不被路由,会被送到相同物理网络段上的所有主机

N

Y

直接广播

主机字段全1,如192.1.1.255

广播会被路由,并会发送到专门网络上的每台主机

N

Y

网络地址

主机位全0,如192.168.1.0

表示1个子网

N

N

全零地址

0.0.0.0

代表任意主机

Y

N

环回地址

127.X.X.X

向自己发送数据

Y

Y

4、子网与子网掩码

IPv4采用的是32位IP地址设计限制了地址空间的总容量,出现了IP地址紧缺的现象,而IPv6(采用128位IP地址设计)还不能够很快地进入应用,这时就需要采取一些措施来避免IP地址的浪费。因此出现了子网连网和可变长子网掩码(VLSM)两种技术。

4.1 子网连网

子网连网,出自RFC950的定义。它的主要思想就是将IP地址划分成3个部分:网络号、子网号、主机号。也就是说,将原先的IP地址的主机号部分分成子网号和主机号两部分。说到底,也就是利用主机号部分继续划分子网。子网可以用“子网掩码”来识别。例如,可以将一个C类地址进行划分子网,划分如下图所示:

网络层ip协议知识很乱学不懂(-网络层协议-IPv4协议)(5)

将最后8位——原来的主机号,拿出两位用来表示子网,则可以产生两个子网(01和10,由于00代表网络,11代表广播不能用来表示具体的网络),每个子网可包含62个主机(000001~111110,同样的000000代表网络,111111代表广播被保留)。值得一提的是,这时子网掩码就发生了变化,不是255.255.255.0(11111111 11111111 11111111 00000000),而是255.255.255.192(11111111 11111111 11111111 11000000)。

在从C类地址中划分子网的时候就可以参照下表进行:

主机号中用于表示子网号的位数

子网划分后相对应的子网掩码

总共可用的子网地址数

每个子网可用的主机地址数

2位

255.255.255.192

2

62

3位

255.255.255.224

6

30

4位

255.255.255.240

14

14

5位

255.255.255.248

30

6

6位

255.255.255.252

62

2

采用了子网连网技术后,虽然在一定程度上缓解了这个问题,但又引发一个新问题,即使得每个子网的主机数相等,难以有效地满足实际的需要,又引起了新的IP地址浪费。VLSM技术正是针对这个问题行之有效的解决方案。

4.2 VLSM

VLSM(Variable Length Subnet Masking)是一种产生不同大小子网的网络分配机制(在RFC1878中有详细说明)。VLSM用直观大的方法在IP地址后面加上“/网络及子网编码位数”来表示。例如,192.168.123.0/26表示前26位表示网络号和子网号,即子网掩码为26位长,主机号6位长。利用VLSM技术,可以多次划分子网,即分完子网后,继续根据需要划分子网。所以使用VLSM技术来节约IP地址,可以将其理解为把大网分解成小网

4.3 CIDR

无类路由选择协议(Classless Inter Domain Routing,CIDR)是为了应对VLSM而产生的,是一种路由技术,也就是说,如果使用VLSM技术进行子网划分,那么在互连是使用的路由器就必须能够支持CIDR。在一个有类别的网络中(只区分A、B、C等大类的网络),路由器决定一个地址的类别,并根据该类别识别网络和主机,而在CIDR中,路由器使用前缀来描述有多少位是网络位,剩下的位则是主机位。CIDR显著提高了IPv4的可扩展性和效率,通过使用路由聚合(或称超网)可有效地减小路由表的大小,节省路由器的内存空间,提高路由器的查找效率。该技术可以理解为把小网合并为大网

5、IP QoS

QoS指一个网络能够利用各种基础技术,为指定的网络通信提供更好的额服务能力,是网络的一种安全机制,是用来解决网络延迟和阻塞问题的一种技术。

QoS机制的工作原理是,优先于其他通信为某些通信分配资源。要做到这一点,首先必须识别不同的通信。通过“数据包分类”,将到达网络设备的通信分为不同的“流”,然后每个流的通信被引向转发接口上的相应“队列”,每个接口上的队列都根据一些算法接受“服务”。队列服务算法决定了每个队列通信被转发的速度,进而决定分配给每个队列和相应流的资源。

为提供网络QoS,必须在网络设备中预备或配置下列各项:

(1)消息分类,让设备把通信分成不同的流;

(2)队列和队列服务算法,处理来自不同流的通信。

通常把这些一起称为“通信处理机制”。单独的通信处理机制并没有用,它们必须按一种统一的方式在很对设备上预备或配置,这种方式为网络提供了有用的端到端“服务”。因此,要提供有用的服务,既需要通信处理机制,也需要预备和配置机制。

QoS相关技术与服务有如下几种。

1、集成服务(IntServ)与资源预留协议(RSVP)

集成服务是在传送数据之前,根据业务的QoS需求进行网络资源隔离,从而为该数据流提供端到端的QoS保证。

资源预留协议是IntServ的核心,是一种信令协议,用来通知网络节点预留资源。资源预留的过程从应用程序流的源节点发送Path消息开始,该消息会沿着流所经路径传到流的目的节点,并沿途建立路径状态;目的节点收到该Path消息后,会向源节点回送Resv消息,沿途建立预留状态,如果源节点成功收到预期的Resv消息,则认为在该路径上资源预留成功。如果资源预留失败,资源预留协议会向主机发回拒绝消息。

IntServ能提供端到端的QoS保证。但IntServ对路由器的要求很高,当数据流数量很大时,路由器的处理能力会遭到很大的压力。IntServ的可扩展性很差,能以在Internet核心网络实施。

2、区分服务(DiffServ)

区分服务是将用户的数据流按照服务质量要求划分等级,任何用户的数据流都可以自由进入网络,但是当网络出现拥塞时,级别高的数据流在排队和占用资源时比级别低的数据流有更高的优先权。

DiffServ主要通过以下两个机制来完成不同QoS业务要求的分类。

(1)DS标记。DiffServ起源于IntServ,但属于相对简单、粗划分的控制系统。DiffServ取代了IPv4的服务类型字段和IPv6的通信量类字段,并重新定义为DS。路由器根据DS字段的值来处理分组的转发。因此,利用DS字段的不同数值就可以提供不同等级的服务质量。

在使用DS字段之前,用户和网络服务提供商(ISP)商定一个服务等级协定(Service Level Agreement,SLA),通过SLA约定服务类别(吞吐量、分组丢失率、时延等)和每一类别所允许的通信量。

(2)每跳行为(Per Hop Behavior,PHB)。当数据流通过网络时,路由器会采用每跳行为来处理流内的分组。“行为”可以是“迅速转发这个分组”或“丢弃这个分组”。每跳则强调行为只涉及到本路由器转发的这一跳行为,而一下路由器的处理方式与本路由器无关。

6、子网划分方法6.1 基本子网划分,取网络号

A类保留第一个位,后面为0;B类保留前两位,后面全0;C类保留前三位,后面全0.

6.2 复杂子网划分,取网络号

将掩码为255的部分对应的部分照抄,然后非255的部分,将掩码和IP地址均转化为2进制作运算。

6.3 给定IP地址和掩码,计算网络/子网广播地址

根据规则:网络/子网号是网络/子网中的最小数据字,广播地址是网络/子网中的最大数字值,网络中有效、可分配的地址则是介于网络/子网号和广播地址之间的IP地址。

(1)基本子网划分,取广播地址。掩码为255的部分照抄,为0的部分改为255.

(2)复杂子网划分,取广播地址。对于255部分照抄,0部分转为255,对于其他部分先用256减去该值得到x,然后找到与IP地址中对应数最接近x的倍数y,再将y-1即可。

6.4 复杂子网划分,获取有效子网数

例如,IP地址是140.140.0.0,子网掩码是255.255.240.0。则先找到特别的掩码位240,转换成二进制数11110000,因此得到主机位是4,则以为基数进行增长:140.140.0.0,140.140.16.0,140.140.32.0,140.140.48.0,...,140.140.248.0。

,