第1页共9页IP地址详解在论坛上,经常看到很多人问关于IP地址的问题。而且问的东西都很简单,可是会的人实在是很少。不说网络工程师,只说做为一个学习网络的人来说,如果不会这个东西,实在是说不过去。IP地址这个东西刚开始学确实觉得有些困难,不过当你抓住了原理以后,你会觉得原来是这么简单,这么容易。我从来不讲什么技巧或者窍门之类的东西,我只说方法和原理。因为窍门有失灵的时候,但是会了方法和原理,只要是这类的东西,你都可以把它们砍的稀巴烂。二进制基础(Binary)二进制这个东西很简单,只有两种表示方法“0”和“1”。但是,很多变化就是在这“0”和“1”上面的。在二进制中,“0”和“1”代表的不是“0”和“1”本身,是代表这位有效或是无效(请注意,这里用的是位也就是bit)。每一个二进制位代表一个比特。八个二进制位就代表一个字节(byte)了。后面再说的时候,就只说位和字节了。比如说,“0101”就代表“无效有效无效有效”。那么这个二进制如何快速的转换为十进制和十六进制呢?下面给一个对照表:11111111这八位1每一位分别代表的十进制的值111111111286432168421这个就是从右至左第1位到第8位的二进制位,有效时对应的十进制的值(第一位是1那位,第八位是128那位)。记下来这个很容易吧?最低位是1,然后前一位都是当前位的二倍。是不是?哈哈哈……注:当然也可以通过2X-1来计算当前位的十进制值,X是位数。那么通过这个表很容易算了,比如“1010”,可以知道,是第四位和第二位是有效的。那么通过表,得到第四位是8,第二位是2。那么十进制就是将这些数相加,也就是10。十六进制表示就是A。再举一个例子,“1110”,第四位,第三位和第二位都有效,那么就是8,4,2这几个,相加的十进制就是14,十六进制就是E。下面给出一个二进制,十进制,十六进制的转化表十进制二进制十六进制000000100011200102300113401004501015601106701117810008910019101010A111011B121100C131101D第2页共9页141110E151111F八位二进制的计算方法与四位的相同,只不过换算十六进制的方法不同。是把每四位做为一块,每块计算一次,都是从第一位到第四位的计算。例如:“10110001”计算十进制的时候是从第一位到第八位对应有效位的值,有效位的值分别是128,32,16,1。那么十进制应该是177。而转化为十六进制的时候则是每四位为一个块来计算,块内是第一位到第四位,那么可以得到,第一块值是8,2,1。第二块值是1。所以,得到的十六进制是B1。再举一个例子:“11101101”十进制有效位的值是:128,64,32,8,4,1。十进制的值为237。十六进制每四位分成一块,第一块有效位的值是:8,4,2。第二块有效位的值是:8,4,1。那么十六进制值为ED。二进制只要把这些都搞懂了,看IP地址的二进制的时候就不会晕了。IP地址(IPAddressing)IP地址是由32位(bit),8字节(byte)组成的。作用就是给每个设备定义一个逻辑地址,以方便查找。为了寻址方便,所以把这32位又分为网络号和主机号两部分。在同一个网络中的设备共享相同的网络号,并且以不同的主机号来进行标识。IP地址的类IP地址设计出来的时候是分类的,这样看上去很好,很有条理,也很美观。A、B、C类地址用于日常使用。D类用于多播(有的叫组播)。E类用于研究实验用。不过,在实际应用中,这些优点似乎没有什么作用。因为A类网网络太少主机太多,不可能把所有的主机都放在一个A类网中,那样的话,仅仅是广播的流量就足以是整个网络瘫痪。而C类网网络太多,主机数量却不够用。是个矛盾的问题,所以,才有后面会说到的CIDR和VLSM的产生。当然,CIDR和VLSM最主要的意义还是用来解决IP地址不够的问题。A类网:第一个字节的第八位是“0”。整个第一个字节是网络号,后面三个字节是主机号。IP地址以1-126开头的都是A类地址。(实际是到127,不过127有特殊作用)第3页共9页B类网:第一个字节的第八位和第七位是“1”和“0”。前两个字节为网络号,后两个字节为主机号。IP地址以128-191开头的都是B类地址。C类网:第一个字节的第八位,第七位和第六位分别是“1”“1”“0”。前三个字节是网络号,最后一个字节是主机号。IP地址以192-223开头的都是C类地址。D类网:第一字节的第八位,第七位,第六位和第五位分别是“1”“1”“1”“0”。D类地址是没有网络号和主机号之分的。整个地址组成了一个多播组的地址。下面是一个网络号和主机号关系的图例第4页共9页上面这个就是这两个网络在路由表中的情况。一般情况下,路由表中只记录某个网络如何走,而不会具体到某个主机的。具体的路由以及路由表方面的东西,在下一个笔记中会写到。这里就不详细解释了。子网掩码子网掩码的作用就是协助IP地址计算出网络号。子网掩码和IP地址一样,是由32位二进制组成的。子网掩码最大的特点就是,所有的网络号的部分,在子网掩码中都表示为“1”,而主机号部分都表示为“0”。比如:B类地址的网络号是前两个字节,后两个字节是主机号。172.16.10.8。其中,172.16这两个字节就是网络号,10.8这两个字节是主机号。那么对应的子网掩码就是255.255.0.0。二进制如下表十进制二进制172.16.10.810101100.00010000.00001010.00001000255.255.0.011111111.11111111.00000000.00000000仔细看看,是不是对应的网络号的位置上,子网掩码都是“1”?那么如何通过子网掩码和IP地址计算网络号呢?是通过做“与运算”来实现的。与运算的规则就是“1与1等于1”,“1与0等于0”,“0与1等于0”,“0与0等于0”。计算的方法就是按位做与运算。从与运算的规则上可以看出,1和任何数做与运算都等于任何数。0和任何术做与运算都等于0。所以,子网掩码和IP地址做与运算以后,由于网络号的地方,子网掩码全是1。所以,网络号的地方都不变,原来是什么,与运算后还等于什么。而主机号的地方,子网掩码全是0,所以,与运算后全都等于0。也就是说172.16.10.8和255.255.0.0这个子网掩码,与运算后得到的是172.16.0.0,而这个正是172.16.10.8这个IP地址所在的网段。第5页共9页一些特殊地址127.x.x.x:这个地址是用于本地回路测试的;255.255.255.255:有限广播地址;主机号全为0:表示一个网络;主机号全为1:直接广播地址;网络号全1的广播也分为两种,一种是全子网广播,一种是本地子网广播。全子网广播是可以跨越路由器的(本地子网广播不能跨越路由器的原因是路由器的不同端口必须在不同的子网网段,所以,同一个子网的IP地址不可能分配在两个路由器端口上)。我们常说的路由器可以隔离广播,是指的隔离掉255.255.255.255这种。这种也是应用最广的,比如:ARP和DHCP都是使用255.255.255.255这种广播。常见的私有地址:10.0.0.0-10.255.255.255,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255;这些地址都是不可以做为有效的全球唯一的单播地址的。当然还包括D类和E类的IP地址。私有地址中还应该包括169和192的一个网段,不过不常用,我给忘了,大家有兴趣就上网查查吧。划分IP子网和使用可变长子网掩码(IPSubnettingandVLSM)基于类(classful)的网络看起来很不错,格式也很工整,很美观。不过一个很明显问题就是A类主机太多,网络太少。而C类网络太多,主机太少。这个时候,大家就想,可不可以不受子网掩码的束缚。于是就发明了可变长子网掩码(VariableLengthSubnetMasks,VLSMs)。由于路由器要求每一个端口上都有一个IP地址,而且在同一个路由器上,不可以在接口上配置两个相同网段的IP地址。如果以前使用172.16.0.0这个网络,只能是所有的机器都放在同一个广播域中。不过为了保证带宽和控制广播对于网络的影响,就需要加入路由器。这个时候使用172.16.0.0就没有办法用了。所以,划分为几个子网,然后连接到路由器上是一个比较好的选择。划分子网划分子网其实很简单,我就不明白为啥搞的这么困难。估计是国内的书写的太垃圾了。建议大家看看国外的书,人家能把很深奥的东西用很浅显的语言表达出来,比老雷的东西不知道精辟多少。那才叫有水平,有含金量了。我尽量也用最浅显方式给大家讲述,当然肯定不如人家洋鬼子了。不过我尽量多的举例子来帮助大家理解。大家记住原理和规则就可以了。开始正题。所谓的划分子网,首先就要明白这个“子”字。所谓的“子”,就是指在原先的基于类的网络上,再次分出来的网络。也就是说C类网是24位掩码,那么一个C类网的子网的掩码是肯定要大于24的。同理,A类网的子网掩码是8位,那么A类网的子网的掩码就肯定大于8位。下面举几个例子:一个标准的C类IP地址:192.168.1.0/24,那么192.168.1.0/26就表示192.168.1.0/24的一个子网(/24代表的就是这个地址具有24位的网络前缀。网络前缀的意思就是网络号,说明这个地址的前24第6页共9页位都是网络号。也就是说,它的子网掩码的前24位都是1。同理,/26就是指这个IP地址具有26位的网络前缀,前26位都是网络号,子网掩码的前26位都是1)。一个标准的B类IP:172.16.0.0/16,那么172.16.5.0/24就表示172.16.0.0/16的一个子网。子网都是在主类网的基础上划分的。而且要明确一点就是,子网都是从主机位借位来当做网络位的。那么我们可以知道,A类网的网络号为8位,主机号为24位,那么可以用来划分子网的位数就应该是24位(理论上24位,实际上要比这个少。B类和C类也是这样)。B类网的网络号为16位,主机号也是16位,那么可以用来划分子网的位数就应该是16位。C类网的网络号为24位,主机号为8位,那么可以用来划分子网的就应该是8位。那么我们看看借位的规则。借位的规则是,从左面第一位不是网络号的位开始借,而且借位必须是连续的不能跳跃。而这个位的概念前面也说过了,就是转化成二进制以后的每一个二进制数字就是一位。例如,一个标准的B类IP网段172.16.0.0/16,如果要从主机号中借出4位划分子网,那么会从16后面的那个0中借出四位。0表示成二进制应该是00000000,借出四位做为网络号的话,就应该是00000000。红色部分代表借出成为网络号的位。那么这个172.16.0.0/16这个网段就被划分为16个子网(24=16)。假设其中一个网段172.16.48.0/20(以前是16位网络号,再加上刚才借的4位就是20位了),要求借出3位再次划分子网,这个时候从哪里划分呢?还是那个规则,从左面第一位不是网络号的位开始借,而且借位必须是连续的不能跳跃。这个时候左边第一位不是网络号的就应该是00110000了。所以,再借三位就应该是00110000了。在表示的时候就应该使用172.16.48.0/23(刚才20位,现在又借了3位)。再举例,这次全用二进制表示,以达到直观的效果。不过大家不要被搞晕就好。IP网段使用的是:192.168.1.0/24,从中借3位作为网络号。IP十进制:192.168.1.0IP二进制:11000000.10101000.00000001.00000000如果借出三位,那么应该从左面第一为不是网络号的位开始借位。那就应该是这里:那么借位后就应该是:IP十进制:192.168.1.0IP二进制:11000000.10101000.00000001.00000000这里可能会问,这不都一样吗?没有什么变化,只是把有些位作为网络号部分了。其它的没什么变化。其实还有一个最关键的东