欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

6.计算机网络知识复习(第 06 天)--子网划分、构建超网络、ICMP、IPv6

最编程 2024-04-29 07:30:43
...

三、网络层概述(3)--子网划分、构造超网、ICMP、IPv6

1、子网划分和子网掩码

1.1、子网划分

分类的IP地址的弱点:

  1. IP地址空间的利用率有时很低。比如单位想申请B类网络,但是主机数量又不多,这样就会造成IP地址的浪费。
  2. 两级IP地址不够灵活。

有没有一种办法可以随时随地,灵活增加本单位的网络,不需要事先去ISP申请新的网络号呢?可以使用子网划分!

划分子网思想:

为解决上述问题,从1985年起在IP地址中又增加了一个“子网号字段”,使两级IP地址变成为三级IP地址,它能够较好地解决上述问题,并且使用起来也很灵活。这种做法叫作划分子网

基本思路:

(1)内部可见,外部不变

一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网划分子网纯属一个单位内部的事情本单位以外的网络看不见这个网络是由多少个子网组成,因为这个单位对外仍然表现为一个网络

(2)IP地址 = 网络号 + 子网号 + 主机号

划分子网的方法是,从该网络的主机号中借用几位作为子网号,当然主机号也就相应的减少几位。于是两级IP地址在本单位内部就变成为三级IP地址【由于主机号不能全0或全1,所以主机号至少为两位。子网号能否全0全1要看情况,虽然CIDR的使用已经让这个可以使用了,但要谨慎】

(3)先找网络号,再找子网号

凡是从其他网络发送给本单位某个主机的IP数据报,仍然是根据IP数据报的目的网络号先找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按子网号找到目的子网,然后再按照主机号把IP数据报交付目的主机。

示例

假设某单位有一个B类IP地址,网络地址为145.13.0.0(网络号是145.13),即表示凡目的地址为145.13.x.x的数据报都被送到这个网络上的路由器R1

image.png

对上述网络进行子网划分: 这里假定子网号占用8位,即主机号还剩余8位可用,所划分的三个子网分别是:145.13.3.0,145.13.7.0和145.13.21.0。在划分子网后,整个网络对外部仍表现为一个网络,其网络地址仍为145.13.0.0。但网络145.13.0.0上的路由器R1在收到外来的数据报后,再根据数据报的目的地址的进行子网掩码计算转到相应子网。【外部想访问子网网络地址,都要先到网络IP地址为145.13.0.0的路由器接口,然后经过子网掩码的计算才能访问内部子网网络地址。】

image.png

1.2、子网掩码

现在有一个问题就是,假设有一个目的地址为145.13.3.10的数据报转发到了路由器R1,那R1如何将其转发到子网145.13.3.0呢?

由于32位的IP地址本身以及数据报的首部都没有包含任何有关子网划分的信息,所以为了解决上述问题,必须引入额外信息,这就是子网掩码。

image.png

子网掩码: 无论是二级IP地址还是三级IP地址,只要是网络号就全写1(三级地址的子网号也全写1,注意并不是第三个字节八位都是子网号都写1,而是主机号当中较高的位数作为子网号才写1),只要是主机号就全0。

  • 图 a 是IP地址为145.13.3.10的主机本来的两级P地址结构。
  • 图 b 是这个两级IP地址的子网掩码。
  • 图 c 是同一地址的三级IP地址结构,请注意,现在子网号为3的网络的网络地址是145.13.3.0
  • 图 d 是三级IP地址的子网掩码,它也是32位,由一串24个1和跟随的一串8个0组成。子网掩码中的1对应于IP地址中原来二级地址中的16位网络号加上新增加的8位子网号,而子网掩码中的0对应于现在的8位主机号。
  • 图 e 表示R1把三级IP地址的子网掩码和收到的数据报的目的IP地址145.13.3.10逐位相“与”,得出了所要找的子网的网络地址145.13.3.0。

使用子网掩码的好处就是: 不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位的“与”运算(AND),就立即得出网络地址来。

现在因特网的标准规定: 所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。默认子网掩码中1的位置和IP地址中的网络号字段正好相对应。

  • A类地址,默认子网掩码 255.0.0.0
  • B类地址,默认子网掩码 255.255.0.0
  • C类地址,默认子网掩码 255.255.255.0

划分子网增加了灵活性,但是减少了能够连接在网络上的主机数

1.3、使用子网进行分组的转发流程

子网掩码是一个网络或一个子网的重要属性。路由器和相邻路由器交换路由信息时,必须把自己所在网络的子网掩码告诉相邻路由器。在路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。

外部来了一个分组,经过路由器应该如何转发,才能把分组正确的送到子网内对应的主机上?

