网络工程师经常会遇到的一个职业问题:如何分配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进制的更多相关文章

  1. 一个域名最多能对应几个IP地址?,一个IP地址可以绑定几个域名?

    一个域名最多能对应几个IP地址?,一个IP地址可以绑定几个域名?谢谢 xikeboy | 浏览 31055 次 推荐于2016-04-24 14:21:14 最佳答案 1.也就是说通常情况下一个域名同 ...

  2. 云小课|带你揭开IP地址的神秘身份

    摘要:本文带你了解网络云产品和相关的知识内容. 华为云网络服务大家族提供了丰富的云产品,可以满足用户的各种网络互联需求.相应地,华为云帮助中心也贴心的奉上了你想了解的所有网络云产品知识. 可是小课最近 ...

  3. 一个域名如何解析到多个ip地址

    一.域名解析多ip实例 简单一句话: dns 解析时多添加几个不同IP的A记录 例如: 上图中我给域名解析到两个不同的ip,大概等十分钟后我们ping 一下的结果如下 可以看到已经实现了一个域名解析到 ...

  4. 【PHP开发篇】一个统计客户端商机提交的获取IP地址

    1.对客服提交数据的ip地址记录. 获取ip地址的方法: public function getIP() { global $ip; if (getenv("HTTP_X_REAL_IP&q ...

  5. 一个小工具帮你搞定实时监控Nginx服务器

    Linux运维工程师的首要职责就是保证业务7 x 24小时稳定的运行,监控Web服务器对于查看网站上发生的情况至关重要.关注最多的便是日志变动,查看实时日志文件变动大家第一反应应该是'tail -f ...

  6. docker 小技巧 列出所有容器的IP地址

    命令如下: [root@localhost ~]# docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{ ...

  7. 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 ...

  8. JavaScript和微信小程序获取IP地址的方法

    最近公司新加了一个需求,根据用户登录的IP地址判断是否重复登录,重复登录就进行逼退,那么怎么获取到浏览器的IP地址呢?最后发现搜狐提供了一个JS接口,可以通过它获取到客户端的IP. 接口地址如下: h ...

  9. IP地址,子网掩码,默认网关,路由,形象生动阐述

    自己的Linux虚拟机已经分配了固定的IP地址(使用无线路由,用的是192.168.1.XX网段),公司的无线网络分配的IP地址是(10.51.174.XX网段) 所以当自己的电脑拿到公司,还想使用桥 ...

随机推荐

  1. git 撤销没有提交的变化

    参考: https://stackoverflow.com/questions/5807137/how-to-revert-uncommitted-changes-including-files-an ...

  2. log4cxx用环境变量设置输出文件名

    log4cxx用环境变量设置输出文件名(金庆的专栏 2016.12)利用环境变量,可以用同一个log4j.xml来配置多个相似进程,输出日志到不同文件.例如多个BaseApp进程使用同一个BaseAp ...

  3. MySQL备忘录

    1 数据库概念(了解) 1.1 什么是数据库 数据库就是用来存储和管理数据的仓库! 数据库存储数据的优先: l 可存储大量数据: l 方便检索: l 保持数据的一致性.完整性: l 安全,可共享: l ...

  4. MongoDb 用 mapreduce 统计留存率

    MongoDb 用 mapreduce 统计留存率(金庆的专栏)留存的定义采用的是新增账号第X日:某日新增的账号中,在新增日后第X日有登录行为记为留存 输出如下:(类同友盟的留存率显示)留存用户注册时 ...

  5. Android开发之Path类使用详解,自绘各种各样的图形!

    玩过自定义View的小伙伴都知道,在View的绘制过程中,有一个类叫做Path,Path可以帮助我们实现很多自定义形状的View,特别是配合xfermode属性来使用的时候.OK,那我们今天就来看看P ...

  6. ubuntu cpu频率控制

    安装cpufrequtils:  sudo apt-get install cpufrequtils 查看cpu:                 sudo cpufreq-info 设置cpu模式: ...

  7. Hibernate之多对多表,操作实例

    多表操作之多对多关系简介 思路就是: 在数据库底层通过添加中间表来指定关联关系. 在双方的实体中添加一个保存对方的集合 在双方的配置文件中使用set标签和many-to-many标签来进行关联关系的配 ...

  8. Activity简单几步支持向右滑动返回

    向右滑动返回,对于屏幕过大的手机来说,在单手操作时,是一个不错的用户体验,用户不必再费力的或者用另一个手去点击屏幕左上角的返回按钮或者,手机右下角的返回按钮,轻轻向右滑动屏幕即可返回上一页,这个功能如 ...

  9. 【Unity Shaders】使用Unity Render Textures实现画面特效——建立画面特效脚本系统

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  10. android fragement报nullexcption错误

    ,这题目起的够骚情了,原创傲慢的上校哦,转载请标明:http://blog.csdn.net/aomandeshangxiao/article/details/7753421 其实有些方法也是从网上找 ...