网路是怎样连接的(十二)IP地址怎麽看

思考重点

  • 如何看懂IP代表的意思
  • 子网内的设备可以被直接访问吗
  • 网路设定中的255.255.255.0是甚麽
  • 公有IP与私有IP差别
  • 固定IP与浮动IP区别

架构图

IP地址表示方法

IP地址相当於电话号码的概念,想要与对方通讯必须要知道对方的电话号码才行

在网际网路中,相应主机之间是透过IP地址进行沟通,也就是说使用TCP/IP网路互相沟通的主机一定要配置IP地址,因此IP地址可以说是网路传输中最基本的部分

IP地址总长度为4个bytes,每一个byte为一组,总共分成4组,通常用十进位制表示:

IPv4二进位制 IPv4十进位制
11000000. 10101000. 00000000. 00000001 192.168.0.1
11001011. 11001100. 00110000. 00111000 203.204.48.56
10101100. 00010000. 00000000. 00001010 172.16.0.10

由於一个分组的长度是一个bytes的关系,分组的数值表示上限为255(8个bits全部为1),这也是为什麽你不会看到256.0.0.1这种表示方法

从IP地址的表现方式不难看出其实IP地址的数量其实是非常有限的,若是每个分组均有256种可能,那麽经过计算,IP地址总共会有256*256*256*256=4294967296个,相信以现在的设备数量来说,一定是远远不够的,因此我们会看到网际网路使用了非常多技术来降低IP地址的实际使用数量

你可能会觉得IP地址代表的是连线到网路的这台电脑,但其实IP地址是依据网卡来分配的。若是电脑只搭配一张网卡的话,我们可以说该IP地址代表这台电脑,但若是同时配备两张以上的网卡,主机就会拥有多个IP地址,你可以试着在终端中输入ipconfig/all来查看IP地址的配置,由於我的电脑址搭配一张网卡,所以只会有一个IPv4地址


若路由器同时拥有两个网卡,他可以同时代表两个不同的子网系统,例如下图的路由器就代表192.168.0.1192.168.1.1两个子网


IP地址等级

IP地址分为网路部分与主机部分,网路部分代表所处网域,而主机部分则代表该主机。以192.168.0.12为例,其中的192.168.0是网路部分,12代表这个主机,同一个网域中每台装置的网路部分相同,但主机部分必须互不相同

依照网路的用途与子网主机数量要求,IP地址为了有效分配IP给不同层级的客户,引进了IP等级制度。网路部分长度越小,代表可以分配的主机数量越少,但相对的它可以容纳更多的子网主机数量,这种类型的IP地址就非常适合分配给大机构与政府机关

相反的网路部分越长,主机部分越短,它能够容纳的主机号越少,这种等级的地址数量众多,但子网主机数量少,适合分配给家庭、学校等小单位


简单来说IP地址等级是利用第1位元到第4位元的组合来进行等级地划分,每个IP等级可以分配的数量与对应关系如表:

等级 对象 IP范围 子网遮罩 网路部分容纳数量 主机部分容纳数量
A 大型企业、国家机构、研究机构 0.0.0.0~127.255.255.255 255.0.0.0 128 16777214
B 中型企业 128.0.0.0~191.255.255.255 255.255.0.0 16384 65534
C 电信商业者、小型企业 192.0.0.0~223.255.255.255 255.255.255.0 2097152 254
D 群播地址 224.0.0.0~239.255.255.255 255.255.255.255 --- ---
E 保留 240.0.0.0~255.255.255.255 --- --- ---

A级地址
A级地址第一个位元固定为0,IP地址的前8个位元为网路部分,范围落在00000000~011111111,换算成10进位置就是0~127。後24位元为主机部分,总共有256*256*256=16777216个主机号,但主机号部分不能同时为0或同时为1,所以主机部分容纳数量为166777216-2=16777214

B级地址
B级地址的第一个位元为1,第二个位元为0,IP地址的前16个位元为网路部分,范围落在10000000~10111111,换算成10进位就是128~191。後16位元为主机部分,总共有256*256=16386个主机号,减去两个特殊IP地址,主机部分容纳数量为16386-2=16384

C级地址
C级地址的第一个位元为1,第二个位元为1,第三个位元为0,IP地址的前24个位元为网路部分,范围落在11000000~11011111,换算成10进位就是192~223。後8位元为主机部分,总共有256个主机号,减去两个特殊IP地址,主机部分容纳数量为256-2=254

