Netmask, 子网与 CIDR (Classless Interdomain Routing)

我们前面谈到 IP 是有等级的,而设定在一般计算机系统上面的则是 Class A, B, C。现在我们来想一想,如果我们设定一个区网, 使用的是 Class A ,那么我们很容易就会想到,哪有这么多计算机可以设定在同一个 Class A 的区段内 (256x256x256-2=16777214) ? 而且,假设真有这么多计算机好了,回想一下 CSMA/CD 吧,你的网络恐怕会一直非常停顿,因为妳得要接到一千多万台计算机对你的广播... 光是想到一千多万台的广播,你的网络还能使用吗?真没效率!

此外,分为 Class 的 IP 等级,是为了管理方面的考虑,事实上,我们不可能将一个 Class A 仅划定为一个区网。举例来说, 我们昆山取得的 Public IP 是 120.xxx 开头的,但是其实我们只有 120.114.xxx.xxx 而已,并没有取得整个 Class A 喔! 因为我们学校也用不了这么多嘛!这个时候,我们就得要理解一下啰,就是,怎么将 Class A 的网段变小?换句话说, 我们如何将网域切的更细呢?这样不就可以分出更多段的区网给大家设定了?

前面我们提到 IP 这个 32 位的数值中分为网域号码与主机号码,其中 Class C 的网域号码占了 24 位,而其实我们还可以将这样的网域切的更细,就是让第一个 Host_ID 被拿来作为 Net_ID ,所以,整个 Net_ID 就有 25 bits ,至于 Host_ID 则减少为 7 bits
。在这样的情况下,原来的一个 Class C 的网域就可以被切分为两个子域,而每个子域就有『 256/2 - 2 = 126 』个可用的
IP 了!这样一来,就能够将原本的一个网域切为两个较细小的网域,方便分门别类的设计喔。


  • Netmask, 或称为 Subnet mask (子网掩码)

那到底是什么参数来达成子网的切分呢?那就是 Netmask (子网掩码) 的用途啦!这个 Netmask 是用来定义出网域的最重要的一个参数了!不过他也最难理解了~@_@。为了帮助大家比较容易记忆住 Netmask 的设定依据,底下我们介绍一个比较容易记忆的方法。同样以 192.168.0.0 ~ 192.168.0.255 这个网域为范例好了,如下所示,这个 IP 网段可以分为 Net_ID 与 Host_ID,既然 Net_ID 是不可变的,那就假设他所占据的 bits 已经被用光了 (全部为 1),而
Host_ID 是可变的,就将他想成是保留着 (全部为 0),所以, Netmask 的表示就成为:

  1. 192.168.0.0~192.168.0.255 这个 C Class Netmask 说明
  2. 第一个 IP 11000000.10101000.00000000.00000000
  3. 最后一个 11000000.10101000.00000000.11111111
  4. |----------Net_ID---------|-host--|
  5. Netmask 11111111.11111111.11111111.00000000 <== Netmask 二进制
  6. 255 . 255 . 255 . 0 <== Netmask 十进制
  7. 特别注意喔,netmask 也是 32 位,在数值上,位于 Net_ID 的为 1 Host_ID 0

将他转成十进制的话,就成为『255.255.255.0』啦! 这样记忆简单多了吧!照这样的记忆方法,那么 A, B, C Class 的 Netmask 表示就成为这样:

  1. Class A, B, C 三个等级的 Netmask 表示方式:
  2. Class A : 11111111.00000000.00000000.00000000 ==> 255. 0. 0. 0
  3. Class B : 11111111.11111111.00000000.00000000 ==> 255.255. 0. 0
  4. Class C : 11111111.11111111.11111111.00000000 ==> 255.255.255. 0

所以说, 192.168.0.0 ~ 192.168.0.255 这个 Class C 的网域中,他的 Netmask 就是 255.255.255.0 !再来,我们刚刚提到了当 Host_ID 全部为 0 以及全部为 1 的时后该 IP 是不可以使用的,因为 Host_ID 全部为 0 的时后,表示 IP 是该网段的
Network ,至于全部为 1 的时后就表示该网段最后一个 IP ,也称为 Broadcast ,所以说,在 192.168.0.0 ~ 192.168.0.255 这个 IP 网段里面的相关网络参数就有:

  1. Netmask: 255.255.255.0 <==网域定义中,最重要的参数
  2. Network: 192.168.0.0 <==第一个 IP
  3. Broadcast: 192.168.0.255 <==最后一个 IP
  4. 可用以设定成为主机的 IP 数:
  5. 192.168.0.1 ~ 192.168.0.254

  • 子网切分