使用子网划分后,路由表必须包含以下三项:目的网络地址子网掩码,和下一跳地址。 在划分子网的情况下,路由器转发分组的算法如下:

  1. 从收到的数据报的首部提取目的IP地址D。

  2. 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”,看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把D转换成物理地址,把数据报封装成帧发送出去),转发任务结束。否则就是间接交付,执行(3)。

  3. 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)

  4. 对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”,其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5)

  5. 若路由表中有一个默认路由0.0.0.0,如果还是没有对应的网络,就把分组交给默认路由(默认路由的子网掩码也是全0),默认路由会依次发给其他一个路由器,然后循环以上操作。如果在分组的生存时间内还没找到,就丢弃。即执行(6)

  6. 丢弃,报告转发分组出错。

下图有三个子网、两个路由器,现在源主机H1向目的地主机H2发送分组:

image.png

  • 目的IP地址与网络1的子网掩码按位与得到128.30.33.128,不等于网络1的地址128.30.33.0,即H1和H2不在同一个子网内,所以数据转发给路由器R1
  • R1收到数据报后,逐行检查路由表,最终发现目的IP地址128.30.33.138和路由表第二行的子网掩码255.255.255.128按位与,得到128.30.33.128,与第二行的目的网络地址可以匹配,所以R1将数据报从接口1直接交付给目的主机H2

2、无分类编址CIDR

2.1、无分类编址CIDR概念

划分子网在一定程度上缓解了因特网在发展中遇到的困难。但是在1992年因特网依旧遇到如下问题:

  • B类地址在1992年已分配了近一半,眼看很快就将全部分配完毕!
  • 因特网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个)
  • IPv4将耗尽

无分类编址CIDR又称为无分类域间路由选择CIDR(Classless Inter-Domain Routing),是一种无分类编址方法

CIDR消除了传统的A类,B类和C类地址以及划分子网的概念。

CIDR把32位的IP地址划分为两个部分,前面是网络前缀,用来指明网络,后面的部分用来指明主机。CIDR是无分类的两级编址,IP地址 = 网络前缀 + 主机号 。CIDR记法: IP地址后加上“/”,然后写上网络前缀(可以任意长度)的位数。如128.14.32.0/20:表示前20位是网络号,后12位是主机号。

image.png

融合子网地址与子网掩码,方便子网划分。CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。

例如128.14.35.7/20是某CIDR地址块中的一个地址

  • 二进制: 10000000 00001110 00100011 00000111
  • 最小地址: 10000000 00001110 00100000 00000000 (128.14.32.0)
  • 最大地址: 10000000 00001110 0010111111111111 (128.14.47.255)
  • 可以计算该地址块(最小地址/网络前缀大小)的地址一共是2^12个,因为后12位为主机号。
  • 这个地址块可以记作:最小地址/网络前缀大小,128.14.35.0/20。不需要指出起始地址时,可以记为“/20地址块”

地址掩码

为了更方便地进行路由选择,CIDR使用32位的地址掩码,地址掩码由一串1和一串0组成,而1的个数就是网络前缀的长度。

例如,/20地址块的地址掩码是:11111111 11111111 11110000 00000000(20个连续的1)

注意: 虽然CIDR不再使用子网,但是由于目前一些网络还使用子网划分和子网掩码,因此CIDR使用的地址掩码也可以继续称为子网掩码。

“CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块的单位,仍然可以在本单位内根据需要划分出一些子网。这些子网也都只有一个网络前缀和一个主机号字段,但子网的网络前缀比整个单位的网络前缀要长些。例如,某单位分配到地址块/20,就可以再继续划分为8个子网(即需要从主机号中借用3位来划分子网)。这时每一个子网的网络前缀就变成23位(原来的20位加上从主机号借来的3位),比该单位的网络前缀多了3位。

2.2、构成超网

将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合。 划分子网是将大网络切割成几个子网,而构成超网是将多个子网聚合成一个大子网。

image.png

如上图所示,假定某ISP拥有地址块206.0.64.0/18(相当于有64个C类网络),ISP可以给该大学分配一个地址块206.0.68.0/22(相当于有4个C类网络),这个大学然后可*地对本校的各系分配地址块,而各系还可再划分本系的地址块【集中收发快递】

CIDR的地址块分配有时不易看清,这是因为网络前缀和主机号的界限不是恰好出现在整数字节处,只要写出二进制表示形式,就清晰了。从上图就可以清楚地看出地址聚合的概念。这个ISP共拥有64个C类网络。如果不采用CIDR技术,则在与该ISP的路由器交换路由信息的每一个路由器的路由表中,就需要有64个项目。(如第二节中的R1路由器,路由表中就有三个子网的信息)。但采用地址聚合后,就只需用路由聚合后的一个项目206.0.64.0/18就能找到该ISP。(即构成超网)