D级地址
D级地址的前四个位元分别是1110,整个IP地址的都是网路部分,范围落在11100000~11101111,换算成10进位就是224~239。D级地址主要用於群播用途(Multicast),它并没有分配主机号

E级地址
E级地址的为保留未使用的IP地址

从上面的介绍中可以发现使用等级制度可以使得IP地使用更有效率

试想不使用等级制度的状况下,所有的设备均使用一样的主机数量,有些大型机构一定会不够用,所以势必要使用更多IP地址,另一方面家庭则可以会有太多主机号未使用,一来一往之下,IP的使用效率一定不高

但IP等级制度的缺点很明显,一旦分配特定等级的IP地址後,主机号的分配数量就固定了

比如说我申请一个C级地址,主机号最多就是254个,将来想要申请超过254台主机号就需要转换成更高等级的B级地址,不过B级地址的主机号又太多,这之间的变化太大,反而会造成IP地址的浪费

你能想像不使用网路部分与主机部分区隔IP地址的状况吗?
这种情况下就没有所谓的区域网路概念,所有设备都直接与网路核心相连,而且每个设备都需要IP地址,这种状况下IP地址很快就会被消耗殆尽

为什麽主机部分数量要减2?
主机号全为0的状况代表该网路区段,例如在C级地址192.168.0.12192.168.0.0,或B级地址172.16.10.1172.16.0.0都代表该子网网域,所以IP在分配主机号时候尽量避免使用全0的地址,以免发生冲突。主机号全为1的状况为广播模式,後面会做介绍,简单来说IP主机号为255时为特殊保留字,应该避免,例如192.168.0.255

IP等级的另类好处: 快速分类
我们前面有提到IP等级是依据前1到4个比特位进行分类,假如IP地址的第一个比特位为0,我们马上就可以得知它是一个A级地址,并能快速分析出网路部分与主机部分

子网遮罩

为了解决IP等级产生的缺点,我们需要更精确的定义IP地址,因此子网遮罩的目的就是如何更有效的区分出网路部分。子网遮罩的出现使得IP分割不再受到IP等级的限制,可以将不同IP等级再切分成更小网路单位

使用子网路遮罩必须准备一组掩码长度,来判断网路部分长度。举例来说178.15.50.9这个B级地址,使用掩码长度26,所以1~26比特位要设置成1,27~32要设置成0,经过运算後可以得到网路遮造255.255.255.192

将计算出来的网路遮罩与原本IP地址进行AND运算就可以得到网路部分,详细运算如下表所示:

IP (十进位) 178.15.50.9
IP(二进位) 10110010.00001111.00110010. 00001001
子网路遮罩(十进位) 255.255.255.192
子网路遮罩(二进位) 11111111.11111111.11111111.11000000
IP网路部分(十进位) 178.15.50.0
IP网路部分(二进位) 10110010.00001111.00110010.00000000

你看这样是不是就解决IP等级下的浪费了呢,透过将IP分成更细的子网,每个区域网路下包含的设备数量恰到好处,而不会为了提升效率免强塞进一堆设备,增加封包传递时的冲突

你可以想想下列哪一个场景更具有效率优势:

  1. 将所有的车流导向同一条一级快速道路上
  2. 将有特定目的的车流分别引导到不同的二级快速道路上,虽然二级快速道路不如一级来得宽敞,但都恰好可以处理车流

另外网路遮罩还具有让传送封包更有效率的功能。我们之前提到过,IP封包头部会包含发送端IP与接收端IP,这时只要使用子网遮罩就可以得知目的地主机是不是和自己处於相同的网域下,如果是的话就直接发送,不是的话再交给路由器转发


在cmd中输入route print指令来查看路由表,我当前电脑的IP为192.168.0.12,若目的地IP地址与网路遮罩栏位AND运算後等於网路目的地栏位中的地址,则将封包发往对应的闸道栏位

例如目的地IP为168.15.56.1,经过网路遮罩0.0.0.0AND运算後得到0.0.0.0,所以必须先将封包传到路由器地址192.168.0.1

闸道栏位显示"在连结上",代表目的地IP与当前IP在同一个区域网路中,可以直接传送封包而不用透过路由器转发

