2023年11月27日发(作者:)
IP地址、子网掩码、ADN、NOT等
的运算、关系
IP地址、子网掩码、ADN、NOT等的运算、关系2010-08-22 12:56二进制
IP子网掩码AND运算等等2006-07-29 00:29我认为IP地址,不止是考试的
重点,也是我们学习的重点,工作的重点。
我下面转贴一个网友的文章,我觉得写的不错,大家可以看看,然后再做
下面的题目:
为什么我们要学二进位哎呀还不是该死的蠢电脑嘛它只懂得0和1那么我
们要和电脑沟通的时候也只好装蠢一些才行。当电脑要处理IP运算的时候最终
是以二进位的形式进行的。
我们人类最习惯的运算规则是十进位也就是从0到9为一圈回到零的时候
就进一位数而我们前面讨论的bit和byte则是八进位即0到7为一圈回到零就
进一位数另外还有十六进位由0到15为一圈回到零进一位但使用数字15很容
易和十进位混乱所以在十六进位里面从10到15之间分别用英文字母A到F代
替了所以我们通常看到的十六进位是从0到F的排列。
好了认识了上面这几种运算规则相信理解二进位也不难道理是一样的从0
到1为一圈回到0进一。那么我们看看十七个连续递增的十进位二进位和十六
进位数字之间的比较将会是这样的
十进位二进位十六进位
0 00 11 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10
如果您想进行二进位和十进位的换算在列表中找到相应的数字是最简单的
方法但正如您刚才所见光十六个数字已经有这么长的列表了如果要找成千上百
个数字可不是件容易的事情。不过我们在IP地址上面看到的十进位数字最大不
会超过255这个数值。我们可以先将2的0到7次方列出来
27 26 25 24 23 22 21 20 128 64 32 16 84 21
当我们要将十进位换成二进位的时候我们只要找到找到该数字对应的栏位
(方法是找到两个数值相若的栏位而取其右)在相对的栏位填上1然后用余数继
续寻找下一栏位再填1直到再没余数为止最后把其它栏位都填上0就可以了。
例如我们要换算220这个十进位数字到二进位
我们找到128这栏位是最合适的(因为128的左边是256而220界乎它们之
间取其右则为128)。那么我们在128这栏位上面填上1
继续余数92我们找到64这栏位是最合适的那么在64这个栏位也填上1
继续余数28我们找到16这栏位是最合适的那么在16这个栏位也填上1
继续余数12我们找到8这栏位是最合适的那么在8这个栏位也填上1
继续余数4我们找到4这栏位刚好对应这是最好找到情形了。那么在4这
个栏位也填上1
因为再没有余数了其它都填上0就对了。
其结果如下128 64 32 16 84 21 11 01 11 00
如果我们要将二进位换算成十进位利用上面的栏目来做就更加简单了只要
将二进位数字从右往左的顺序依次填入栏位那么将凡是被1所对应的数字相加
得出来的和就是十进位数字了。
当然啦这是手工的方法啦如果您有二进位的计数器或是使用Windows的小
算盘来进行换算更是易如反掌啦。如果您还不知道怎么用Windows的小算盘点
话可以依以下步骤进行
"开始/程式集/附属应用程式/小算盘"
然后拉下"检视"选单确定"工程型"已被选择
然后点选"十进位"输入数值
再点选"二进位"就可以获得换算数值了
逻辑运算
逻辑运算是Microcomputer Architature的必修单元这里我们只需了解几
个最基本的运算就可以了一个是AND一个是OR还有一个是NOT。
在二进位的AND的运算中只有参与运算的双方都相同才会得出相同的结果
(为0或1)否则为0也就是只有双为1的时候其结果才会是1否则为0。其情形
是
0 AND 0=0 1AND 1=1 0AND 1=0
这里您不难看出凡是有1参与的AND运算其结果都会是对方(不管是0或1)
而凡是有0参与的AND运算其结果都会是0。
在二进位的OR运算中只有双方为0的时候才为0否则都会是1。其情形是
0 OR 0=0 1OR 1=1 0OR 1=1
记忆方法凡是有0参与的OR运算其结果都是对方而只要有1参与的OR运
算其结果都会是1。
NOT的运算最简单只有一方参与凡是经过NOT运算其结果都会相反
NOT 0=1 NOT 1=0
至于其它一些NAND或NOR的运算只不过将NOT和AND及NOT和OR合在一
起运算而已。
认识IP地址
好了经过刚才一轮"洗脑"之后我们终于要谈到IP地址了。如果您的机器现
在是连上网路的且使用的是IP协定(我想您应该这样吧否则怎么看我的文章呢)。
我假设您使用的是Windows系统那么现在就请您按"开始"然后"执行"再请
您用键盘输入"winipcfg"然后"确定"。这时候您应该看到一个视窗跑出来并在
"IP位址"栏目上面显示着您机器当前使用的IP号码。或许会是
139.175.152.254这样的一组号码不过您知道这组号码的代表着什么意思吗如
果按正常设定来说我可以说这是B class的IP号码而且是属于的拨
接网路的。
我怎么会知道哈哈等您看完了后面的文章您还可以告诉我更多呢
IP Class和识别码
正如您所见到的IP地址是四组用"."分开的十进位数字我们称每组数字为
一个"octet"这样的格式被称作"Dotted quad"。其实每一组都是一个8-bit的
二进位数字(使用十进完全是为了迁就人类的习惯)合共起来就是一个32-bit的
IP地址了亦即是IP v4(Version 4)版本的地址现在IP v6(使用128-bit的IP
地址)也正如火如的开发中。
如果您记得我们前面在"网路概论"里面讨论IPX地址的时候所提到的
Internal和External地址的话您应该知道Internal地址是用来识别主机的而
External地址则是用来识别网路的。IP地址其实也有这样的功能只不过将网路
的识别码和主机的识别码放在单一的IP地址上面了。
不过在区分Net ID和Host ID之前先让我们认识一下IP地址的分类
(Class):
如果我们将IP地址全部用二进位来表示的话每个octet都是8-bit如果不
够8-bit的话则往左边填上0直到补满为止。这时候你再看看最左边的数字是
以什么为开头的
如果是以"0"开头的这IP是一个A Class的IP
如果是以"10"开头的这是一个B Class的IP
如果是以"110"为开头的则属于C Class的IP
相信您知道为什么我们在一开头就学二进位换算了吧如果您不懂得如何换
算您也可以死记由1到126开头的IP是A Class由128到191开头的IP是B
Class然后由192到223开头的则为C Class。显然易见用二进位来识别IP
Class比较容易您不觉得吗
好了当我们识得区别IP的Class之后我们就可以知道IP的Net ID和
Host ID了
A Class的IP使用最前面一组数字来做Net ID其余三组做Host ID
BClass的IP使用前面两组数字来做Net ID另两组做Host ID CClass的IP使
用前面三组数字来做Net ID剩下的一组做Host ID
从下图中您可以轻易的区分上面三个不同的IP Class
为什么我们需要为IP划分等级呢这是为了当初的IP管理需要。
如果您要组建一个单一的IP网路那么您得分配相同的Net ID给所有主机
而各主机的Host ID却必须是唯一的也就是说没有任何两个Host ID会是一样
的。您的网路还要连上internet或其它网路的话那么您使用的Net ID也必须
是唯一的否则就会造成突了。好比您家的电话号码如果是1234567(Host ID)的
话那么在相同区号(Net ID)里其他人将不会再使用这个号码然而你不保在其它
区号里面也有1234567这个号码哦但如果台北使用了区号02的话台南就不能使
用02了。无论如何整个区号加电话号码必须是唯一的。同样的道理整个IP地
址(Net ID+Host ID)在internet上也必须是唯一的。有一个很特别的Net ID
127(即二进位的01111111)是保留给本机回路测试使用的它不可以被运用于实
际的网路中去。
另外有一个规则我们还必须遵守的在指定Host ID的时候换成二进位的话
不可以是全部为0也不可以是全部为1。当Host ID全部为0的时候指的是网
路本身识别码而全部为1的时候则为全域广播地址即发送广播封包使用的地址。
很明显A Class网路可分配的Host ID要比C Class的要多好多倍。让我
们算算可以划分的Net ID数目和各等级里面的Host ID数目就知道了
因为A Class第一个bit必须为0所以我们在头一个otect的8个bit就
只有7个bit是可变化的。那么27=128再减去0和127这个Net ID不能使用
那么我们实际上最多只能划分126个A Class的网路。而每个A Class的网路
之下可以分配2的24(能够使用的Host ID之bit数目)次方亦即16,777,216
个Host ID再因为二进位数字不可以全部为0或1所以实际能用的主机位址只
有16,777,214个。
因为C Class以110开头减去3个bit所以可划分的C Class网路则为2
的21(24-3)次方也就是2,097,152个Net ID然后每个Class C之下则可以划
分28=256-2=254个Host ID。
好了这下您自己试试看计算出B Class可以划分多少个Net ID和每个Net
ID之下的可?*ost ID数目。(Tips别忘了ID不能全部为0或1)。然后再来对
照下面的列表
等级开首网路数目主机数目使用围申请领域
A 0126 16,777,到国家级
B 10 16,384 16,到跨国组织
C 110 2,097,152 到企业组织
D 1110--224.-到239.-特殊用途
E 1111--240.-到255.-保留围
认识Net Mask
下面我们要认识的是Net Mask(网路遮罩或称网路掩码)。
到了这里我必须要向大家交代清楚一件事情在我们进行IP地址划分的时候
IP和Net Mask都必须一对使用的两者缺一不可不过当我们使用分等级的IP地
址的时候我们也可以使用预设的mask比如A Class的mask是255.0.0.0
BClass的mask是255.255.0.0 CClass的则是255.255.255.0。
这是什么意思啊看255比较难理解如果您将之换算为二进位就容易理解多
了255=11111111(8个1)。然后当您把这些Net Mask和各等级IP对应看看聪
明的您就会发现一个现象就是~~凡是被1所对应着的IP部份就是Net ID凡是
被0所对应部份就是Host ID
哈哈~~应该是个值得庆贺的发现哦~我想您的心情并不亚于当初哥伦布发送
美洲大陆啦不过问题又来了既然我们已经分好等级了还用那mask干嘛我们照等
级使用不就好了吗
呵~呵~~阁下真是太聪明了佩服佩服啦不过您可别忘了电脑是一台好蠢好蠢
的机器哦请您告诉我电脑怎么识别Net ID和Host ID呢嗯不会吧那好让我告诉
您好了
还记得AND和NOT的逻辑运算吗如果忘了赶快往前翻翻补习补习再来看这
里。当电脑获得了一对IP和Mask(都是二进位数字)之后电脑先使用一个AND
的运算来求出Net ID。您可以拿自己电脑的IP来做例子这里让我们拿先前用
winipcfg看出来的IP来算算
139.175.152.254换成二进位是
10001011.10101111.01101010.11111110
(这时候您应该知道我为何当初一口就说出这是一个B Class的IP了吧还
不知道看看头两个bit是什么)
这个Class的预设mask是255.255.0.0换成二进位是
11111111.11111111.00000000.00000000
然后将IP和mask加以AND运算
10001011.10101111.01101010.11111110 AND
11111111.11111111.00000000.00000000
得出
10001011.10101111.00000000.00000000
换成十进位就是139.175.0.0这个就是Net ID了。
那么怎么求Host ID呢也很简单
先将Net Mask做一个NOT运算可以得出
00000000.00000000.11111111.11111111
然后再和IP做一次AND运算就可以得到Host ID:
00000000.00000000.01101010.11111110
换成十进位就成了0.0.152.254。
简单吧是不是哈哈~~我看到您大摇其头哦~不用担心啦多拿些IP例子来运
算运算您就得心应手了。
还有当我们设定网路环境的时候除了要输入IP地址netmask网路地址之外
有时候还需要指定广播地址(broadcast)。我已经知道如果Host ID全部为0是
网路地址而全部为1则是广播地址了。其实广播地址也可以通过一个简单运算
得到
先将Net Mask做一个NOT运算可以得出
00000000.00000000.11111111.11111111
然后再和IP做一次OR运算就可以得到Broadcast Address:
10001011.10101111.01101010.11111110 OR
00000000.00000000.11111111.11111111
得出
10001011.10101111.11111111.11111111
换成十进位就成了139.175.255.255。
不过说到这里为止我总还觉得有些不妥因为许多网路都有一定的节点极限
比如Ethernet通常最多只能连接1,200台主机如果您获得一个B Class的Net
ID岂不是浪费很多Host ID了吗要是使用A Class就更是骇人
当您遇到这种"有钱人的困扰"的时候Sub-net Mask就派上用场了。如果您
刚才还认为预设的Net Mask是多馀的话那么当您知道Sub-net Mask的功能之
后我敢保您不会再忽略Net Mask了。
Sub-net Mask的使用手法就是靠"借"或可以说靠"抢"就是从左往右的按需
要将本来属于Host ID的一些bit转为Sub-net ID来使用。也就是将预设的
Net Mask的"1"逐渐的往右增加相对地Net Mask的"0"则越来越少。这样的结
果当然是可以获得更多的Net ID换一句话说您可以将一个大的IP网路分割成
更多的子网路而每一个子网路的主机数目却相应的减少。
其情形会是当您借用1个bit的Host ID来做Sub-net ID的时候会将网路
切割开两个(2 1=2)子网路如果借2个bit则有4个子网路3个bit则8个4个
bit则16个.当所有的Host ID都借出去之后您可以得到最多数量的子网路但
这是毫无意义的因为没有Host ID了您怎么分配IP给主机呢要是您的Host ID
只剩下一个bit没有借出去的话那么您在每个网路只能得到0和1来作为Host
ID这也是不行的因为这两个ID也不可以用来分配给主机。
当您切割网路的时候您得最少留下2个bit来做Host ID这时候每个网路
最多只能连接2台主机(咦22不是等于4吗但别忘了Host_ID不能是两个0或
两个1哦)。这样的网路通常会用在WAN与LAN之间的路由器连接。而在LAN中
的应用通常最少要保留3个bit来做Host_ID。
为了更好的理解Sub-net Mask的功用我们还是以刚才的
IP(139.175.152.254)为例子来看看
我们知道它在预设情形之下的Net Mask是
11111111.11111111.00000000.00000000
如果我们借用了Host ID的其中三个bit来做Sub-net ID的话将原来的
Net Mask和Sub-net Mask做一个OR的运算
11111111.11111111.00000000.00000000 OR
00000000.00000000.11100000.00000000
得出
11111111.11111111.11100000.00000000
换成十进位后实际的Net Mask将会变成这样255.255.224.0。
因为借用的只有3个bit所以切割成为8个子网路了而他们的Sub-net ID
则分别从000到111这8个组合再加上原来的Net
ID(10001011.10101111.00000000.00000000)各子网路的实际Net ID就成了
10001011.10101111.00000000.00000000(139.175.0.0)
10001011.10101111.00100000.00000000(139.175.32.0)
10001011.10101111.01000000.00000000(139.175.64.0)
10001011.10101111.01100000.00000000(139.175.96.0)
10001011.10101111.10000000.00000000(139.175.128.0)
10001011.10101111.10100000.00000000(139.175.160.0)
10001011.10101111.11000000.00000000(139.175.192.0)
10001011.10101111.11100000.00000000(139.175.224.0)
这时候本来是16个bit的Host ID只剩下13个bit了也就是说在每个子
网路里面最多只能有2 13=8,192-2=8,190台主机而它们可分配的号码分别由
00000.00000001到
11111.11111110之间。
但我们并不能简单的将它以十进位的0.1到31.254这样表示我们还得将之
配合各个不同的Sub-netID再相加一起才能得出最终的IP号码。例如
在Sub-net ID 001之下的主机号码将会是从
00100000.00000001到
00111111.11111110之间
亦即是从32.1到63.254之间
整个IP地址则是从139.175.32.1到139.175.63.254之间。
而在Sub-net ID 100之下的主机号码将会是从
10000000.00000001到
10011111.11111110之间
亦即是从128.1到159.254之间
整个IP地址则是从139.175.128.1到139.175.159.254之间。
明白了
唉呀~头痛耶~
别complaint啦~~自己再动手算算在110这个Sub-net ID之下的主机号码
围是多少
如果您得出来的答案不是139.175.192.1到139.175.223.254之间那么您
需要离开萤幕一会到外面呼吸一下空气(别抽烟)然后过5分钟回来重新看看前
面几段文章。再重读的时候要确定您每一个概念都清楚了才继续往下读。
当然你说放弃也没什么要紧啦反正您老又不会扣您工钱啦~
IP的实际运用
好了这里让我们归纳一下以上所学吧
IP等级以开头的二进位数字来定010110分别是ABC等级
IP分两部份Net ID和Host ID。预设情形下A以第一个otect来做Net
IDB则使用前面两个otectC使用三个oect而剩下的则做Host ID;
在为机器指定Net ID和Host ID的时候换成二进位不可以全部为0也不可
以全部为1而整个IP地址必须是唯一的
Net Mask是给电脑用来计算Net ID和Host ID的将IP和mask用AND运
算得出Net ID将mask先经过NOT运算再和IP做AND运算则可以得出Host ID
Sub-net Mask是"借"Host ID来当Sub-net ID使用规则是从左往右递增作用是
将一个较大的网路切割成多个较小的网路。而在显示IP的时候必须要和Sub-
net ID加在一起也就是以完整的otect来表示。
设定规则
当我们设定IP网路的时候如果想各机器能够直接沟通那么您得使用相同的
Net ID和不同的Host ID。如果您想使用不同的Net ID(比如经过sub-net划
分)那么在不同Net ID之间的host就要经过router才能成功对讲。
当电脑用AND运算得出Net ID之后会检查来源Net ID和目的Net ID是否
一致如果一致的话就可以直接将封包传给对方否则就将封包传给Router或
Default Gateway这个过程我在以后的ARP和RIP将会讲述。
另外如果您使用了sub-net技术在分配IP地址的时候就要非常小心了以免
IP超出了子网围而无法沟通。比如在没有划分子网路的情况下(例如使用
255.255.0.0的mask)139.175.31.254和139.175.32.1都是在同一个网路之内
的他们的IP封包不用router就可以直接传递了但经过借用3个bit的子网划
分之后(net mask成了255.255.224.0)它们就被分隔在两个IP网路之内这时候
它们一定要使用router才能传递封包了。
同时原本一些有效的IP地址在sub-net之后因为Host ID变成了全部0或
1也就不能再分配给主机使用了例如139.175.63.255139.175.64.0等等。(如
果您不明白为什么将之换成二进位然后找出经过子网切割后属于Host ID部份
的数字就清楚了。)
所以当我们在一开始设计网路的时候就要具备应有的责任和远见早早就将
子网路划分好。否则等所有机器都设定好并且运作了一段时期之后才决定划分
子网路其情形将会变得异常杂。如果要重新分配IP其所做的规划以及遇到的可
见问题和隐藏问题都比从零开始难上百倍越大的网路越是如此
保留IP
当我们要将网路连上intetnet的时候我们必须先册好Net ID如果该ID已
经被使用了您就必须选用另外的ID了。负责Internet IP册的机构叫做
InterNIC(Network Information Center)他们的网路地址是。
由于Internet的爆炸性成长IP的地址买少见少而且在很多机构里也不是
所有机器都有必要使用册的IP地址。于是我们就在ABC这三个层级里面各划出
一些地址围保留给私有位址所用它们是
10.0.0.0-10.255.255.255 172.16.0.0-172.31.255.255 192.168.0.0-
192.168.255.255
当您使用这些地址的时候当然是有所限制的
私有位址的路由资讯不能对外散播
使用私有位址作为来源或目的地址的封包不能透过Internet来转送
关于私有位址的参考纪录(如DNS)只能限内部网路使用
然而正是由于这些限制当我们使用这些私有位址来设定网路的时候就无需
担心会和其它也使用相同位址的网路突了。
这给我们架设IP网路做成很大的方便比如即使您目前的公司还没有连上
Internet但不保将来不会啊。如果使用公共IP的话如果没经过册等到以后真
正要连上网路的时候就很可能和别人突了。也正如前面所分析的到时候再重新
规划IP的话将是件非常头痛的问题。这时候我们可以先利用私有位址来架设网
路等到真要连上intetnet的时候我们可以使用IP转换协定如NAT(Network
Addresss Translation)等技术配合新册的IP就可以了。
再者由于私有位址在internet上是不能路由的用来架设企业内部网路在安
全上面也是有利的。当然了如果在课堂上或在家里架设IP网路使用私有位址也
是个不错的主意哦。
不分等级的IP
思考一下如果我的IP是139.175.152.254而Net Mask则为
255.255.255.0。您认为是否用错了net mask呢而203.56.6.18使用
255.255.0.0做mask呢
我们将较大的IP等级切割成许多较小网路可以说是"有钱人的烦恼"但难道
"穷人"就没有烦恼吗当然是有啦例如您的公司有接近600台主机想连一个IP网
路申请一个B Class网路似乎太浪费而且说实在也未必可以申请得到那么申请
3个C Class的网路总可以吧当然没问题啦(如果还没用光的话)。
不过正如我们刚才知道的因为3个C Class网路它们的Net ID都各自独立
的如果您要其下的电脑都能沟通的话就要router的参与了。但是router一点
都不便宜哦~贵的router几乎可以换一辆"Benz"房车来开呢就算您老不在乎要
设定和维护好几个网路的routing也不是一件轻松的事情搞不好还要专门请"半
"个人来看管呢。
*是您可以将这三个C Class网路整合在一起来使用啦使用的是
CIDR(Classless Inter-Domain Routing)技术也就是所谓的不分等级IP了。
使用CIDR的时候您大可不必理会IP的开首字元你可以随便设定您的Net
Mask长度。也就是说一个C Class的网路也可以使用255.255.0.0这样的mask
我们称这样的网路为"Supernet"和subnet正好相反。
当然如果要和其它网路沟通您使用的router也必须支援CIDR才行啦而且
设定上是比较杂的。
如果您觉得139.175.152.254/255.255.0.0和
192.168.1.1/255.255.255.0这样的IP表现方法实在太麻烦了这里有一个更好
的表示法使用mask的bit数来表示Net Mask。这样我们就可以这样写了
139.175.152.254/16和203.56.6.18/24假如使用了三个bit的Sub-net我们
只要将16改成19和将24改成27就可以了如果是使用了三个bit的Supernet
我们将之改成13和21就可以了。
特别声明:
1
:资料来源于互联网,版权归属原作者
2
:资料内容属于网络意见,与本账号立场无关
3
:如有侵权,请告知,立即删除。
发布评论