优点:简化了路由转发表的查找,网络前缀越短,其地址块所包含的内容越多

2.3、最长前缀匹配

在CIDR中,由于采用了网络前缀这种记法,IP地址由网络前缀和主机号这两部分组成。因此路由表的每条记录由网络前缀下一跳组成。但是,在查找路由表的时候,可能有多条记录匹配,应当从匹配结果中选择具有最长网络前缀的路由,即最长前缀匹配。因为网络前缀越长,其地址块越小,路由就更具体

构成超网是将前缀缩短,把具体的网络变成了宽泛的网络。在实际转发时,应该找最具体的网络,而不是最宽泛的网络。

例题: 路由器R0的路由表见下表:若进入路由器R0的分组的目的地址为132.19.237.5,请问该分组,应该被转发到哪一个下一跳路由器(B) 。 A. R1 B. R2 C. R3 D. R4

image.png

  • R1:路由器目的网络的网络前缀为前8位,与目的地址的前8位的网络前缀相同,所以匹配,目的地址可以被转发到R1路由器。
  • R2:网络前缀为前11位,目的地址第二个字节二进制为00010011,目的地址前11位与网络地址前11位相同,所以可以转发到R2路由器。
  • R3:网络前缀为前22位,第三个字节二进制为11101000。目的地址第三个字节为11101101。第22位不相同,即网络前缀不相同,所以目的地址不能转发到R3路由器。
  • R4:网络号全0,主机号全0表示默认路由,当目的地址与转发表都不匹配时,交给默认路由,然后去别的路由器的转发表找查找与目的地址匹配的网络。

查找路由表可能得到几个匹配结果,应选择具有最长网络前缀的路由。综上,答案是B。

3、网际控制报文协议ICMP

3.1、ICMP概念

为了更有效地转发数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP, ICMP是互联网的标准协议。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP协议支持主机或路由器,能够实现

  • 差错(或异常)报告:实际通信过程中,总会有分组出错,对于出错的分组丢弃并发送一个ICMP差错报文。
  • 网络探询

但ICMP不是高层协议(看起来好像是高层协议, 因为ICMP报文是装在IP数据报中,作为其中的数据部分),而是IP层的协议。 ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去,ICMP报文格式如下:

image.png

ICMP报文的前4个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的4个字节的内容与ICMP的类型有关。ICMP报文的代码字段是为了进一步区分某种类型中的几种不同情况。检验和字段用来检验整个ICMP报文。由于IP数据报首部的检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错。

3.2、ICMP报文种类

ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。

image.png

3.2.1、ICMP差错报文种类(5种)

  1. 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。无法交付
  2. 源点抑制(取消):当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。拥塞丢数据时告诉源点慢点
  3. 时间超过:当路由器收到生存时间TTL=0的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃(保证一家人整整齐齐),并向源点发送时间超过报文。TTL=0和不完整
  4. 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。首部字段有问题
  5. 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。值得更好的路由

发送ICMP差错报文的情况:

对于出错的IP数据报丢弃并发送一个ICMP差错报文。ICMP差错报文组成:ICMP报文的前8字节(类型)+出错的IP数据报首部+数据字段前8字节。ICMP差错报文是IP数据报的数据部分

image.png

不应发送ICMP差错报文的情况:

  • 对ICMP差错报告报文不再发送ICMP差错报告报文。
  • 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。(只对第一个分片发送)
  • 对具有组播地址(一点对部分点,与广播区分:一点对所有)的数据报都不发送ICMP差错报告报文。
  • 对具有特殊地址(如127.0.0.0环回地址或0.0.0.0本网内主机地址)的数据报不发送ICMP差错报告报文。

3.2.2、ICMP询问报文(2种)

  1. 回送请求和回答
    1. ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。
  2. 时间戳请求和回答
    1. ICMP时间戳请求报文是请某台主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。时间戳请求与回答可用于时钟同步和时间测量。

3.3、ICMP的应用

  • PING:测试两个主机之间的连通性,使用了ICMP回送请求和回答报文。ping是应用层直接使用网络层ICMP的一个例子,没有通过运输层的TCP和UDP
  • Traceroute:跟踪一个分组从源点到终点的路径,使用了ICMP时间超过差错报告报文。
    • 工作原理:现有源主机和目的主机,中间有多个路由器。源主机发送一连串数据报,数据报之间的差别就是TTL不同。第一个数据报TTL设置为1,当第一个数据报到达第一个路由器时,TTL-1=0丢弃并返回给源主机一个ICMP时间超过报文。第二个数据报TTL设置为2,当第二个数据报到达第二个路由器时,TTL=0丢弃并返回给源主机一个ICMP时间超过报文。其他数据报依次类推,这样就可以算出该分组从源主机到目的主机的路径。

