划分子网例题详解

划分子网例题详解(网络基础考试题目)

1
,假设取得网络地址200.200.200.0 ,子网掩码为255.255.255.0。现在一个子网有100台主机,另外4个子网有20台主机,请问如何划分子网,才能满足要求。请写出五个子网的子网掩码、网络地址、第一个主机地址、最后一个主机地址、广播地址。(子网号可以全0和全1请直接写出最后答案

 

还没做题之前先要明确IP地址的命名方式、划分子网的实质、以及子网掩码的作用。

                IP地址的格式是(32bit =  net-id   + host-id

当外界要和我的电脑通信时,他首先找到和我的net-id一样的路由器,然后通过路由器再找到我的host-id

IP地址一般分为三类:A类: IP(32bit) = net-id(8bit)  +  host-id(24bit)

                           通式是:IP= X. 0 . 0 . 0      后面的0是主机号

                     B类:IP(32bit)= net-id(16bit)  +  host-id(16bit)

                           通式:IP= X. X. 0 .0        后面的0是主机号

                     C类:IP(32bit)= net-id(24bit)  +  host-id(8bit)

                           通式:IP= X. X. X .0        后面的0是主机号

 

明白了IP地址的格式,接下来我们就可以了解子网划分的实质了。

子网划分是为了解决网络IP不够用的情况,它的实质其实就是,在A,B,或者C类中把原先分配给它的主机号位数拿出若干个位来作网络号.这样就可以缓解网络IP不够用的情况了.

比如我们拿一个BIP来划分:X.X.0.0    里面host-id位数有16位,这时可以根据具体需要(具体需要几位后面会讲)拿出若干位来作net-id,剩下的作host-id.  (这时你可能会问,把 主机号位数拿去分了,那可以连的主机数不是少了?确实是这样,划分子网就是以牺牲主机数来增加网络数。事实也如此,很多企业单位本来没有那么多主机,但他就是要了个大的网络IDIP地址不够用也是这种原因引起的)

好了,知道划分子网的实质就是把host-id分出若干位数来作net-id,这时外界是怎样和划分好了的子网内的主机联系的呢?

在没有子网掩码的情况下,外界要和子网内的主机联系必须通过先前没划分的总的网络路由器,然后由路由器查找网内的各主机,这样效率就很低下。可不可以让各个子网独自通过自己的路由和外界通信呢?掩码正是为了解决这个问题。

各个子网要和外界独自通信,必须让外界知道你是划分了的子网,你的具体网络ID。但路由表并没有划分子网的具体信息,所以外界也无法通过你的路由器和你联系。掩码就是在你划分了的子网IP地址中,net-id相对应的地方标上1, host-id相对应的地方标上0.再在路由表中添加掩码这一项,这样外界就很容易知道你的具体网络ID了。这就是掩码的作用。

 

 

接下来我们来看例题。200.200.200.0是一个C类地址。要求划分一个子网100主机,另外四个子网20主机,我们可以先把该网络划分成两个子网。一个给100主机的子网,一个给另外20主机的四子网。

C类地址有8bit的主机号,划分子网就是把主机号拿出若干位来作网络ID

具体要拿出多少位这里有一个公式:子网内主机数=2x次方-2x是主机号的位数)

现在主机数是100,我们取2x次方-2略大于100。即x=7

也就是说主机号位数是7位,这个子网才能够连100台主机。本来有8位的,剩下的一位拿去当网络号。(也实在是巧,这一位刚好可以标识两个子网(0或者1)下面的红色部分!)

NET ID  200.200.200.00000000

NETMASK 255.255.255.00000000

子网1:

NET ID  200.200.200.00000000               

NETMASK 255.255.255.10000000  (掩码就是用1标识网络ID,看蓝色部分)

子网2:

NET ID  200.200.200.10000000               

NETMASK 255.255.255.10000000

 

接下来划分四个子网,用上面任何一个子网划分都行。这里用子网2吧。

由上面的公式,子网内主机数=2x次方-2

2x次方-2略大于20,也即x=5.

也就是主机号位数是5位,刚才是7位,剩下2位作网络ID,

子网2.1:

NET ID  200.200.200.10000000               

NETMASK 255.255.255.11100000

子网2.2:

NET ID  200.200.200.10100000               

NETMASK 255.255.255.11100000

子网2.3:

NET ID  200.200.200.11000000               

NETMASK 255.255.255.11100000

子网2.4:

NET ID  200.200.200.11100000               

NETMASK 255.255.255.11100000

这样,子网划分就完成了。

接下来写出五个子网的子网掩码、网络地址、第一个主机地址、最后一个主机地址、广播地址就比较简单了。

记住这一条:

主机号全0是网络地址,网络地址+1是第1个主机地址,主机号全1是广播地址.广播地址-1是最后的主机地址.

子网一主机号全是0的:NET ID  200.200.200.00000000   后面八个0是二进制,换成十进制就是它的网络地址了,然后+1是主机地址;广播地址要注意,那个红色0已是网络ID,主机号是后面七个0,把70全置为1就是他的广播地址。

接下来以此类推。

子网掩码

网络地址

第一个主机地址

最后的主机地址

广播地址

255.255.255.128

200.200.200.0

200.200.200.1

200.200.200.126

200.200.200.127

255.255.255.224

200.200.200.128

200.200.200.129

200.200.200.158

200.200.200.159

255.255.255.224

200.200.200.160

200.200.200.161

200.200.200.190

200.200.200.191

255.255.255.224

200.200.200.192

200.200.200.193

200.200.200.222

200.200.200.223

255.255.255.224

200.200.200.224

200.200.200.225

200.200.200.254

200.200.200.255

 

 

  • 40
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
分   Internet组织机构定义了五种IP地址,用于主机的有A、B、C三类地址。其中A类络有126个,每个A类络可能有16,777,214台主机,它们处于同一广播域。而在同一广播域中有这么多结点是不可能的,络会因为广播通信而饱和,结果造成16,777,214个地址大部分没有分配出去,形成了浪费。而另一方面,随着互连应用的不断扩大,IP地址资源越来越少。为了实现更小的广播域并更好地利用主机地址中的每一位,可以把基于类的IP络进一步分成更小的络,每个子由路由器界定并分配一个新的子络地址,子地址是借用基于类的络地址的主机部分创建的。分子后,通过使用掩码,把子隐藏起来,使得从外部看络没有变化,这就是子掩码。   1. 子掩码   RFC 950定义了子掩码的使用,子掩码是一个32位的2进制数,其对应络地址的所有位都置为1,对应于主机地址的所有位都置为0。由此可知,A类络的缺省的子掩码是255.0.0.0,B类络的缺省的子掩码是255.255.0.0,C类络的缺省的子掩码是255.255.255.0。将子掩码和IP地址按位进行逻辑“与”运算,得到IP地址的络地址,剩下的部分就是主机地址,从而区分出任意IP地址中的络地址和主机地址。子掩码常用点分十进制表示,我们还可以用络前缀法表示子掩码,即“/”。如138.96.0.0/16表示B类络138.96.0.0的子掩码为255.255.0.0。   子掩码告知路由器,地址的哪一部分是络地址,哪一部分是主机地址,使路由器正确判断任意IP地址是否是本段的,从而正确地进行路由。例如,有两台主机,主机一的IP地址为222.21.160.6,子掩码为255.255.255.192,主机二的IP地址为222.21.160.73,子掩码为255.255.255.192。现在主机一要给主机二发送数据,先要判断两个主机是否在同一段。   主机一   222.21.160.6即:11011110.00010101.10100000.00000110   255.255.255.192即:11111111.11111111.11111111.11000000   按位逻辑与运算结果为: 11011110.00010101.10100000.00000000   主机二   222.21.160.73 即:11011110.00010101.10100000.01001001   255.255.255.192即:11111111.11111111.11111111.11000000   按位逻辑与运算结果为:11011110.00010101.10100000.01000000   两个结果不同,也就是说,两台主机不在同一络,数据需先发送给默认关,然后再发送给主机二所在络。那么,假如主机二的子掩码误设为255.255.255.128,会发生什么情况呢?   让我们将主机二的IP地址与错误的子掩码相“与”:   222.21.160.73 即:11011110.00010101.10100000.01001001   255.255.255.128即:11111111.11111111.11111111.10000000   结果为 11011110.00010101.10100000.00000000   这个结果与主机的络地址相同,主机与主机二将被认为处于同一络中,数据不再发送给默认关,而是直接在本内传送。由于两台主机实际并不在同一络中,数据包将在本子内循环,直到超时并抛弃。数据不能正确到达目的机,导致络传输错误。   反过来,如果两台主机的子掩码原来都是255.255.255.128,误将主机二的设为255.255.255.192,主机一向主机二发送数据时,由于IP地址与错误的子掩码相与,误认两台主机处于不同络,则会将本来属于同一子内的机器之间的通信当作是跨传输,数据包都交给缺省关处理,这样势必增加缺省关的负担,造成络效率下降。所以,子掩码不能任意设置,子掩码的设置关系到子分。   2. 子分与掩码的设置   子分是通过借用IP地址的若干位主机位来充当子地址从而将原分为若干子而实现的。分子时,随着子地址借用主机位数的增多,子的数目随之增加,而每个子中的可用主机数逐渐减少。以C类络为例,原有8位主机位,2的8次方即256个主机地址,默认子掩码255.255.255.0。借用1位主机位,产生2个子,每个子有126个主机地址;借用2位主机位,产生4个子,每个子有62个主机地址……每个中,第一个IP地址(即主机部分全部为0的IP)和最后一个IP(即主机部分全部为1的IP)不能分配给主机使用,所以每个子的可用IP地址数为总IP地址数量减2;根据子ID借用的主机位数,我们可以计算出分的子数、掩码、每个子主机数,列表如下:   ① 分子数   ② 子位数   ③ 子掩码(二进制)   ④ 子掩码(十进制)   ⑤ 每个子主机数   ① 1~2   ② 1   ③ 11111111.11111111.11111111.10000000   ④ 255.255.255.128   ⑤ 126   ① 3~4   ② 2   ③ 11111111.11111111.11111111.11000000   ④ 255.255.255.192   ⑤ 62   ① 5~8   ② 3   ③ 11111111.11111111.11111111.11100000   ④ 255.255.255.224   ⑤ 30   ① 9~16   ② 4   ③ 11111111.11111111.11111111.11110000   ④ 255.255.255.240   ⑤ 14   ① 17~32   ② 5   ③ 11111111.11111111.11111111.11111000   ④ 255.255.255.248   ⑤ 6   ① 33~64   ② 6   ③ 11111111.11111111.11111111.11111100   ④ 255.255.255.252   ⑤ 2   如上表所示的C类络中,若子占用7位主机位时,主机位只剩一位,无论设为0还是1,都意味着主机位是全0或全1。由于主机位全0表示本络,全1留作广播地址,这时子实际没有可用主机地址,所以主机位至少应保留2位。   从上表可总结出子分的步骤或者说子掩码的计算步骤:   2.1 确定要分的子数目以及每个子的主机数目。   2.2 求出子数目对应二进制数的位数N及主机数目对应二进制数的位数M。   2.3 对该IP地址的原子掩码,将其主机地址部分的前N位置 1或后M位置0 即得出该IP地址分子后的子掩码。   例如,对B类络135.41.0.0/16需要分为20个能容纳200台主机的络。因为16<20<32,即:2的4次方<20<2的5次方,所以,子位只须占用5位主机位就可分成32个子,可以满足分成20个子的要求。B类络的默认子掩码是255.255.0.0,转换为二进制为11111111.11111111.00000000.00000000。现在子又占用了5位主机位,根据子掩码的定义,分子后的子掩码应该为11111111.11111111.11111000.00000000,转换为十进制应该为255.255.248.0。现在我们再来看一看每个子的主机数。子中可用主机位还有11位,2的11次方=2048,去掉主机位全0和全1的情况,还有2046个主机ID可以分配,而子能容纳200台主机就能满足需求,按照上述方式分子,每个子能容纳的主机数目远大于需求的主机数目,造成了IP地址资源的浪费。为了更有效地利用资源,我们也可以根据子所需主机数来分子。还以上例来说,128<200<256,即2^7<200<2^8,也就是说,在B类络的16位主机位中,保留8位主机位,其它的16-8=8位当成子位,可以将B类络138. 96.0.0分成256(2^8)个能容纳256-1-1-1=253台(去掉全0全1情况和留给路由器的地址)主机的子。此时的子掩码为11111111.11111111.11111111.00000000,转换为十进制为255.255.255.0。   在上例中,我们分别根据子数和主机数分了子,得到了两种不同的结果,都能满足要求,实际上,子占用5~8位主机位时所得到的子都能满足上述要求,那么,在实际工作中,应按照什么原则来决定占用几位主机位呢?   在分子时,不仅要考虑目前需要,还应了解将来需要多少子和主机。对子掩码使用比需要更多的主机位,可以得到更多的子,节约了IP地址资源,若将来需要更多子时,不用再重新分配IP地址,但每个子的主机数量有限;反之,子掩码使用较少的主机位,每个子的主机数量允许有更大的增长,但可用子数量有限。一般来说,一个络中的节点数太多,络会因为广播通信而饱和,所以,络中的主机数量的增长是有限的,也就是说,在条件允许的情况下,会将更多的主机位用于子位。   综上所述,子掩码的设置关系到子分。子掩码设置的不同,所得到的子不同,每个子能容纳的主机数目不同。若设置错误,可能导致数据传输错误。   补充:   子分(subnetting)的优点:   1.减少络流量   2.提高络性能   3.简化管理   4.易于扩大地理范围   How to Creat Subnets   如何分子?首先要熟记2的幂:2的0次方到9次方的值分别为:1,2,4,8,16,32,64,128,256和512.还有要明白的是:子分是借助于取走主机位,把这个取走的部分作为子位.因此这个意味分越多的子,主机将越少   Subnet Masks   子掩码用于辨别IP地址中哪部分为络地址,哪部分为主机地址,有1和0组成,长32位,全为1的位代表络号.不是所有的络都需要子,因此就引入1个概念:默认子掩码(default subnet mask).A类IP地址的默认子掩码为255.0.0.0;B类的为255.255.0.0;C类的为255.255.255.0   Classless Inter-Domain Routing(CIDR)   CIDR叫做无类域间路由,ISP常用这样的方法给客户分配地址,ISP提供给客户1个块(block size),类似这样:192.168.10.32/28,这排数字告诉你你的子掩码是多少,/28代表多少位为1,最大/32.但是你必须知道的1点是:不管是A类还是B类还是其他类地址,最大可用的只能为30/,即保留2位给主机位   CIDR值:   1.掩码255.0.0.0:/8(A类地址默认掩码)   2.掩码255.128.0.0:/9   3.掩码255.192.0.0:/10   4.掩码255.224.0.0:/11   5.掩码255.240.0.0:/12   6.掩码255.248.0.0:/13   7.掩码255.252.0.0:/14   8.掩码255.254.0.0:/15   9.掩码255.255.0.0:/16(B类地址默认掩码)   10.掩码255.255.128.0:/17   11.掩码255.255.192.0:/18   12.掩码255.255.224.0:/19   13.掩码255.255.240.0:/20   14.掩码255.255.248.0:/21   15.掩码255.255.252.0:/22   16.掩码255.255.254.0:/23   17.掩码255.255.255.0:/24(C类地址默认掩码)   18.掩码255.255.255.128:/25   19.掩码255.255.255.192:/26   20.掩码255.255.255.224:/27   21.掩码255.255.255.240:/28   22.掩码255.255.255.248:/29   23.掩码255.255.255.252:/30   Subnetting Class A,B&C Address   分子的几个捷径:   1.你所选择的子掩码将会产生多少个子?:2的x次方-2(x代表掩码位,即2进制为1的部分,现在的络中,已经不需要-2,已经可以全部使用,不过需要加上相应的配置命令,例如CISCO路由器需要加上ip subnet zero命令就可以全部使用了。)   2.每个子能有多少主机?: 2的y次方-2(y代表主机位,即2进制为0的部分)   3.有效子是?:有效子号=256-10进制的子掩码(结果叫做block size或base number)   4.每个子的广播地址是?:广播地址=下个子号-1   5.每个子的有效主机分别是?:忽略子内全为0和全为1的地址剩下的就是有效主机地址.最后有效1个主机地址=下个子号-2(即广播地址-1)   根据上述捷径分子的具体实例:   C类地址例子:络地址192.168.10.0;子掩码255.255.255.192(/26)   1.子数=2*2-2=2   2.主机数=2的6次方-2=62   3.有效子?:block size=256-192=64;所以第一个子为192.168.10.64,第二个为192.168.10.128   4.广播地址:下个子-1.所以2个子的广播地址分别是192.168.10.127和192.168.10.191   5.有效主机范围是:第一个子的主机地址是192.168.10.65到192.168.10.126;第二个是192.168.10.129到192.168.10.190   B类地址例子1:络地址:172.16.0.0;子掩码255.255.192.0(/18)   1.子数=2*2-2=2   2.主机数=2的14次方-2=16382   3.有效子?:block size=256-192=64;所以第一个子为172.16.64.0,最后1个为172.16.128.0   4.广播地址:下个子-1.所以2个子的广播地址分别是172.16.127.255和172.16.191.255   5.有效主机范围是:第一个子的主机地址是172.16.64.1到172.16.127.254;第二个是172.16.128.1到172.16.191.254   B类地址例子2:络地址:172.16.0.0;子掩码255.255.255.224(/27)   1.子数=2的11次方-2=2046(因为B类地址默认掩码是255.255.0.0,所以络位为8+3=11)   2.主机数=2的5次方-2=30   3.有效子?:block size=256-224=32;所以第一个子为172.16.0.32, 最后1个为172.16.255.192   4.广播地址:下个子-1.所以第一个子和最后1个子的广播地址分别是172.16.0.63和172.16.255.223   5.有效主机范围是:第一个子的主机地址是172.16.0.33到172.16.0.62;最后1个是172.16.255.193到172.16.255.222   Variable Length Subnet Masks(VLSM)   可变长子掩码(VLSM)的作用:节约IP地址空间;减少路由表大小.使用VLSM时,所采用的路由协议必须能够支持它,这些路由协议包括RIPv2,OSPF,EIGRP和BGP. 关于更多的VLSM知识,可以去Google.com进行搜索
巡回置换问题是指在一个完全图中,每个顶点之间都有一条边,求一条经过每个顶点一次且仅一次的回路,使得回路的总长度最小。这个问题是一个NP难问题,因此通常使用启发式算法来解决。其中一种启发式算法是遗传算法。 遗传算法是一种模拟自然进化过程的优化算法。在巡回置换问题中,可以将每个可能的回路看作一个个体,通过交叉、变异等操作来产生新的个体,并通过适应度函数来评估每个个体的优劣程度。经过多代进化,最终得到一个较优的回路。 以下是巡回置换问题的遗传算法的Python实现: ```python import random # 生成初始种群 def generate_population(city_num, pop_size): population = [] for i in range(pop_size): chromosome = list(range(city_num)) random.shuffle(chromosome) population.append(chromosome) return population # 计算路径长度 def get_distance(city1, city2): return ((city1[0] - city2[0]) ** 2 + (city1[1] - city2[1]) ** 2) ** 0.5 def get_path_length(path, cities): length = 0 for i in range(len(path) - 1): length += get_distance(cities[path[i]], cities[path[i+1]]) length += get_distance(cities[path[-1]], cities[path[0]]) return length # 选择操作 def selection(population, cities): fitness_list = [1 / get_path_length(chromosome, cities) for chromosome in population] total_fitness = sum(fitness_list) probability_list = [fitness / total_fitness for fitness in fitness_list] selected_population = [] for i in range(len(population)): selected_population.append(random.choices(population, probability_list)[0]) return selected_population # 交叉操作 def crossover(parent1, parent2): child = [-1] * len(parent1) start = random.randint(0, len(parent1) - 1) end = random.randint(0, len(parent1) - 1) if start > end: start, end = end, start for i in range(start, end+1): child[i] = parent1[i] j = 0 for i in range(len(parent2)): if child[j] == -1: if parent2[i] not in child: child[j] = parent2[i] j += 1 else: j += 1 return child # 变异操作 def mutation(chromosome): index1 = random.randint(0, len(chromosome) - 1) index2 = random.randint(0, len(chromosome) - 1) chromosome[index1], chromosome[index2] = chromosome[index2], chromosome[index1] return chromosome # 遗传算法主函数 def genetic_algorithm(city_list, pop_size, generation_num, crossover_rate, mutation_rate): population = generate_population(len(city_list), pop_size) for i in range(generation_num): population = selection(population, city_list) new_population = [] for j in range(pop_size): parent1 = random.choice(population) if random.random() < crossover_rate: parent2 = random.choice(population) child = crossover(parent1, parent2) else: child = parent1 if random.random() < mutation_rate: child = mutation(child) new_population.append(child) population = new_population best_path = min(population, key=lambda x: get_path_length(x, city_list)) best_length = get_path_length(best_path, city_list) return best_path, best_length # 测试 if __name__ == '__main__': city_list = [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)] best_path, best_length = genetic_algorithm(city_list, 100, 1000, 0.8, 0.1) print('最优路径:', best_path) print('最短路径长度:', best_length) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值