哈工大计算网络课程网络层协议之:IP数据报、IP子网、子网掩码详解

哈工大计算网络课程网络层协议之:IP数据报、IP子网、子网掩码详解

文章目录

  • 哈工大计算网络课程网络层协议之:IP数据报、IP子网、子网掩码详解
    • Internet网络层
    • IP数据报(分组)格式
    • IP数据报分片
      • 最大传输单元(MTU)
      • IP分片与重组
      • IP分片过程
    • IP编址
    • IP子网(Subnets)
    • 有类IP地址
    • IP地址与子网划分
    • 子网掩码

Internet网络层

主机、路由器网络层主要功能包括:

网络层核心功能之一:就是路由和转发,因此Internet网络层一个需要实现的重要的功能就是设计路由协议,进行路径选择。比如路由协议:RIP、OSPF、BGP等。

**转发表存储了具体的路由信息,表示目的IP地址与对应输出链路端口的映射关系。**也就涉及到IP协议的相关内容:寻址规约、分组格式等。

在Internet网络传输过程中,IP数据分组难免会出现一些差错,此时,网络层需要将这些差错信息传输给相应的路由器或主机,这个时候就需要另一个非常重要的协议:ICPM协议(互联网控制报文协议)。它的作用是提供差错报告,以及路由器信令相关功能。 ICPM协议在一定程度上相当于IP协议的伴生协议,也就是说,实现IP协议,也就要实现ICPM协议,才能实现IP协议中的一些差错报告等功能。

IP数据报(分组)格式

IP数据报格式主要包括两部分:首部,数据段。

固定部分表示在所有的IP数据报中都是固定大小的。

  • 版本号: 占4位,表示IP协议的版本号。比如,如果是IPv4的话,这个4位表示的值就是4,如果是IPv6的话,这4位表示的值就是6。
  • 首部长度: 占4位。表示IP分组的首部长度。由于4位所能表示的最大值就是15,而首部长度最小就是20,因此IP协议规定,首部长度换算成10进制时,以4字节为单位。比如,当首部长度换算成10进制为5时,其表示的实际IP首部长度为20(5X4)字节
  • 服务类型(TOS)字段: 占8位:表示期望获得哪种类型的服务。1998年这个字段改名为区分服务。只有在网络提供区分服务(DiffServ)时使用。一般情况下不适应,通常IP分组的该字段(第二字节)的值为00H。
  • 总长度: 占16位,表示整个IP分组的总字节数(首部+数据)。由于是16位的,可以表示的最大范围是65535Byte,最小的IP分组首部:20B,IP分组可以封装的最大数据:65535-20 = 65515B。
  • 生存时间(TTL): 占8位,表示IP分组在网络中可以通过的路由器数(或跳步数)。路由器每转发一次分组,TTL减一。如果TTL=0时,路由器会丢弃该IP分组。此时,路由器一般会向源主机发送一个ICMP的报文。
  • 协议: 占8位,表示IP分组封装的是哪个协议的数据包,实现复用/分用。比如:协议值为6时,表示TCP协议,封装的是TCP段。协议值为17时,表示UDP协议,封装的是UDP数据报。
  • 首部校验和: 占16位,实现对IP分组首部的差错检测。计算校验和时,该字段置全0。采用的算法就是反码算数运行求和,和的反码作为首部校验和字段。校验和是逐跳计算、逐跳校验的,也就是首部校验和在每跳路由器转发时,一定都是重新计算重新校验的(每一跳转发时,首部字段可能都会有变化,比如TTL-1)。
  • 源IP地址、目的IP地址: 各占32位,分别标识发送分组的源主机/路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址。
  • 选项字段: 长度可变,范围在1~40B之间,携带安全、源选路径、时间戳和路由记录等内容。实际上很少被使用。
  • 填充字段: 长度可变,范围在0~3B之间,目的是补齐整个首部,符合32位对其,即保证首部长度是4字节的倍数。

IP数据报分片

最大传输单元(MTU)

按照网络层结构,IP分组在具体的网络中传输时,会向下封装到数据链路层的数据帧中。不同的数据链路在封装时,对数据帧大小是有限制的。因此,用MTU来表示链路层数据帧可封装数据的上限。