4、IPv6

4.1、为什么有IPv6?

  1. 32位的IPv4地址空间已分配殆尽,无分类编址CIDR和网络地址转换NAT方法治标不治本。
  2. 改进首部格式:之前的IPv4首部部分20字节的字段太多,通过改进首部格式达到快速处理/转发数据报。
  3. 支持QoS:QoS ( Quality of Service,服务质量)指个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制,是用来解决网络延迟和阻塞等问题的一种技术。

4.2、IPv6数据报格式(首部40B,首部单位8B)

IPv6数据报一般形式如下:

image.png

IPv6数据报格式:

image.png

  • 版本:指明了协议版本,IPv6的版本就是6。
  • 通信量类:区分数据报的类别和优先级。
  • 流标签:“流”是互联网络上从特定源点到特定终点的一系列数据报。所有属于同一个流的数据报都具有同样的流标签。
  • 有效载荷长度:有效载荷的大小(扩展首部+数据)
  • 下一个首部:标识下一个扩展首部或上层协议首部。假如有一个数据报,携带基本首部和3个扩展首部(1、2、3),每个扩展首部内都有一个字段:下一个首部字段。基本首部也有下一个首部字段。基本首部的下一个首部标识的是扩展首部1,扩展首部1的下一个首部标识的是扩展首部2...最后一个扩展首部指向数据部分。数据部分是运输层传来的报文段。
  • 跳数限制:相当于IPv4的TTL。 如果达到0,路由器丢弃数据报并返回一个ICMP时间超过差错报文。
  • 源地址(128位)
  • 目的地址(128位)

4.3、IPv6和IPv4

  1. IPv6将地址从32位(4B) 扩大到128位(16B),更大的地址空间。

  2. IPv6将IPv4的校验和字段彻底移除,以减少每跳的处理时间。

  3. IPv6将IPv4的可选字段移出首部,变成了扩展首部,成为灵活的首部格式,路由器通常不对扩展首部进行检查,大大提高了路由器的处理效率。

  4. IPv6支持即插即用(即自动配置),不需要DHCP协议。

  5. IPv6首部长度必须是8B的整数倍,IPv4(一种八片首饰)首部是4B的整数倍。

  6. IPv6只能在主机处分片,IPv4可以在路由器和主机处分片。即使IPv6的分组很长,在路由器也无法分片,如果超过MTU,只能在路由器处丢弃,并返回ICMPv6差错报文。

  7. ICMPv6:附加报文类型“分组过大”。

  8. IPv6支持资源的预分配,支持实时视像等要求,保证一定的带宽和时延的应用。

  9. IPv6取消了协议字段(数据使用什么协议),改成下一个首部字段。

  10. IPv6取消了总长度字段,改用有效载荷长度字段。

  11. IPv6取消了区分服务字段。

4.4、IPv6地址表示形式

可以自己通过ipconfig命令查看

  • 一般形式: 冒号十六进制记法:4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170(每4位bit用一个16进制表示,2^4=16,一个16进制数刚好可以表示完4位。每4*4=16位=2B一组,用冒号隔开)
  • 压缩形式: 4BF5:0000:0000:0000:BA5F:039A:000A:2176====4BF5:0:0:0:BA5F:39A:A:2176。
  • 零压缩形式: 一连串连续的0可以被一对冒号取代
    • 例如 FF05:0:0:0:0:0:0:B3——FFO5::B3
    • 双冒号表示法在一个地址中仅可出现一次。

4.5、IPv6基本地址类型

一般来说,一个IPv6数据报的目的地址可以是以下三种基本类型地址之一:

  • 单播:一对一通信(点对点) 可做源地址+目的地址
  • 多播:一对多通信,可做目的地址(取代了IPv4的广播),数据包交付到一组计算机中的每一个。IPv6没有采用广播的术语,而是将广播看作多播的一个特例。
  • 任播:可做目的地址,这是IPv6增加的一种类型。任播的目的站是一组计算机,但数据包在交付时只交付给其中的一个,通常是距离发送方最近的一个。

4.6、IPv6向IPv4过渡的策略

双栈协议:

双协议栈技术就是指在一台设备上同时启用IPv4协议栈和IPv6协议栈。这样的话,这台设备既能和IPv4网络通信,又能和IPv6网络通信。如果这台设备是一个路由器,那么这台路由器的不同接口上,分别配置了IPv4地址和IPv6地址,并很可能分别连接了IPv4网络和IPv6网络。如果这台设备是一个计算机,那么它将同时拥有IPv4地址和IPv6地址,并具备同时处理这两个协议地址的功能。

image.png

隧道技术:

通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。

例如发送一个IPv6的数据报,到IPv4路由器时,把IPv6数据报封装到以IPv4为首部的数据报当中。

image.png