路由表的优先级判断
上述的例子可能有些朋友会疑惑,路由表中的网路遮罩这麽多,该怎麽判断查找的优先顺序呢?其实在查找过程中会先判断前缀(prefix),符合越多项的优先比对,且前缀必须是连续相同的。例如目的地IP192.168.0.9的前3个bytes具有相同的前缀(均为192.168.0),因此优先使用255.255.255.0这组网路遮罩,以此类推,0.0.0.0是最後的一个比对遮罩

子网路遮罩表示方法
上面的例子我们将子网路遮罩长度设定成26,我们可以将IP地址写成178.15.50.9/26,这样就可以清楚知道网路部分是从第1个比特位到第几个为止

广播

广播的目的是将讯息传给该区域网路中的所有设备。IP地址将主机号全部设置成1判定为广播地址,有点难懂吧,刚好前面学过子网遮罩的概念,就顺便举个小例子练练手!

案例
使用现有的IP地址、子网路遮罩来求广播地址

IP地址 192.168.56.205
子网路遮罩 255.255.255.224
广播地址 ???

首先我们需要将IP地址与子网路遮罩分别都转换成二进位,转换後发现子网路遮罩的长度为27,这代表IP其实可以写成192.168.56.205/27,网路部分占27bits,主机部分占5bits

均转换成二进位後,将两个IP地址做AND运算得出IP的网路部分。11000000.1010100.00111000.11000000转换成十进位就是192.168.56.192

因为子网路遮罩只到第27比特位,剩下的的比特位都是主机号,所以将得到的IP网路部分的末5码比特位都设置成1,得到11000000.1010100.00111000.11011111,转换成十进位就是192.168.56.223

把这一系列的运算整理成如下的表格:

IP地址(二进位) 11000000. 10101000. 00111000.11001101
子网路遮罩(二进位) 11111111.11111111.11111111.11100000
IP地址网路部分(二进位) 11000000.1010100.00111000.11000000
IP广播地址(二进位) 11000000.1010100.00111000.11011111
IP广播地址(十进位) 192.168.56.223