显然,不同链路的MTU是不同的,那么如果传输路径上两个链路的MTU不同该如何处理呢?当一个IP数据报,在一个较大MTU的链路上传输时,是可以封装到数据帧里的,但是当经过路由器转发到下一个较小MTU的链路上时,有可能就装不到一个数据帧里面。这时就涉及到IP分片的问题。

IP分片与重组

大IP分组向较小MTU链路转发时,可以被”分片“(fragmented)。

并不是只要大的IP分组向较小MTU链路转发时,就一定会被分片。路由器是否可以对其进行分片,是根据分组里的某个标志位来看的。 如果此时,路由器发现该IP分组不允许被分片,会将该分组丢弃,同时一般也会发送ICMP报文给源主机。

如果该IP分组允许被分片,则1个IP分组会被分为多片IP分组。

这些IP分片到达目的主机后进行”重组“(reassembled)。也就是说,路由器只管分组,而数据分组到达的最终目的主机负责组装。

但是随着数据分组在传输过程中的不断拆分,各个分组可能会被沿着不同的链路进行传输,到达目的主机的顺序也无法保证,那么目的主机如何才能在接收到这些分组后,识别各个分组的顺序并重新组装呢。这就需要在各个分组中添加一些标识。

因此,在IP首部的相关字段用于标识分片以及确定分片的相对顺序。 如果其中的某一分片丢失了,目的主机会在等待一段时间后,如果还没有接收到,则会将整个分组都丢弃。

具体来说,IP首部的总长度、标识、标志位和片偏移字段参与标识分片。

  • 标识字段: 占16位,标识一个IP分组。IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识。借助于源IP地址、目的IP地址、协议等字段一起,唯一标识一个IP分组。

  • 标志位: 占3位。最高位的bit保留,没有定义,第二个bit标识DF,最低位的bit标识MF。

    • DF:(Don’t Fragment)
    • MF:(More Fragment)

    这个标志位即标识了路由器是否可以对一个分组进行分片。

    • DF=1: 禁止分片。即如果IP分组超过了某个链路的MTU的话,禁止路由器对该IP分组分片。
    • DF=0: 允许分片。即如果IP分组超过了某个链路的MTU的话,允许路由器对该IP分组分片。
    • MF=1: 非最后一片。这个标志位置1,首先说明这个IP分组不是一个独立的IP分组,而是由IP分组分片出来的分组。而且可以明确的是,这个分片不是最后一片。
    • MF=0: 最后一片(或未分片)。即说明是分片的最后一片,又或者是根本没有分片。
  • 片偏移量: 占13位,一个IP分组分片封装原IP分组数据的相对偏移量。根据片偏移量的相对大小,实际上就可以排序出每个片的顺序。最后一片是MF=0,而且如果MF=0,且是被分片的分组话,那么它的片偏移量肯定不是0。在IPv4的分组格式里,片偏移量的值是以8字节为单位的。

IP分片过程

假设原IP分组总长度为L,待转发链路的MTU为M

若L > M,且DF = 0,则可以/需要分片。

分片后每个分片的标识复制原IP分组的标识。即原IP分组标识是什么,分片后的所有IP分组都取这个一样的标识。

通常分片时,除最后一片,其他分片均按照MTU允许的最大分片进行分片。

由于片偏移量是以8字节为单位,因此除了最后一个分片外,一个最大分片可封装的数据应该是8的倍数。因此,一个最大分片可封装的数据为:

MTU - 20字节的首部带下,表示数据帧携带的数据字节大小。除以8后向下取整,这个就是分片后,一个分片最大可装载的数据量。

此时,一个总长度为L的IP数据报,分片后的总分片数为:

L-20表示原IP数据报减去20字节首部长度,除以d(每个分片最大可封装数据大小) = 分片总数。

每片的片偏移字段取值为:

第一分片的片偏移量一定是0,其他的分片以此类推。

  • 每片的总长度字段为:

即除了最后一个分片外,都是最大的数据大小,加上20字节首部大小。最后一片即包含整个数据报剩下的那部分字节数。

  • 每片的MF标志位为:

