网络工程师经常会遇到的一个职业问题:如何分配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. How To determine DDIC Check Table, Domain and Get Table Field Text Data For Value?

     How To determineDDIC Check Table, Domain and Get Table Field Text Data For Value? 1.Get Table Fie ...

  2. Git之(三)辅助命令

    熟悉了Git的基本操作之后,再来研究一下Git为我们提供的基础设施服务.正如一个程序员,只会写代码是远远不够的,还得知道怎么吃饭,怎么睡觉,怎么谈恋爱,怎么耍流氓--会了这些才能写出更好的代码,这就是 ...

  3. CocoaChina(总结)升级到xcode8遇到的问题及解决方案

    此总结由CocoaChina论坛版主wo709128079及广大坛友共同汇总.>>查看原帖 升级Xcode8已是必然,升级iOS 10的用户不能说大有人在,应该也不会少,楼主听说,如果不升 ...

  4. Apache shiro集群实现 (一) shiro入门介绍

    近期在ITOO项目中研究使用Apache shiro集群中要解决的两个问题,一个是Session的共享问题,一个是授权信息的cache共享问题,官网上给的例子是Ehcache的实现,在配置说明上不算很 ...

  5. actionbar完全解析(一)

    Action Bar是一种新増的导航栏功能,在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用户动作.界面导航等功能.使用ActionBar的好处是, ...

  6. java项目管理工具maven使用初级

    一.前言        早就知道maven 在java 项目的管理方面名声显赫,于是就想着学习掌握之,于是查阅了大量文档.发现这些文档的作者都是java 的大腕,大多都是站在掌握了一定maven 基础 ...

  7. Building System之 get_abs_build_var() && get_build_var()

    点击打开链接 1.get_abs_build_var() 和 get_build_var()的实现都在build/envsetup.sh中. 2.在buld目录下grep这两个函数可知:这两个函数只在 ...

  8. Socket实现单客户端与服务器对话功能

    单客户端,顾名思义,就是客户端只有一个用户去访问服务器,然后服务器根据该客户请求返回信息,先看下效果图: 服务端(左)和客户端(右): 注意,我是用了两个eclipse,一个只放服务端文件,一个只放客 ...

  9. TBschedule入门

    tbschedule 淘宝的wiki: http://code.taobao.org/p/tbschedule/wiki/index/ 截取内容如下: 此文档内部包括: 1.设计目标说明 2.主要概念 ...

  10. 【问题汇总】ScrollView嵌套ListView的问题

    因产品的需求,需要在ScrollView中嵌套ListView来达到效果.众所周知,ScrollVIew和ListView都是可滑动的容器,嵌套使用一定会出现一些问题. [html] view pla ...