一个小公式帮你轻松将IP地址从10进制转到2进制
网络工程师经常会遇到的一个职业问题:如何分配IP,通过子网如何捕捉某一网段或某台机器?他们甚至能够进行精准的分析和复杂的开发......凡此种种,其实与一些他们头脑中根深蒂固的常识性理论存有某种内在的本质关系。本文通过介绍一个IP地址10进制数转2进制的小公式,试图说明这样一个看似平淡无奇的小问题在地址分配和子网划分中却那么耐人寻味。本文着重介绍这个小公式。
我们知道,IP是由四段数字组成,有3类常用的IP是:
A类IP段 0.0.0.0 到127.255.255.255
B类IP段 128.0.0.0 到191.255.255.255
C类IP段 192.0.0.0 到223.255.255.255
XP默认分配的子网掩码每段只有255或0,此即意味着:
A类的默认子网掩码 255.0.0.0 一个子网最多可以容纳1677万多台电脑
B类的默认子网掩码 255.255.0.0一个子网最多可以容纳6万台电脑
C类的默认子网掩码 255.255.255.0 一个子网最多可以容纳254台电脑
也许有人会认为,属于同一网段的电脑,只要IP的前三段一样就可以了,这犯了一个想当然的错误。如果是这样,一个子网就只能容纳254台电脑?真是笑话。我们来说详细看看吧。其实,同一网段,指的是具有相同的网络标识,为此首先要做的是把每段的IP转换为二进制!
当把子网掩码切换至二进制,就会发现,所有的子网掩码是由一串连续的1和一串连续的0组成的(一共4段,每段8位,一共32位数)。比如,以下是A/B/C三类默认子网掩码的二进制形式:
255.0.0.0 11111111.00000000.00000000.00000000
255.255.0.011111111.11111111.00000000.00000000
255.255.255.0 11111111.11111111.11111111.00000000
其实,还有好多种子网掩码,只要是一串连续的1和一串连续的0就可以了(每段都是8位)。如11111111.11111111.11111000.00000000,这也是一段合法的子网掩码。子网掩码决定的是一个子网的计算机数目,计算机公式是2的m次方,其中,我们可以把m看到是后面的多少颗0。如255.255.255.0转换成二进制,那就是11111111.11111111.11111111.00000000,后面有8颗0,那m就是8,255.255.255.0这个子网掩码可以容纳2的8次方(台)电脑,也就是256台,但是有两个IP是不能用的,那就是最后一段不能为0和255,减去这两台,就是254台。
以下就来介绍这个将IP地址10进制数转2进制的小公式。
首先,我们列出一行表格,填写8个数字,看下表:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
2. 这行数字的特点是:从右端数从1开始,由右到左每个数是前一个数的2倍,共运算7次,相当于一个比率为2的等比数列,我们的问题是,对于这8个数,如何给出对应的一个2进制数? 我们在进行IP地址转换时次序正相反,是由左向右的;对于IP地址中的每个数值,将与一个特定的10进制数进行比较,如果大于或等于这个特定数,就在下行空格内设置为0,否则就设置为1。
3. 这里看一个具体的IP地址: 154.31.16.13 , 它的开始值为154;现问:它能够提取出128吗?回答YES,所以128对应的是1,如下表所示:
a.
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 1 |
b. 现在计算新的比较数,等于26(154-128=26),现问:它能够提取出64吗?回答NO,所以64对应的是0,如下表:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 1 | 0 |
c. 再问:从26可以提取32吗?回答NO,所以32对应的是0,如下表:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 1 | 0 | 0 |
d. 再问:从26可以提取16吗?回答YES,所以16对应的是1,如下表:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 1 | 0 | 0 | 1 |
h. 再生成一个新的比较数,是10 (26-16=10),问:从10可以提取8吗?回答YES,所以8对应的是1,如下表:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 1 | 0 | 0 | 1 | 1 |
i. 再生成一个新的比较数:2 (10-8=2),问:从2可以提取4吗?回答NO,所以4对应的是0,如下表:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 |
j. 再问:从2可以提取2吗?回答YES,所以2对应的是1,如下表:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 |
k. 再生成一个新的比较数,是0 (2-2=0),所以对于最后一个数1
所对应的只能是0,如下表:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
l. 这样,我们就得到154的2进制数为10011010 , 我们可以这样验算
一下:就是将所有分配为1的表格数进行相加:128+16+8+2=154
4. 再看例举的IP地址的第二个数是: 31,所以我们重复上述算法:
m. 现问:从31中能够提取出128吗?回答NO,所以有下表:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 |
n. 从31中能够提取出64吗?
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 | 0 |
o. 从31中能够提取出32吗?
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 | 0 | 0 |
p. 从31中能够提取出16吗?
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 | 0 | 0 | 1 |
q. 从15中能够提取出8吗?
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 | 0 | 0 | 1 | 1 |
r. 从7能够提取出4吗?
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 | 0 | 0 | 1 | 1 | 1 |
s. 从3能够提取出2吗?
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 | 0 | 0 | 1 | 1 | 1 | 1 |
t. 从1能够提取出1吗?
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
u. 所以,31转为2进制格式就是 00011111,验算一下就是:
16+8+4+2+1=31
5. 下一个数是16,采用同样的算法就得到:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 1 |
所以16的二进制格式为00010000。
6 下一个数13,得到的表格为:
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
所以13的二进制格式为00001101,验算算式为:8+4+1=13
这样我们就得到IP为154.31.16.13 的二进制格式:
10011010.00011111.00010000.00001101
我们可以换一个角度说明上述公式的实用性,例如·:一个公司有530台电脑,组成一个对等局域网,子网掩码设多少最合适?
530台电脑用B类IP最合适(A类不用说了,太多,C类又不够,肯定是B类),但是B类默认的子网掩码是255.255.0.0,可以容纳6万台电脑,显然不太合适,那子网掩码设多少合适呢?我们先来列个公式:
2的n次方=560
首先,我们确定2一定是大于8次方的,因为我们知道2的8次方是256,也就是C类IP的最大容纳电脑的数目,我们从9次方一个一个试2的9次方是512,不到560,2的10次方是1024,看来2的10次方最合适了。子网掩码一共由32位组成,已确定后面10位是0了,那前面的22位就是1,最合适的子网掩码就是:11111111.11111111.11111100.00000000,转换成10进制,那就是255.255.252.0。
一个小公式帮你轻松将IP地址从10进制转到2进制的更多相关文章
- 一个域名最多能对应几个IP地址?,一个IP地址可以绑定几个域名?
一个域名最多能对应几个IP地址?,一个IP地址可以绑定几个域名?谢谢 xikeboy | 浏览 31055 次 推荐于2016-04-24 14:21:14 最佳答案 1.也就是说通常情况下一个域名同 ...
- 云小课|带你揭开IP地址的神秘身份
摘要:本文带你了解网络云产品和相关的知识内容. 华为云网络服务大家族提供了丰富的云产品,可以满足用户的各种网络互联需求.相应地,华为云帮助中心也贴心的奉上了你想了解的所有网络云产品知识. 可是小课最近 ...
- 一个域名如何解析到多个ip地址
一.域名解析多ip实例 简单一句话: dns 解析时多添加几个不同IP的A记录 例如: 上图中我给域名解析到两个不同的ip,大概等十分钟后我们ping 一下的结果如下 可以看到已经实现了一个域名解析到 ...
- 【PHP开发篇】一个统计客户端商机提交的获取IP地址
1.对客服提交数据的ip地址记录. 获取ip地址的方法: public function getIP() { global $ip; if (getenv("HTTP_X_REAL_IP&q ...
- 一个小工具帮你搞定实时监控Nginx服务器
Linux运维工程师的首要职责就是保证业务7 x 24小时稳定的运行,监控Web服务器对于查看网站上发生的情况至关重要.关注最多的便是日志变动,查看实时日志文件变动大家第一反应应该是'tail -f ...
- docker 小技巧 列出所有容器的IP地址
命令如下: [root@localhost ~]# docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{ ...
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer Advanced Installer :Free for 30 da ...
- JavaScript和微信小程序获取IP地址的方法
最近公司新加了一个需求,根据用户登录的IP地址判断是否重复登录,重复登录就进行逼退,那么怎么获取到浏览器的IP地址呢?最后发现搜狐提供了一个JS接口,可以通过它获取到客户端的IP. 接口地址如下: h ...
- IP地址,子网掩码,默认网关,路由,形象生动阐述
自己的Linux虚拟机已经分配了固定的IP地址(使用无线路由,用的是192.168.1.XX网段),公司的无线网络分配的IP地址是(10.51.174.XX网段) 所以当自己的电脑拿到公司,还想使用桥 ...
随机推荐
- 【java集合系列】--- LinkedList
开篇前言--LinkedList中的基本用法 在前面的博文中,小编介绍List接口中的ArrayList集合,List这个接口,有两个实现类,一个就是ArrayList另一个是LinkedList(链 ...
- 使用Spring Boot开发Web项目
前面两篇博客中我们简单介绍了Spring Boot项目的创建.并且也带小伙伴们来DIY了一个Spring Boot自动配置功能,那么这些东西说到底最终还是要回归到Web上才能体现出它的更大的价值,so ...
- Java经典设计模式之五大创建型模式(附实例和详解)
一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥 ...
- Dubbo框架应用之(三)--Zookeeper注册中心、管理控制台的安装及讲解
我是在linux下使用dubbo-2.3.3以上版本的zookeeper注册中心客户端.Zookeeper是Apache Hadoop的子项目,强度相对较好,建议生产环境使用该注册中心.Dubbo未对 ...
- Servlet再度学习
虽然Servlet已经使用很多了,但是一直都仅局限在其使用操作上. 最近有空想对它进行一个相对全面的了解. 下面是博主整理的一篇博文. 一.Servlet简介 Servlet(Server Apple ...
- linux下内存的统计和内存泄露类问题的定位
在产品的开发中,通过对当前系统消耗内存总量的统计,可以对产品所需内存总量进行精确的评估,从而选择合适的内存芯片与大小,降低产品的成本.在遇到内存泄露类问题时,经常会对此束手无策,本文通过对proc下进 ...
- protobuf中的枚举缺省值应该为UNKNOWN
protobuf中的枚举缺省值应该为UNKNOWN(金庆的专栏)proto3中的枚举值为了与proto2兼容,要求缺省值固定为第1个,值为0.proto2中并没有规定对范围之外的枚举值的处理,而pro ...
- Android简易实战教程--第三十四话《 自定义SeekBar以及里面的一些小知识》
转载本专栏文章,请注明出处尊重原创:博客地址http://blog.csdn.net/qq_32059827/article/details/52849676:小杨的博客 许多应用可能需要加入进度,例 ...
- T-SQL动态查询(3)——静态SQL
接上文:T-SQL动态查询(2)--关键字查询 本文讲述关于静态SQL的一些知识和基础技巧. 简介: 什么是静态SQL?静态SQL是和动态SQL相对而言的,其实我们没必要过于纠结精确定义,只要大概 ...
- Dynamics CRM2016 业务流程之Task Flow(二)
接上篇,Page页设置完后,按照业务流程管理也可以继续设置Insert page after branch 或者 Add branch,我这里选择后者,并设置了条件,如果Pipeline Phase ...