即除了最后一个分片的MF=0外,其他分片的MF都等于1,表示非最后一个分片。

例子:

  • 4000B数据报
  • 输出链路MTU = 1500B
  • DF = 0

IP编址

IP分组中,需要两个非常重要的字段,来表示一个IP分组从哪里来,到哪里去

  • 源地址(SA):从哪儿来
  • 目的地之(DA):到哪儿去

网络接口:主机/路由器与物理链路的连接

  • 实现网络层功能
  • 路由器通常有多个接口
  • 主机通常只有一个或两个接口(比如,有限的以太网接口,无限的802.11接口)

在进行网络编址的过程中,事实上,需要重点编址的是实现网络层功能的这些接口。编址后的接口可以用来实现IP数据分组的寻址过程。

这些红色的表示网络层中的需要进行IP编址的网络层设备,包括路由器、主机的网络接口。

IP地址:32比特(IPv4)编号标识主机、路由器的接口,比如:11011111 00000001 00000001 00000001。而这些32位的二进制数比较难以记忆和使用。因此为了更方便的使用和记忆,一般会将上述32位拆分成4个8位,每个8bit转换成10进制,再用点号.拼接起来。

上述32位IP地址,采用4个十进制数来表示为:

这种对IP的书写方式,也成为点分十进制IP地址形式,也是目前使用比较广泛的IP地址书写方式。按照这种方式,可以对上述示例图中的每个接口分配一个IP地址,即在网络层中,可以利用这些唯一标识的IP地址,唯一标识这些网络接口。

在Internet网络中,IP地址更准确来说,是与每个网络接口相关联,即某某主机、路由器的IP地址。而一般说某个主机的IP地址,实际上是因为大部分主机往往只有一个网络接口,这个接口地址往往也被当做主机IP地址。

如果我们随意的为接口分配独立的IP地址,再用路由转发表来记录的话,之前也讨论过这个问题,很容易造成路由器的存储、检索性能瓶颈。因此,就像改进后的路由表的目的地址表示一个范围来说,在为接口分配IP地址时,也应该是按照范围进行分配。

IP子网(Subnets)

此时,把32位IP地址划分为两部分:

  • 网络号(NetID)—高位比特
  • 主机号(HostID)—低位比特

高比特位用来表示一个网络,此时,在进行地址分配时,需要遵循一个基本原则:

  • 保证分配到某一个区域网络中的IP地址集合,它们的网络号是相同的,并且主机号是不同的。

如上图所示,红色部分表示的就是该IP地址所属的网络号,不同子网下的网络号是不同的。

这样,具有相同网络号的IP地址的集合就构成了一个IP子网。对于这样一个集合的网络接口,我们可以利用它们相同的网络号来描述这个区域的网络。

IP子网的特点:

  • IP地址具有相同网络号的设备接口
  • 不跨越路由器(第三及以上层网络设备),就可以彼此物理联通的接口。换句话说,如果中间跨越了路由器,也就不是一个IP子网了。

有了这样的编址方式,在路由转发表中,在存储向哪一个网络中转发数据时,就不需要记录某一个具体的IP地址了,只需要记录相应区域的IP子网地址就可以了。也就是,可以利用一个特殊地址,来描述一个个的IP子网的整体,这个地址就是IP子网地址。

有类IP地址

上述我们介绍了IP子网的概念,具有相同网络号的一组IP地址集合构成了一个IP子网,这些IP地址在不跨越路由器就可以实现彼此的物理联通。

在IP子网的概念下,一个IP地址是由高比特位的网络号和低比特位的主机号共同构成的。那么,这里存在的问题就是这两部分应该各占总的IP长度的多少位比较合适?

显而易见,当网络号占用的比特更多时,能表示的IP子网就更多,但是每个IP子网中包含的主机数就更少。而当主机号更多时,每个子网包含的主机数更多,可以形成更大的网络,但是能够表示的子网个数就相对更少。

最初为了解决这个问题,就涉及到有类IP地址划分的概念。

有类编址

