CN_@子网划分@子网掩码@CIDR@ IP地址与硬件地址及其变化问题
CN_@子网划分@子网掩码@CIDR
子网划分(三级地址)
- 两级P地址的缺点:P地址空间的利用率有时很低;给每个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏;两级的P地址不够灵活。
- 从1985年起,在P地址中又增加了一个“子网号字段”,使两级P地址变成了三级IP地址。
- 这种做法称为子网划分。子网划分已成为因特网的正式标准协议。
子网划分的基本思路如下:
- 子网划分纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
- 从主机号借用若干比特作为子网号,当然主机号也就相应减少了相同的比特。
- 三级P地址的结构如下:
- P地址={<网络号>,<子网号>,<主机号>}
- 凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号,先找到连接到本单位网络上的路由器。
- 然后该路由器在收到IP数据报后,按目的网络号和子网号找到目的子网。
- 最后把IP数据报直接交付给目的主机。
判断子网划分
- 1)划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。
- 因此,从一个IP地址本身或P数据报的首部,无法判断源主机或目的主机所连接的网络是否进行了子网划分。
- 2)RFC950规定,对分类的Pv4地址进行子网划分时,子网号不能为全1或全0。
- 但随着CDR的广泛使用,现在全1和全0的子网号也可使用,但一定要谨慎使用,
- 要弄清你的路由器所用的路由选择软件是否支持全0或全1的子网号。
- 3)不论是分类的IPv4地址还是CIDR,其子网中的主机号为全0或全1的地址都不能被指派。
- 子网中主机号全0的地址为子网的网络号,
- 主机号全1的地址为子网的广播地址。
子网划分特点
- 子网划分
- 增加子网数量;但是网络数量并不会增加
- 子网是对单位或者组织内部表现的
- 网络是对外表现的
- 外部无法知道某个某个网路的是否被划分了子网,以及子网数量的多少
- 只有划分子网的组织内部知道具体的情况
- 使广播域减小;
- 因为,子网间的通信和网络间通信一样需要路由器转发
- 子网划分,占据了主机号位;会导致主机数量变少🎈
- 提高了IP地址的利用率
- 增加子网数量;但是网络数量并不会增加
子网掩码
- 为了告诉主机或路由器对一个A类、B类、C类网络进行了子网划分,使用子网掩马来表达对原网络中主机号的借位。
- 子网掩码是一个与IP地址相对应的、长32bit的二进制串,它由一串1和跟随的一串0组成
- 1对应于IP地址中的网络号及子网号
- 而0对应于主机号。
- 计算机只需将IP地址和其对应的子网掩码逐位“与”(逻辑AND运算),就可得出相应子网的网络地址。
默认子网掩码
- 现在的因特网标准规定:所有的网络都必须使用子网掩码。
- 如果一个网络未划分子网,那么就采用默认子网掩码。
- A、B、C类地址的默认子网掩码分别为255.0.0.0、255.255.0.0、255.255.255.0.
- 例如,某主机的IP地址192.168.5.56,子网掩码为255.255.255.0,
- 进行逐位“与”运算后,得出该主机所在子网的网络号为192.168.5.0.
- 由于子网掩码是一个网络或一个子网的重要属性,所以路由器在相互之间交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉对方。
- 路由表中的每个条目,除要给出目的网络地址和下一跳地址外,还要同时给出该目的网络的子网掩码。
CIDR(无分类域间路由选择)
-
无分类域间路由选择是在变长子网掩码的基础上提出的一种消除传统A;B;C类网络划分,并且可以在软件的支持下实现超网构造的一种IP地址的划分方法。
-
例如
-
如果一个单位需要2000个地址,那么就给它分配一个2048地址的块( 2 11 / 2 8 = 2 3 = 8 2^{11}/2^{8}=2^{3}=8 211/28=23=8,即8个连续的C类网络),而不是一个完全的B类地址。
-
这样可以大幅度提高IP地址空间的利用率,减小路由器的路由表大小,提高路由转发能力。
-
-
-
CIDR虽然不使用子网,但仍然使用“掩码”一词。
- “CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为
子网字段
。 - 但分配到一个CIDR地址块的组织仍可以根据需要划分逻辑子网
- CIDR划分子网的方式使用斜线记法
- “CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为
CIDR地址记法
-
无分类的两级编址的记法
- 网络前缀
- 主机号
-
CIDR 使用“斜线记法”(slash notation),它又称为 CIDR 记法,
- 即在IP 地址后面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。
-
例如: 220.78.168.0/24
CIDR地址块
- 将网络前缀都相同的连续P地址组成“CIDR地址块”
- 一个CIDR地址块可以表示很多地址,这种地址的聚合称为路由聚合,或称构成超网。
- 路由聚合使得路由表中的一个项目可以表示多个路由(原来传统分类地址的路由)
- 有利于减少路由器之间的路由选择信息的交换,从而提高网络性能。
路由聚合
-
-
上图网络中,如果不使用路由聚合,那么R1的路由表中需要分别有到网络1和网络2的路由表项。
-
不难发现,网络1和网络2的网络前缀在二进制表示的情况下,前16位都是相同的,第17位分别是0和1,并且从R1到网络1和网络2的路由的下一跳皆为R2。
-
若使用
路由聚合
,在R1看来,网络1和网络2可以构成一个更大的地址块206.1.0.0/16,到网络1和网络2的两条路由就可以聚合成一条到206.1.0.0/16的路由。
地址块中的地址数
- CIDR地址块中的地址数一定是2的整数次幂(
2
N
2^N
2N),
- 实际可指派的地址数通常为
2
N
−
2
2^{N}-2
2N−2,
- N表示主机号的位数
- 主机号位数越多,网络前缀越短,地址块包含的地址数越多
- 主机号全0代表网络号
- 主机号全1为广播地址。
- N表示主机号的位数
- 网络前缀越短,其地址块所包含的地址数就越多
- 实际可指派的地址数通常为
2
N
−
2
2^{N}-2
2N−2,
子网重叠问题
- 分割子网的时候,后分配的子网和先分配的子网不能有重叠
例
-
一个网络S中有几个子网 X i X_i Xi,其中一个已分配了子网号X0=74.178.247.96/29,则下列网络前缎中不能再分配给其他子网的是(C)
-
A.74.178.247.120/29
-
B.74.178.247.64/29
-
C.74.178.247.96/28
-
D.74.178.247.104/29
-
X0的前缀是29位,那么有32-29=3位作为主机号
-
我们只关心最后一个字节的内容
-
计算X0最后一个字节
96=8*12=1100*1000=0110 0000
- 高3个字节大家都一样不需要比较
-
最后一个字节值 二进制形式 对齐8bit(第4B) 前缀长度 主机位数 子网范围(子网内主机号范围) X0 96=8*12 0110 000 0110 0000 29 3 60H,67H A 120=15*8 1111 000 0111 0000 29 3 70H,77H B 64=4*16 100 0000 0100 0000 29 3 40H,47H C 96=8*12 1100 000 0110 0000 28 4 60H,6FH D 104=8*12+8 1101000 0110 1000 29 3 68H,6FH - 经过比较发现,只有C选项和X0子网(主机号取值范围)出现重合(会产生冲突)
-
事实上,不需要将每个子网的地址范围完全计算出来,只需要比较前缀有没有重叠即可
- 容易看出,X0和C发生了重叠
路由聚合
-
设有4条路由172.18.129.0/24、172.18.130.0/24、172.18.132.0/24和172.18.133.0/24,如果进行路由聚合,那么能覆盖这4条路由的地址是()。
- A.172.18.128.0/21
B.172.18.128.0/22
C.172.18.130.0/22
D.172.18.132.0/23
- A.172.18.128.0/21
-
4条路由的前24位(3个字节)为网络前缀,前2个字节都一样,因此只需要比较第3个字节即可,
- 129=10000001,
- 130=10000010,
- 132=10000100,
- 133=10000101。
-
前5位是完全相同的,
-
因此聚合后的网络的掩码中,1的数量应该是8+8+5=21
- 可以相互聚合的路由就是前缀一致的路由
- 对于需要被聚合的4个路由中
- 容易看出前两个字节都是一样的(172.18)
- 第3个字节中的8bit中
- 前5位取值也都是一样的 10000 10000 10000,
- 第6位开始有不同的取值,因此从这一位开始不属于共同前缀,子网掩码长度为16+5=21
-
聚合后的网络的第3个字节应该是10000000=128,因此答案为172.18.128.0/21。
子网规划问题
-
某单位已经分配到了一个B类地址
-
默认子网掩码为FFH.FFH.00H.00H
-
现在规划如下:
- 划分31个子网,未来还要在增加20个子网
- 每子网需要容纳800台主机
- 那么子网掩码可以如何分配
-
分析:
-
子网数总数51; 2 5 < 52 < 2 6 2^5<52<2^6 25<52<26
-
需要6bit
-
也可以直接计算 ⌈ log 2 51 ⌉ = 6 \lceil\log_2{51}\rceil=6 ⌈log251⌉=6bit
-
-
默认的16位B类子网掩码加上6位的子网划分,占用了22位
-
剩余32-22=10位
-
这10位作为主机号,可以组合出 2 10 = 1024 2^{10}=1024 210=1024种地址,去掉全0和全1,公有 2 10 − 2 = 1022 2^{10}-2=1022 210−2=1022
-
所以FFH.FFH.FH(1100).00H
- FH(1100)= 1111110 0 2 1111 1100_2 111111002=255-3=252
- 即255.255.252.0是一种可行的划分方案
-
IP地址子网归属问题
-
某个子网S的子网掩码为255.255.255.224
-
给出4个IP地址203.3.1.xx
- A:xx=33
- B:xx=65
- C:xx=44
- D:xx=55
-
已知有一个IP是无法通信的
-
分析
-
256 − 224 = 032 = 2 5 256-224=032=2^5 256−224=032=25=10 0000
-
224= 256 − 2 5 256-2^5 256−25 = 255 − ( 1111 1 2 ) =255-(11111_2) =255−(111112)=1110 0000
-
24+3=27;也即是说,子网掩码为27位
-
FFH;FFH;FFH;1110 0000
-
根据问题的4个IP地址,前3个字节都一样
-
只需要考虑第4个字节
-
根据子网掩码有27位,可以知道第4字节的前三一致,那么就属于子网S
-
A4:33=0010 0001
- 32+1
-
B4:65=0100 0001
- 64+1
-
C4:44=0010 1100
4*11=100*1011=101100
-
D4:55=0011 0111
- 8 × 7 = 1000 × 111 − 1 = 111000 − 1 = 110000 + ( 111 + 1 ) − 1 = 110111 8\times 7=1000\times{111}-1=111000-1=110000+(111+1)-1=110111 8×7=1000×111−1=111000−1=110000+(111+1)−1=110111
-
经过比较发现,有三个是001;一个是010
-
B项与众不同,因此B项不属于子网S,无法通信
-
不均子网等划分问题
- 现将一个IP网络划分为3个子网,若其中一个子网是192.168.9.128/26,
- 则下列网络中,不可能是另外两个子网之一的是()。
- A.192.168.9.0/25
- B.192.168.9.0/26
- C.192.168.9.192/26
- D.192.168.9.192/27
- 分析:
- 将P网络划分为3个子网。其中一个是192.168.9.128/26。
- 可以简写成x.x.x.10/26
- (其中10是128的二进制10000000的前两位,因为26-24=2).
- 可以简写成x.x.x.10/26
- A选项可以简写成x.x.x.0/25:
- B选项可以简写成x.x.x.00/26:
- C选项可以简写成x.x.x.11/26;
- D选项可以简写成x.x.x.110/27.
- 对于A和C,可以组成x.x.x.0/25、x.x.x.10/26、x.x.x.11/26这样3个互不重叠的子网。
- 前缀位数少的子网相比于前缀位数多的子网可容纳更多的主机(地址块更大)
- 大块地址可以进一步划分成小地址块
- 同样量级的小地址块可以聚合成一个大一级的地址块
- 例如
- 前缀为m的大地址块:x…x0y…可以进一步拆分为
- x…x00…(/(m+1))
- x…x01…(/(m+1))
- 前缀为m+1小地址块:
- x…x10…
- x…x11…
- 可以聚合为x…x1…(/m)
- 前缀为m的大地址块:x…x0y…可以进一步拆分为
- 对于D,可以组成xx.x.10/26、x.x.x.110/27、x.x.x.111/27这样3个互不重叠的子网。
- 最后一个字节的高2位,高3位
- 10(大块/26)
- 11
- 110(/27小块1)
- 111(/27小块2)
- 但对于B,要想将一个IP网络划分为几个互不重叠的子网,3个是不够的,
- 10/26
- 11/26
- 00/26
- 01/26
- 至少需要划分为4个子网:x.x.x.00/26、x.x.x.01/26、x.x.x.10/26、x.x.x.11/26。
- 将P网络划分为3个子网。其中一个是192.168.9.128/26。
划分为奇数个多规格子网
-
若将S=101.200.16.0/20划分为5个子网( F 1 ∼ F 5 F_1\sim{F_5} F1∼F5),则可能的最小子网的可分配IP地址数是()。
-
A.126
-
B.254
-
C.510
-
D.1022
-
分析:
-
101.200.16.0/20
- 第三个字节0001 0000;
-
将某个地址块划分为奇数个子网,显然是不均等大小子网
-
并且,划分出来的子网 F 1 ∼ F 5 F_1\sim{F_5} F1∼F5必须将被划分的初始地址块S中的所有地址全部覆盖才可以
-
前缀越长,地址块越小
-
我们可以借助严格二叉树来计算划分过程
-
-
容易看出上述的划分(A,B,C,D,E),是能够覆盖整个S的块
-
并且最小的块时D,E;它们的前缀长度为24;主机号为32-24=8
-
所以可以指派的主机数为 2 8 − 2 = 256 − 2 = 254 2^8-2=256-2=254 28−2=256−2=254
-
最大网络前缀
- 最大网络前缀为30位
- 网络前缀为32位,那么主机位数为0,没有可指派的主机号
- 网络前缀为31位,那么主机位数为1,主机号可以是0/1
- 主机号为0(全0)表示网络号
- 主机号为1(全1)表示广播地址
- 它们都无法指派个某个具体主机,
- 上述两种情况的有效主机IP均为0个
- 当网络前缀不超过30位时
- 主机位数至少有2位
- 至少有01和10连个主机号可以指派
例
- 在子网S=192.168.4.0/30中,能接收到目的地址为T=192.168.4.3的IP分组的最大主机数量为?
- 分析:
- 首先分析192.168.4.0/30这个网络,主机号只占2位
- 末两位中,主机号可能为
- 00
- 01
- 10
- 11
- 其中00,11都是不可指派个具体主机的主机号
- 00是子网络代表号
- 主机号全0表示本网络本身,不作为主机地址使用
- 11是广播地址
- 00是子网络代表号
- 因此该子网S可容纳4 - 2=2个主机 🎈
- 地址范围为192.168.4.0-192.168.4.3
- 主机号全1时,即192.168.4.3是广播地址,
- 恰好目的地址T的末两位就是11,因此T是个广播地址
- 最多有2台主机可以收到目的地之为T的分组(广播分组)
- 末两位中,主机号可能为
- 首先分析192.168.4.0/30这个网络,主机号只占2位
例
-
-
图中的虚线表示设备延伸出来的接口
-
假设
- H1与H2的默认网关和子网掩码均分别配置为192.168.3.1和255.255.255.128,
- H3和H4的默认网关和子网掩码均分别配置为192.168.3.254和255.255.255.128,
-
则下列现象中可能发生的是(C )。
- A.H1不能与H2进行正常P通信
- B.H2与H4均不能访问Internet
- C.H1不能与H3进行正常IP通信
- D.H3不能与H4进行正常P通信
-
分析:
- 从子网掩码可知H1和H2处于同一网段,H3和H4处于同一网段,分别可以进行正常的IP通信
- 因为R2的E1接口的IP地址为192.168.3.254,而H2的默认网关为192.168.3.1,所以H2不能访问Internet,
- 而H4的默认网关为192.168.3.254,所以H4可以正常访问Internet,
- 由H1、H2、H3和H4的子网掩码可知H1、H2和H3、H4处于不同的网段,需通过路由器才能进行正常的IP通信,而这时H1和H2的默认网关为192.168.3.1,但R2的E1接口的IP地址为192.168.3.254,无法进行通信,从而H1不能与H3进行正常的IP通信。
-
假设R1,R2,R3之间的点对点链路使用201.1.3.x/30
- 当H3访问S时,R2转发出去的,封装HTTP请求的IP分组是源IP地址和目的IP地址,分别是
- 201.1.3.10;
- 130.18.10.1
- 分析前缀位数30,说明只有后两位是主机号
- 去掉全0和全1的两个特殊主机号,剩下2个可用的单播IP地址(可以作为目的地址或者源地址)
- 已知路由器R1用掉了201.1.3.9,其(第4个字节0000 1001)的末两位是01
- 那么只剩下10的主机号(第4字节为0000 1010),也即是IP地址为201.1.3.10
- 当H3访问S时,R2转发出去的,封装HTTP请求的IP分组是源IP地址和目的IP地址,分别是
转发表特殊路由
- 转发表中还可以增加两种特殊的路由:
默认路由
- 全0掩码
0.0.0.0/0
- 默认路由:用特殊前缀0.0.0.0/0表示默认路由,全0掩码和任何目的地址进行按位与运算,结果必然为全0,即必然和转发表中的0.0.0.0/0相匹配。
- 只要目的网络是其他网络(不在转发表中),就一律选择默认路由。
主机路由
- 前缀长度达到32位时,表示掩码没有意义(
a.b.c.d/32
)- 这个特殊位数可以用在路由转发表中,作为主机路由目的网络(a.b.c.d/32)
- 对特定目的主机的P地址专门指明一个路由,以方便网络管理员控制和测试网络。若特定主机的P地址是a.b.c.d,则转发表中对应项的目的网络是a.b.c.d/32.
路由器执行的分组转发算法
- 1)从收到的IP分组的首部提取目的主机的IP地址D(即目的地址)。
- 2)若查找到特定主机路由(目的地址为D),就按照这条路由的下一跳转发分组;
- 否则从转发表中的下一条(即按前缀长度的顺序)开始检查,执行步骤3).
- 3)将这一行的子网掩码与目的地址D进行按位与运算。若运算结果与本行的前缀匹配,则查找结束,按照“下一跳”指出的进行处理(或者直接交付本网络上的目的主机,或通过指定接口发送到下一跳路由器)。
- 否则,若转发表还有下一行,则对下一行进行检查,重新执行步骤3)。
- 否则,执行步骤4).
- 4)若转发表中有一个默认路由,则把分组传送给默认路由:否则,报告转发分组出错。
路径完整性问题
- 转发表(或路由表)并未给分组指明到某个网络的完整路径
- 即先经过哪个路由器,然再经过哪个路由器等
- 转发表指出,到某个网络应当先到某个路由器(即下一跳路由器),在到达下一跳路由器后,再继续查找其转发表,知道下一步应当到哪个路由器。
- 这样一步一步地查找下去,直到最后到达目的网络。
- 🎈也即是说,某个分组到达目的地前可能需要经过X个路由器,涉及了X次不同路由表的查询
- 得到下一跳路由器的P地址后,并不是直接将该地址填入待发送的数据报,
- 而是将该IP地址转换成MAC地址(通过ARP),
- 将此MAC地址放到MAC帧首部中,然后根据这个MAC地址找到下一跳路由器。
- 在不同网络中传送时,MAC帧中的源地址和目的地址要发生变化,
- 但是网桥在转发帧时,不改变帧的源地址
CIDR的优点
- 在于网络前缀长度的灵活性。
- 由于上层网络的前缀长度较短,因此相应的路由表的项目较少。
- 而内部又可采用延长网络前缀的方法来灵活地划分子网。
最长前缀匹配🎈
- 最长前缀匹配(最佳匹配):
- 使用CIDR时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。
- 在查找路由表时可能会得到不止一个匹配结果。
- 此时,应当从匹配结果中具有最长网络前缀的路由,因为网络前缀越长,其地址块就越小,因而路由就越具体。
- 可以按照前缀的长短降序排列(最长的排在前面),加快查找速度
CIDR查找路由表的方法
- 为了更加有效地查找最长前缀匹配,通常将无分类编址的路由表存放在一种层次式数据结构中,然后自上而下地按层次进行查找。
- 常用的数据结构就是二叉线索。
IP地址与硬件地址
-
P地址是网络层使用的地址,它是分层次等级的。
-
硬件地址是数据链路层使用的地址(MAC地址),它是平面式的。
-
在网络层及网络层之上使用P地址,P地址放在P数据报的首部,而MAC地址放在MAC帧的首部。
-
通过数据封装,把P数据报分组封装为MAC帧后,数据链路层看不见数据报分组中的P地址。
-
由于路由器的隔离,IP网络中无法通过广播MAC地址来完成跨网络的寻址,因此在网络层只使用IP地址来完成寻址。
- 寻址时,每个路由器依据其路由表(依靠路由协议生成)选择到目标网络(即主机号全为0的网络地址(网络代表者IP地址))需要转发到的下一跳(路由器的物理端口号或下一网络地址),
- 而IP分组通过多次路由转发到达目标网络后,改为在目标LAN中通过数据链路层的MAC地址以广播方式寻址。
-
Notes:
- 在IP层抽象的互联网上只能看到IP数据报。
- 虽然在IP数据报首部中有源IP地址,但路由器**只根据目的IP地址**进行转发。
- 在局域网的链路层,只能看见MAC帧。
- IP数据报被封装在MAC帧中,通过路由器转发IP分组时,IP分组在每个网络中都被路由器解封装和重新封装,其MAC帧首部中的源地址和目的地址会不断改变。
- 这也决定了无法使用MAC地址跨网络通信。
- 尽管互联在一起的网络的硬件地址体系各不相同,但IP层抽象的互联网却屏蔽了下层这些复杂的细节。
- 只要我们在网络层上讨论问题,就能够使用统一的;抽象的P地址研究主机与主机或路由器之间的通信。
- 在IP层抽象的互联网上只能看到IP数据报。
-
注意:路由器由于互联多个网络,因此它不仅有多个IP地址,也有多个硬件地址。
跨网络通信地址拆装变换问题
-
在网络的信息传递中,会经常用到两个地址:MAC地址和P地址。
-
其中,MAC地址会随着信息被发往不同的网络而改变,但I地址当且仅当信息在私人网络中传递时才会改变。
-
IP数据报的首部既有源IP地址,又有目的IP地址,但在通信中路由器只会根据目的P地址进行路由选择。
-
IP数据报在通信过程中,首部的源IP地址和目的IP地址在经过路由器时不会发生改变。
-
ARP广播只在子网中传播,由于相互通信的主机不在同一个子网内,因此不可以直接通过ARP广播得到目的站的硬件地址。
-
硬件地址只具有本地意义,因此每当路由器将IP数据报转发到一个具体的网络中时,都需要重新封装源硬件地址和目的硬件地址。
-
注意:路由器在接收到分组后,剥离该分组的数据链路层协议头,然后在分组被转发之前,给分组加上一个新的链路层协议头。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-12-08 git_拉取指定的远程分支/强行拉取远程分支覆盖当前本地/合并/冲突(git fetch/merge没看到效果?)
2021-12-08 mysql_基本使用(by official doc)/大小写规则/状态和数据查询
2021-12-08 js_遍历(不同的for) for & for of & for in & forEach 相关实例