好了,刚刚提到 Class C 还可以继续进行子域 (Subnet) 的切分啊,以 192.168.0.0 ~192.168.0.255 这个情况为例,他要如何再细分为两个子域呢?我们已经知道 Host_ID 可以拿来当作 Net_ID,那么 Net_ID 使用了 25 bits 时,就会如下所示:

  1. 原本的 C Class Net_ID Host_ID 的分别
  2. 11000000.10101000.00000000.00000000 Network: 192.168.0.0
  3. 11000000.10101000.00000000.11111111 Broadcast: 192.168.0.255
  4. |----------Net_ID---------|-host--|
  5.  
  6. 切成两个子网之后的 Net_ID Host_ID 为何?
  7. 11000000.10101000.00000000.0 0000000 多了一个 Net_ID 了, 0 (第一个子网)
  8. 11000000.10101000.00000000.1 0000000 多了一个 Net_ID 了, 1 (第二个子网)
  9. |----------Net_ID-----------|-host--|
  10.  
  11. 第一个子网
  12. Network: 11000000.10101000.00000000.0 0000000 192.168.0.0
  13. Broadcast: 11000000.10101000.00000000.0 1111111 192.168.0.127
  14. |----------Net_ID-----------|-host-|
  15. Netmask: 11111111.11111111.11111111.1 0000000 255.255.255.128
  16.  
  17. 第二个子网
  18. Network: 11000000.10101000.00000000.1 0000000 192.168.0.128
  19. Broadcast: 11000000.10101000.00000000.1 1111111 192.168.0.255
  20. |----------Net_ID-----------|-host-|
  21. Netmask: 11111111.11111111.11111111.1 0000000 255.255.255.128

所以说,当再细分下去时,就会得到两个子域,而两个子域还可以再细分下去喔 (Net_ID 用掉 26 bits ....)。呵呵!如果你真的能够理解 IP, Network, Broadcast, Netmask 的话,恭喜你,未来的服务器学习之路已经顺畅了一半啦! ^_^

例题:

试着计算出 172.16.0.0,但 Net_ID 占用 23 个位时,这个网域的 Netmask, Network, Broadcast 等参数

答:

由于 172.16.xxx.xxx 是在 Class B 的等级当中,亦即 Net_ID 是 16 位才对。不过题目给的 Net_ID 占用了 23 个位喔! 等于是向 Host_ID 借了 (23-16) 7 个位用在 Net_ID 当中。所以整个 IP 的地址会变成这样:

  1. 预设: 172 . 16 .0000000 0.00000000
  2. |----Net_ID--------------|--Host---|
  3. Network: 172 . 16 .0000000 0.00000000 172.16.0.0
  4. Broadcast: 172 . 16 .0000000 1.11111111 172.16.1.255
  5. Netmask: 11111111.11111111.1111111 0.00000000 255.255.254.0

鸟哥在这里有偷懒,因为这个 IP 段的前 16 个位不会被改变,所以并没有计算成二进制 (172.16), 真是不好意思啊~至于粗体部分则是代表 host_ID 啊!

其实子网的计算是有偷吃步的,我们知道 IP 是二进制,每个位就是 2 的次方。又由于 IP 数量都是平均分配到每个子网去, 所以,如果我们以 192.168.0.0 ~ 192.168.0.255 这个网段来说,要是给予 Net_ID 是 26 位时,总共分为几段呢? 因为 26-24=2 ,所以总共用掉两个位,因此有 2 的 2 次方,得到 4 个网段。再将 256 个 IP 平均分配到 4 个网段去, 那我们就可以知道这四个网段分别是:

  • 192.168.0.0~192.168.0.63
  • 192.168.0.64~192.168.0.127
  • 192.168.0.128~192.168.0.191
  • 192.168.0.192~192.168.0.255

有没有变简单的感觉啊?那你再想想,如果同样一个网段,那 Net_ID 变成 27 个位时,又该如何计算呢?自己算算看吧!


  • 无层级 IP: CIDR (Classless Interdomain Routing)

一般来说,如果我们知道了 Network 以及 Netmask 之后,就可以定义出该网域的所有 IP 了!因为由 Netmask 就可以推算出来 Broadcast 的 IP 啊!因此,我们常常会以 Network 以及 Netmask 来表示一个网域,例如这样的写法:

  1. Network/Netmask
  2. 192.168.0.0/255.255.255.0
  3. 192.168.0.0/24 <==因为 Net_ID 共有 24 bits

另外,既然 Netmask 里面的 Net_ID 都是 1 ,那么 Class C 共有 24 bits 的 Net_ID ,所以啦,就有类似上面 192.168.0.0/24 这样的写法啰!这就是一般网域的表示方法。 同理可证,在上述的偷吃步计算网域方法中,四个网段的写法就可以写成:

  • 192.168.0.0/26
  • 192.168.0.64/26
  • 192.168.0.128/26
  • 192.168.0.192/26

事实上,由于网络细分的情况太严重,为了担心路由信息过于庞大导致网络效能不佳,因此,某些特殊情况下, 我们反而是将 Net_ID 借用来作为 Host_ID 的情况!这样就能够将多个网域写成一个啦!举例来说,我们将 256 个 Class C 的私有 IP (192.168.0.0~192.168.255.255) 写成一个路由信息的话,那么这个网段的写法就会变成: 192.168.0.0/16,反而将
192 开头的 Class C 变成 class B 的样子了! 这种打破原本 IP 代表等级的方式 (透过 Netmask 的规范) 就被称为无等级网域间路由 (CIDR) 啰! (注14)

