ip地址的分配原理详解
文章最后更新时间为:2022年05月03日 19:12:57
1. ip地址概述
互联网中有数百万台的主机和路由器,为了确切的标识它们,TCP/IP建立了一套编址方案,为每台主机和路由器分配一个全网唯一的地址,即IP地址。任何两台主机的ip地址不能相同,但是允许一个主机拥有多个ip地址。
2. ip地址结构及分类
这里介绍的是ipv4版本的ip地址,也是大家现阶段都在用的ip地址。
ip地址是由32位二进制数,即4个字节组成的,由网络号和主机号两个字段组成。总的来说,寻址的过程是:先按网络号把网络找到,再按主机号把主机找到。
为了便于对ip地址进行管理,同时还考虑到网络的差异很大,ip地址分为5类,即A类到E类,如下所示
这些32位的地址通常写成四个二进制的数,其中每个整数对应一个字节,这就是点分十进制记法,例如我的ip地址就是171.48.163.10。
关于上图中的网络号范围:
- A类地址网络号占用一个字节,但是由于有一位是类别位,只有7位可供使用,但是由于规定,网络字段全0是个保留字段表示本网络,而127(01111111)是另外一个保留字段,作为本地软件的环回测试。我们常见的127.0.0.1表示本机,原因也是出自这里。所以A类地址可以指派的网络号个数为(2^7-2).
- B类网络地址网络号有两个字节,前两位为10已经固定,只剩下14位可用,由于这14位无论怎么取值都不会使得网络号为全0或者全1,但是实际上规定,B类不指派128.0.0.0,所以最小网络地址为128.1.0.0。因此B类地址可指派的网络号个数为(2^14-1).
- C类地址有3个字节的网络字段号,前三位固定110,只有剩下21位可用,同样C类地址192.0.0.0也不指派,可指派的最小网络地址也是192.0.1.0。因此C类地址可指派的网络号个数为(2^21-1).
可以看出区分各类地址最简单的方法就是看它的第一个十进制整数:
类型 | 范围 |
---|---|
A | 0.0.0.0到127.255.255.255 |
B | 128.0.0.0到191.255.255.255 |
C | 192.0.0.0到123.255.255.255 |
D | 224.0.0.0到239.255.255.255 |
E | 240.0.0.0到247.255.255.255 |
目前大量使用的是A、B、C三类地址,当某单位申请一个ip地址时,实际上只是申请到了一个网络号,具体主机号由本单位自行分配。
3. 建立子网
现在所有的主机都支持子网编址,不是把ip地址看成单纯的网络号+主机号,而是把主机号再分成一个子网号和一个主机号。这个分配的过程就是管理员建立子网的过程。
举个例子,假设这里有个B类网络地址(130.252),在剩下的16bit中,8bit用于子网号,8bit用于主机号,格式如下所示。
16位 | 8位 | 8位 |
---|---|---|
网络号=130.252 | 子网号 | 主机号 |
这样就允许有254个子网,每个子网有254台主机。
子网对于外部来说隐藏了内部网络组织的细节。在我们的网络例子中,所有的ip地址都有一个B类网络号130.252。但是其中有超过30多个子网,多于400台主机分配在这些子网中,由一台路由器提供Internet的接,在各子网之间用路由器互连。
4. 子网掩码
上例中对于主机号的分配我们是把16位拆分成8位子网号和8位主机号,那么为什么不是7位子网号9位主机号呢,这里就涉及到子网掩码的作用了。
TCP/IP体系规定用一个32位的子网掩码来表示子网号字段对应的长度。具体的做法是:子网掩码由一连串的‘1’和一连串的‘0’组成,‘1’对应于网络号和子网号字段,而‘0’对应主机号。
现在我们来看一个例子。假设还是分配到一个B类地址130.252。其子网掩码是11111111.11111111.11111111.00000000
。可以看出前24位为‘1’,后‘8’位是‘0’,说明网络号+子网号为前24位,子网号为24-16=8位,主机号为后8位。划分的主机地址格式为
16位 | 8位 | 8位 |
---|---|---|
网络号=130.252 | 子网号 | 主机号 |
如果子网掩码为11111111.11111111.11111110.00000000
,那么子网号有23-16=7位,主机号有9位。对应的主机地址格式就变成:
16位 | 7位 | 9位 |
---|---|---|
网络号=130.252 | 子网号 | 主机号 |
通过上述例子我们便可以知道子网掩码的作用就是用来确定对主机号的划分。
A、B、C类ip地址默认的子网掩码分别为:255.0.0.0
、255.255.0.0
、255.255.255.0
。
有了子网掩码,总路由器才可以确定把数据转发到哪个子网。举个例子:
假设一个公司网络的网段为130.252。子网掩码11111111.11111111.11111111.11000000
(前26位是网络号+子网号,后6位是主机号)。
这时外界计算机要将一个数据传送给ip地址为130.252.16.98的主机,那么这个数据会先到公司的总路由器,进入130.252网络中。总路由器接收到了这个数据该转发到哪个子网中呢?
首先将130.252.16.98转化为2进制为10000010.11111100.00010000.01100010
,根据子网掩码便可以确定网段为10000010.11111100
(130.252),子网号为0001000001
(65),主机号为100010
(34)。
最终路由器把数据转发到第65个子网上,在由子网路由器转发到第34个主机上。
5. 同一网段
想在同一网段,必须做到网络标识相同。各类IP的网络标识算法都是不一样的,需要根据子网掩码的位数来判断。
算法只要把IP和子网掩码的每位数AND就可以了。(AND方法:0和1=0 0和0=0 1和1=1)
如:And 192.168.0.1,255.255.255.0,先转换为二进制,然后AND每一位。
IP: 11000000.10101000.00000000.00000001
子网掩码: 11111111.11111111.11111111.00000000
得出AND结果: 11000000.10101000.00000000.00000000
转换为十进制192.168.0.0,这就是网络标识。
其实很容易理解,只要两个ip地址的网络号和子网号都一样就是同一网段。 而网络号和子网号的位数是需要根据子网掩码才可以知道了,上述算法的原理也是基于此。
举例: 假设我们的主机地址是140.252.1.1(一个B类地址),而子网掩码是255.255.255.0(子网号8位,主机号8位主机号)
- 如果目的ip地址为140.252.1.5,那么我们就知道b类网络号是相同的(140.252),子网号是相同的(1),属于同一网段
- 如果目的ip地址为140.252.4.5,那么我们就知道b类网络号是相同的(140.252),但是子网号是不同的(1和4)。不属于同一网段
- 如果目的ip地址为140.251.4.5,那么我们就知道b类网络号是不相同的(140.252和140.251),后面比较就没必要了,不属于同一网段。
一般来说,如果主机没有设置防火墙禁止别人访问的话,位于同一网段是主机是可以直接访问的。
6. 私有地址
A、B、C三类地址是我们常见的IP地址段。在这三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请注册。但是在IPv4地址协议中预留了3个IP地址段,作为私有地址,供组织机构内部使用。这三个地址段分别位于A、B、C三类地址内:
- A类地址:10.0.0.0--10.255.255.255
- B类地址:172.16.0.0--172.31.255.255
- C类地址:192.168.0.0--192.168.255.255
这些地址是不会被Internet分配的,它们在Internet上也不会被路由。也就是说在外界公网上,不可能有ip地址是上述范围之中的。
绝大部分计算机都是在一个内网中,而不是直接分配一个公网ipv4地址,我们可以用ipconfig查看一下本地的吧ip地址,然后对比一下公网ip地址:
ipconfig查出来的是你本机的IP地址,也就是内网私有地址,此类地址仅在局域网使用,不能联通外网。
百度查出来的地址是你上网的公网地址。
为什么要使用这种机制呢?
ipv4的数目看起来很多,实际上全世界分一分就捉襟见肘了,因此我们使用私有ip,大量的内网ip地址转换为一个或少量的公网IP地址,就减少对公网IP地址的占用;有时候一家公司不需要连接Internet,只需要内部之间相互通信,便可以建立一个局域网,分配私有ip给公司的每个电脑,这样可以防止hacker的入侵。
实际上这个公网地址就是内网连接Internet的身份。外界只会知道你的公网ip地址,内网的地址可以根据需要自行分配,对外界是不可知的。
公网ip的数量稀少,导致一般一个公司或者单位才会分到一个公网ip,一般企业内部或者学校的计算机都是只分配了内网ip。
那如果我们的ip是私有地址,那怎么连接Internet呢?
既然我们都是用的私有ip,那么我们应该只可以在内网内部进行通信,你可能会疑问那么我们是怎么连接上Internet的呢?
这是使用了NAT技术。NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准,允许一个整体机构以一个公用IP(Internet Protocol)地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。
简单的说,NAT就是在内部网络中使用私有地址,而当内部计算机连接Internet时,就在网关(可以理解为出口,打个比方就像院子的门一样)处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接。
实现NAT转换的地方一般是路由器。我们也可以通过对路由器的设置来让外界对公网的访问映射成对局域网某一主机的访问,当我们要将计算机做成服务器时,需要用到此技术。
最后让我们来模拟一下我们上网的流程。
小明是个大学生,电信公司分给他宿舍楼一个ip是118.168.14.117,宿舍楼网络管理员给小明同学分配的私有ip是192.168.1.150。这天小明打开了浏览器想要搜索明天天气怎么样,这时的数据发给了路由器,然后路由器把数据发送给了百度的服务器(私有ip转换为公网ip)。百度接收到之后返回了一段数据到了路由器(百度以为是路由器的公网ip请求的),然后路由找到小明的私有ip(公网ip转换到私有ip),将数据发给了小明,这就是小明真实上网的流程。
7. 网关
上述小明的例子中,路由器作为公网和私网的桥梁,这时路由器便充当了网关的角色。实际上路由器并不是内外网的连接点,网关才是,这里路由器可以完成网关的功能完成网络的互连罢了。
网关就是一个网络连接到另一个网络的“关口”,也就是网络关卡,又称网间连接器、协议转换器。网关是一个网络层上的概念,既可以用于局域网互连,也可以用于广域网互连。
由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天很多局域网采用都是路由来接入网络,因此通常指的网关就是路由器的IP!
8. 总结
ip地址大家都知道,但是对于其中的细节还是有很多需要理解,本文大概介绍了ip地址分类,子网划分,公私网通信等。
参考:
我想复制部分内容作为我的博客,可以吗
我想复制部分内容写我的第一篇个人博客
我想盗用你这篇写论文,可以吗
@论文 ?
老哥写的太好了,复习完了
特别好
开头或许可以改成:
ip地址是由32位二进制数,每8位二进制数占一个字节,即4个字节组成的
写得很好,懂了
写得太好了
“假设这里有个A类网络地址(120.252)”。A类网络号不是8位吗?
@王大龙 是8位,没问题啊
@saucerman 我和层主有同样的疑问,A类ip的网络号应该只占一个字节,而120.152看起来像占用了两个字节,这如果理解呢,望大佬解惑
@lzj 抱歉,这里是我写错了,A类ip地址的网络号是8位,所以这里应该是120. 文章我也修改了下,感谢指正。
@yanq 嗯嗯,感谢大佬解疑。文章写得太好了,收获很大!
120.252不是A类ip么
@steven 已修正,感谢指正
通俗易懂