一个小公式帮你轻松将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网段) 所以当自己的电脑拿到公司,还想使用桥 ...
随机推荐
- Spark Streaming应用启动过程分析
本文为SparkStreaming源码剖析的第三篇,主要分析SparkStreaming启动过程. 在调用StreamingContext.start方法后,进入JobScheduler.start方 ...
- ZooKeeper之(一)ZooKeeper是什么
1.1 产生背景 当今是个分布式.集群.云计算等名词满天飞的时代.造成这种局面的一个重要因素就是,单一机器的处理能力已经不能满足我们的需求,不得不采用由多台机器组成的服务集群.服务集群对外提供服务的过 ...
- SSL协议相关证书文件
密钥: 我理解是公钥+私钥的统称. 密钥对: 公钥(证书)和私钥成对存在.通信双方各持有自己的私钥和对方的公钥.自己的私钥需密切保护,而公钥是公开给对方的.在windows下,单独存在的公钥一般是后缀 ...
- SQL 数据库语言分析总结(二)
介绍sql语言 我们接着一的顺序继续介绍这个语言 数据类型 整形: TINYINT(8位) SMALLINT(16位) MEDIUMINT(24位) INT(32位) BIGINT(64位) 实数: ...
- [ExtJS5学习笔记]第十八节 Extjs5的panel的dockeditems属性配置toolbar
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39156321 官方例子:http://docs.sencha.com/extjs/5. ...
- parcel和parcelable
Parcel 在英文中有两个意思,其一是名词,为包裹,小包的意思: 其二为动词,意为打包,扎包.邮寄快递中的包裹也用的是这个词.Android采用这个词来表示封装消息数据.这个是通过IBinder通信 ...
- Android初级教程理论知识(第八章网络编程二)
HttpClient 发送get请求 创建一个客户端对象 HttpClient client = new DefaultHttpClient(); 创建一个get请求对象 HttpGet hg = n ...
- 【C++知识点】单例模式的简单实现
单例模式是最常见,也是使用最广泛的一种设计模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享. 单例模式的实现方法有很多种,本文只给出一个最简单的实现,如下: ...
- JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片
JAVA之旅(二十六)--装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片 一.装饰设计模式 其实我们自定义re ...
- 如何判断webview是不是滑到底部
getScrollY()方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离. getHeight()或者getBottom()方法都返回当前webview这个容器的高度 ge ...