老实说,你无须理会啥是无等级网域间路由啦!只要知道,那个 Network/Netmask 的写法,通常就是 CIDR 的写法! 然后,你也要知道如何透过 Netmask 去计算出 Network, Broadcast 及可用的 IP 等,那你的 IP 概念就相当完整了!^_^

Netmask, 子网与 CIDR (Classless Interdomain Routing)的更多相关文章

  1. Classless Interdomain Routing (CIDR)

    IP Address Problems IP Address Exhaustion Class A, B, and C address structure inefficient Class B to ...

  2. 【T02】理解子网和CIDR的概念

    1.IP地址分为5类,A.B.C.D.E,它们的前缀分别是: A:0 网络个数2^7,主机个数2^24,大概1千6百万 B:10 网络个数2^14,大概1万6千,主机个数2^16,大概6万5千 C:1 ...

  3. IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式

    IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个 ...

  4. 【转】IP协议详解之子网寻址、子网掩码、构造超网

    子网寻址 1. 从两级IP地址到三级IP地址 <1>. IP地址利用率有时很低. <2>. 给每一个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏. <3> ...

  5. 无分类编址 CIDR (构成超网)

    划分子网在一定程度上缓解了因特网在发展中遇 到的困难.然而在 1992 年因特网仍然面临三个必 须尽早解决的问题,这就是: B 类地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全 ...

  6. C 类网络的子网快速划分

    CIDR ( Classless Inter-Domain Routing ,无类域间路由选择) 进行子网划分的方法有很多,最适合你的方式就是正确的方式.在 C 类地址中,只有 8 位用于定义主机.注 ...

  7. CIDR(无类域间路由)(转载)

    来源:百度百科 CIDR(无类型域间选路,Classless Inter-Domain Routing)是一个在Internet上创建附加地址的方法,这些地址提供给服务提供商(ISP),再由ISP分配 ...

  8. (转)IP协议详解之子网寻址、子网掩码、构造超网

    原文网址:http://www.cnblogs.com/way_testlife/archive/2010/10/05/1844399.html 子网寻址 1. 从两级IP地址到三级IP地址 < ...

  9. 什么是CIDR?

    英文缩写: CIDR (Classless InterDomain Routing) 中文译名: 无类别域间路由选择 IP地址有"类"的概念,/8掩码是A类,/16掩码是B类,/2 ...

随机推荐

  1. activiti实战系列 并行网关(parallelGateWay)

    流程图 13.2:部署流程定义+启动流程实例 13.3:查询我的个人任务 13.4:完成我的个人任务 说明: 1) 一个流程中流程实例只有1个,执行对象有多个 2)  并行网关的功能是基于进入和外出的 ...

  2. tomcat启动批处理——startup.bat

    从文件命名上看就知道这是一个启动批处理,这个批处理的主要功能就是为了找到另一个批处理catalina.bat,并且执行catalina.bat. 一开始就用if "%OS%" == ...

  3. The type org.apache.http.HttpResponse cannot be resolved. It is indirectly referenced from required

    在Android 6.0(API 23)中,Google已经移除了移除了Apache HttpClient相关的类.HttpResponse类.缺失jar包使用HttpResponse等会报错: Th ...

  4. 7.0、Android Studio命令行工具

    命令行工具分成SDK工具和平台工具. SDK工具 SDK工具跟随SDK安装包安装并随时更新. Virtual Device 工具 1. Android Virtual Device Manager 提 ...

  5. 根据iOS 10 的新特性,创建iMessage App,可用于自定义表情

    第一. 介绍(原文作者 澳大利亚19岁少年--Davis Allie ----原文地址) 随着iOS10的发布,苹果对开发者开放了Messages应用程序,开发人员现在可以创建他们自己的各种类型 并且 ...

  6. Android初级教程理论知识(第八章网络编程二)

    HttpClient 发送get请求 创建一个客户端对象 HttpClient client = new DefaultHttpClient(); 创建一个get请求对象 HttpGet hg = n ...

  7. UNIX网络编程——套接字选项(SO_REUSEADDR)

    1.一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用. SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的sock ...

  8. ffplay播放器移植VC的工程:ffplay for MFC

    本文介绍一个自己做的FFPLAY移植到VC下的开源工程:ffplayfor MFC.本工程将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下.并且使用MFC做了一套简单的 ...

  9. [C++学习历程]基础部分 C++中的函数学习

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/20305815 作者:sushengmiyan 一.静态变量: 局部变量是线程到达定义的 ...

  10. zookeeper学习总结

    最近一两天,一直在看zookeeper,自己也感觉头昏脑涨的. 现记录一下,最近的所得: 安装与配置: http://blog.csdn.net/morning99/article/details/4 ...