了解广播IP的配置方法後,我们可以看看广播地址对应的MAC地址是甚麽。手动打开cmd,输入arp -a指令来看看[[网路是怎样连接的(十一) 初探IP协议#ARP表|ARP表的内容]],发现广播地址对应的MAC地址是ff-ff-ff-ff-ff-ff

ff-ff-ff-ff-ff-ff为特别保留的MAC地址,只要交换设备发现封包的MAC地址为ff-ff-ff-ff-ff-ff,就会自动将该封包转发给相同网域中除了发送方以外的设备,一般来说接收到广播的设备不用做任何回应

一般来说若设备收到的MAC头部地址与自己不同会直接丢弃封包,不过ff-ff-ff-ff-ff-ff除外,它代表网路中的所有设备都要接收它

公有地址与私有地址

公有地址与私有地址的概念很简单,但凡可以让全球范围内的人可以直接访问的IP地址就称为公有IP

例如连接外部网路的路由器、服务器、Google首页、Amazon官网、或有注册全球IP地址的部落格等,公有IP具有唯一性。相对的只有在区域内的人员才能够互相通讯的的称为私有IP,不同区域网路内的私有IP可以重复,但同一个网域内的不能,例如学校、公司、家庭或组织内部人员使用的就是私有IP

提出公私有IP的目的很简单,就是为了减少全球范围的公有IP的使用,假如所有设备都配置一个公有IP,那麽很显然IP地址很快就会被消耗殆尽

话又说回来私有IP又是怎麽分配的呢?

其实IP地址有专门分配给组地址给私有IP使用,其分布如下表所示,超过这个范围的就是公有IP:

等级 私有地址范围 网路数量
A 10.0.0.0~10.255.255.255 1
B 172.16.0.0~172.31.255.255 16
C 192.168.0.0~192.168.255.255 256

实际操作很重要,让我们在一次打开cmd输入ipconfig/all指令来看看电脑的IP地址是公有还是私有IP

嗯,很明显是C级私有地址,然後我去查了一下,家里使用的路由器品牌是D-Link不是工商时间,预设路由器IP是192.168.0.1,网路部分是192.168.0

然後看看cmd中的预设闸道消息,192.168.0.1就是路由器IP,不同路由器品牌分配的子网IP会有些不同,不过常见的就是192.168.0.1, 192.168.1.1, 192.168.31.1

大家到这里可能会有些疑惑,既然私有IP的目的是减少公有IP的使用,使用范围是同一个子网内的设备,那假如我要与其他区域网路的设备通讯怎怎麽办?在IP头部中填入私有IP吗?不对阿,不同网域可能会有相同的私有IP,到底私有IP跟公有IP之间存在甚麽关系?

ipconfig/all指令中我得知了当前电脑的私有IP为192.168.0.12,这是同一个子网路中的设备互相辨识用的IP,那我们来看看浏览网页时对方判定的IP又是多少

首先到Google搜寻页面,打上what is my ip,按下搜寻即可显示你的公有IP地址(你也可以到百度搜寻我的IP)


结果显示203.204.48.56是我的公有IP地址,其实这个IP是由路由器分配给我的,假如我现在要访问全球范围内的网路,就分配给我一个公有IP

分配?这又是怎麽一回事...

固定IP与浮动IP

其实固定IP与浮动IP都是公有IP,只是分配的形式不同而已。你可以它当成商业化下的产物,也就是ISP业者向使用者提通的不同形式服务

固定IP顾名思义,它的IP地址不会随着时间改变,更不会因为你重新开机或者重新连线而不同。因为这种特性,固定IP通常用於IP不允许变动的使用场景,例如辨公室里的印表机、网路上注册的部落格、商业用途的官方网站等等
优点:

  • 方便远端连线协作
  • 便於其他使用者直接造访
  • 更快的连网速度(不需要重新配置IP)

缺点:

  • 更高的费用
  • 需要手动配置固定IP(较为复杂)
  • 容易成为骇客攻击目标

使用浮动IP的设备有可能因为时间、重开机或电信业者重新分配而改变IP地址,也可能不会改变。这种特性使得浮动IP可以分配给多台设备共用,有需要连线的设备在透过具有NAT功能的主机或路由器分配一个浮动IP就好
优点:

  • 相对便宜的费用
  • 自动配置IP,设定较为简单
  • 仅需要一条Cable或ADSL就可以让多名用户上网

缺点:

  • 连网速度较慢(需要重新配置IP)
  • 对於有架网站需求的使用者来说,较为麻烦

先来简单介绍一下DHCP与NAT之间的关系。当设备有上网的需求时,ISP电信商就会动态分配一个可以上网的公有IP地址,这种技术就称为DHCP。而子网域内的私有IP是无法上网的,因此NAT的责任就是让子网内多台设备共用一个DHCP分配的公有IP。这个分配到的IP我们就称为浮动IP,所以假如你的DHCP功能是显示开启,那代表你的设备是使用浮动IP的方式进行上网


我们一样在cmd中输入ipconfig/all指令,假如DHCP功能被启用则表示当前使用的是浮动IP,否则就是使用固定IP。

下图显示我的电脑的DHCP配置为启用,也就是说我们在Google上搜寻What is my IP的结果(203.204.48.56)其实是电信业者使用DHCP分配给路由器的一组浮动IP,路由器再使用NAT功能使我可以用这组IP上网


不使用DHCP
若使用者不使用DHCP功能,那麽每次上网时都需要手动输入IP地址(固定IP)、网路遮罩、预设路由等等,非常麻烦,相反的有设定DHCP的设备,只要简单设定DHCP服务器,就可以达到随插即用的作用


好啦,今天的文章就到这里,希望会对各位有帮助,有任何想法也欢迎留言告诉我,毕竟你的反馈是我写作的最大动力!


<<:  Choosing the correct postcard size for print

>>:  Time Machine 的备份提案

沟通这回事:ORID 与引导

前言 昨天分享了冰山理论,今天接着谈「焦点讨论法 | ORID」,并在後半延伸至引导学(Facili...

[Day 17]独自一人的全端攻略(後端篇)

挑战目标: MockNative Camp 今天来自定义Spring ExceptionHandle...

Leetcode (Algorithm I): 5. Search Insert Position

思路 也是binary search的应用题,承前两篇文章,有lb跟ub和index三个数值可选,我...

食谱搜寻系统制作_中

**制作目标 ** 资料库搜寻 在输入料理搜寻模式後,会让使用者输入料理名称或一项食材,再从资料库里...

30天零负担轻松学会制作APP介面及设计【DAY 16】

大家好,我是YIYI,今天我要来制作到目前为止所有页面放入MARVEL APP做DEMO。 进入MA...