假设下面图中的圆圈包含了整个32位的IP地址空间,所谓的有类IP地址编制,实际上采取的是一个二分法。首先把最高比特位50%的地址空间分给称为A类地址空间,同时定义A类地址的网络号占用8bit,剩余24bit用来表示主机号。由于A类地址网络号的最高位固定为0,因此,网络号所能表示的范围就是0-2的7次方,即0-127,而24位主机号能表示的范围就在0.0.0~255.255.255。

这里网络号最高位固定位0也很好理解,因为32位IP地址所能表示的地址范围为0.0.0.0-255.255.255.255,为了使A类地址占总地址空间的一半,所以把最高8bit位拆成2半,即A类地址最高8bit表示0~127,所以最高位固定为0.

在剩下的50%地址空间中,继续进行二分,即继续在最高8bit所能表示的128~255之间进行二分,因此,B类地址所能表示的地址范围就在:128.0.0.0 ~ 191.255.255.255。同时,在B类地址中,定义前16位bit作为网络号,后16位作为主机号。

因为A类地址的高8bit最大是127,因此B类地址的最高位应该是1,同时为了满足二分的特性,次高位应该是0。

最后,剩余1/4的地址空间的最高2bit一定是11,再进行二分的话就是接着根据第三高位进行拆分,划分给C类地址。显然这部分地址的高8位表示的地址范围在:192~223之间。同时,定义C类地址的高24位为网络号,低8位为主机号。

对于剩余的1/8的地址空间,再进行最后一次的二分,拆分成两个占6.25%地址空间的D类地址和E类地址。高8bit表示的地址范围分别是:

  • E类地址:224~239
  • D类地址:240~255

这两类地址,不再区分网络号和主机号,一般这两类地址空间用作特殊目的。这类地址一般用来命名或标识互联网中的一组主机,这组主机理论上可以分布在互联网中的每个地方。在这种情况下,这类地址只能作为IP分组的目的地址,也就是只能往这类地址发送数据。这类地址也被成为多播地址,或是组播地址。

通过上面的饼状图也能看出,在IP网络中,A类地址+B类地址+C类地址占据了整个IP地址范围的87.5%,也都根据上述IP编制中提及的,划分了网络号和主机号,因此都可以用来标识互联网中的一个唯一网络接口的。

但也有一些特殊的IP地址,是不能够被分配给主机使用的,比如下述的一些特殊IP地址:

IP地址与子网划分

子网掩码

子网掩码形如IP地址,也是32位地址的形式,区别在于对网络号和子网号对应的bit位全部取1,对应主机号bit位全部写0。

例如:

  • A类网络的默认子网掩码为:255.0.0.0
  • B类网络的默认子网掩码为:255.255.0.0
  • C类网络的默认子网掩码为:255.255.255.0

此时,假设B类网络借用主机号的3bit来划分子网,将该子网的主机号的最高3bit都置为1,那么此时该子网的掩码为:255.255.224.0。

因此,子网地址+子网掩码 = 准确确定子网大小。

例如:

  • 子网:201.2.3.0、子网掩码:255.255.255.0

由于子网掩码是255.255.255.0,子网号对应的bit全部取1,也就是该子网的IP地址24位都表示网络号,我们就知道这个子网就是一个标准的C类网络。

假设我们想将这个子网,划分为等长的4个子网,就是针对该C类网络的8位主机号,进行均等的划分,256/4=64,因此划分后的每个子网的IP地址为:

现在我们知道了如何对子网进行划分,那么如上图所示,当路由器将这些不同的子网关联在一起后,路由器如何确定应该将IP分组转发到那个子网去呢?

这个时候,路由器的转发表除了要保存子网的地址外,还必须伴随着相关的子网掩码。

此时,路由器转发表的检索过程为:

  • 将IP分组的目的IP地址与子网掩码按位与运算,提取对应的子网地址。

例如:目的IP地址:172.32.1.112,子网掩码为:255.255.254.0

将目的IP地址与子网掩码按位做与操作后,得到的结果为:

因此,该目的IP地址对应的子网地址位:172.32.0.0(子网掩码:255.255.254.0)

这个子网对应的地址范围,也就是主机号所能表示的IP地址范围为:172.32.0.0~172.32.1.255。

本文链接:https://my.lmcjl.com/post/14639.html

展开阅读全文

4 评论

留下您的评论.