当前位置: 代码迷 >> 综合 >> IP详解- IP分类 和 DHCP 协议
  详细解决方案

IP详解- IP分类 和 DHCP 协议

热度:48   发布时间:2023-12-17 09:57:02.0

1.什么是IP地址

在这里插入图片描述
  基本每个互联网从业者都对 IP 地址并不陌生,我们知道计算机就是以 1 和 0 的无限组合作为基础构成的。也就是低电平和高电平,不论什么信息,本质上就是一串二进制数字,当然,IP地址也不例外,它是一串 32 位的 0/1 组合(4个字节),用于标识一个主机的临时通讯身份,当然这是 ipv4 的版本,举一个栗子,你现在为什么可以上网查看我的文章呢?这是因为你拥有一个公网IP 来和 csdn 的主机进行了通讯,你可以申请一个固定的公网 IP,或者是拨号上网让服务商随机分配一个IP给你,原理其实就是买房和租房的区别。租房的原理一般都是采用 的 DHCP 协议。因为限制了 32 位的长度,会导致公网 IP 的个数 是有限的,这也是为什么 ipv6 要出来的原因。

现在你可以使用两个命令来查看你的 机器IP 地址,但是你看到的一般不是出口 IP,当你使用了路由器进行连接时,会发现你的IP地址是 192.168.xx.xx 的形式,这是内网 ip 地址的标配形式。命令如下,你可以尝试敲一下:

# window下查看IP地址: ipconfig
# linux下查看 IP 地址:ifconfig
# 查看出口 IP 地址:curl myip.ipip.net

业内有一个笑话,怎么还有人把内网IP(私网ip)打码的呢?

  虽然说是一个笑话,但是是有道理的,内网ip 只在一个局域网内有效,这就好比你的门牌号,只有在一个确定的楼栋你的门牌号才有效,我告诉你我的房间号是401,那么又如何呢?你怎么找我?但是公网IP就不一样了,分配的公网IP是确定好了区域了,我知道了你的公网IP,就可以知道你在哪个国家,哪个省份,哪个城市,甚至是哪一栋楼,这也是为什么基于 IP 地址就可以查你在哪个区域的问题。当然,也是有办法不被追踪的,你知道有这回事就好了。

32位的 0和 1组合实在是太难记了,太反人类了,π 你小数点你又能记得多少位呢?
所以,一般来说,我们需要换一种叫法。

ip(点分十进制): 192.168.0.1 
ip (点分二级制) 11000000.10101000.00000000.00000001其中 2^3 = 8 ,2^4=16, 2^5=32, 2^6=64, 2^7=128
192 = 128 + 64 即 2^7 + 2^6 ,从右边开始从0 数,即第七位和第六位为1,其他为0,就是 11000000,
其他同理可得 168 = 2^3 + 2^5 + 2^7,即 101010000

我们在平时的沟通中一般是使用十进制的叫法,更加的容易记住。
但是在日常的计算中,是需要使用二进制的。

2.IP划分

  没有规矩,不成方圆,IP 地址 太多了,分类是必不可少的。我们先简单的分一下类,把IP地址分成 网络号 + 主机号,例如 192.168.20.1/24,的意思就是 192.168.20 属于网络号,1 是主机号,怎么理解呢?网络号就是同一个班级,主机号就是座位号,但是一旦确定了网络号,主机号是有限制的。例如上面的例子,/24 就是说前 24 位属于网络号,那么主机号是只剩下了八位,8位最多也是 2^8 = 256 个。其实,这只是分法不一样而已,就好比一个学校固定就只能呆那么多的学生,你要分多少个学院多少个班级,分的班级越多每个班的名额肯定就越少啊。

基于网络号和主机号的原则,我们可以把 ip 地址分为 A,B,C ,D,E 类地址
在这里插入图片描述

可以发现这些分类是基于首位字节前四个比特进行区分的,就好像是我们省份划分一样,范围特别的大,对于正常情况下,我们当然是希望更加有效的管理 IP 地址,这种分类方式的优点就是简单,灵活。缺点就是缺少私有网络下的的地址灵活性,而且我们平常只可以使用 A、B、C 三类地址,这就很麻烦了,A类地址支持的主机数是 2^24个,B类地址 是 2^16 次方个,如果你需要 2^17次方个IP地址,那么就不得不使用 A 类地址,但是这样的话就浪费了位置了。总不能一辆十个人的车坐不下,就让这十个人去坐一百个位置的车吧,也太浪费钱了。

在这里插入图片描述
这些分类主要是为了规范大家去使用 IP地址,我们可以发现跟程序逻辑一样,他是一种嵌套的 if 判断,是有逻辑顺序的,先判断是不是 A类,再判断是不是 B,递推下去,这种分类地址真的不实用,所需我们需要更加准确、更加细分的区分逻辑。这就是 CIDR 无分类地址的出现的原因了。

2.1 CIDR

这是一种更为灵活的IP划分方式,当然也还是 基于 网络号 + 主机号 的原则实现的。我们经常会说,两个主机能不能直接通信,主要看的是在不在同一个网段,也就是网络号是否相同,当然也需要是同一个区域的网络,不同公司的局域网可不能直接通信。注意这里说的是直接,简单来说就是没有经过路由器的转发,集线器或者交换机是可以的。突然想起我好像还没有重点讲过这三大剑客的区别,似乎在一两年前写的专栏中有所提及,大家感兴趣可以去了解一下。

CIDR 的原理是基于子网掩码来判断 IP 的网络号以及主机号的位置,来判断这些IP是否实在同一个网段下面。我来举一个简单的例子,互联网有个很重要的原则,就是协议,如果没有协议,这个网络世界就会变得乱七八糟,我有个同事,他说他是你学校的,我可能就会信了,但是我需要确认,那我要基于什么确认呢?学信网查一下他的学籍信息,我们知道,有些坏蛋可能会伪造证书,但是学信网是大家公认可信的,如果我们有了他的学籍号,我们就可以知道他是哪个学校的了。

但是学籍号和学生的关系,并不是有了学生才有了学籍号,而是有了学籍号,再绑定了这个学生,才有这个独一无二的学生。子网掩码和 IP 地址的关系也是如此。我们不能直接去根据IP 地址去猜它的网络号,它必须同时带上子网掩码,我们才能准确的判断出它的网络号是哪几位。

在知乎上看到了一个十分好的栗子说明,:

从前有一个地主,有256间房子,地主家的门牌号码是“192.168.1”,
那么他家第一间房子的门牌号码是192.168.1.0,
第二间是192.168.1.1,…第256间的编号是192.168.1.255。
地主老了,需要把256间房子分给4个儿子,平均分配,每个儿子可以分64间。请来一位先生主持公道,先生这么来操作:192.168.1.0-192.168.1.63 分给大儿子
192.168.1.64-192.168.1.127 分给二儿子
192.168.1.128 -192.168.1.191 分给三儿子
192.168.1.192-192.168.1.255 分给四儿子那如何来描述四个儿子的子网网段呢?
192.168.1.0/26
192.168.1.64/26
192.168.1.128/26
192.168.1.192/26/26是什么鬼?
255.255.255.192的二进制是多少?
“11111111-11111111-11111111-11”
大家数数一共多少个1?不用数了,是26个1,为了简化子网掩码的表示,用/26代替255.255.255.192。
按位与运算我们来看大儿子的网段192.168.1.0/26是如何得到的?以大儿子的房间为例:
192.168.1.0-192.168.1.63二进制表示:192.168.1.011000000.10101000.00000001.00000000
192.168.1.6311000000.10101000.00000001.00111111
首尾地址完全相同的是多少?11000000.10101000.00000001.00数数一共多少位?26位!
那么用这个“192.168.1.0/26”就可以表示大儿子所有房间。
对照房间的门牌号码“192.168.1.199”,很显然属于四儿子的。一个主机192.168.1.199/26 能否和直连主机192.168.1.200/24 通信?
可以的,因为都是四儿子的房间。一个主机192.168.1.199/26 能否和直连主机192.168.1.1/24 通信?
不可以,因为一个是大儿子的房间,一个是四儿子的房间,无法直连通信!栗子提供者:
作者:车小胖
链接:https://www.zhihu.com/question/56895036/answer/150953183
来源:知乎

这个栗子十分的生动,我们可以发现,在 C 类地址的基础上,基于这种无分类的方式我们将 256 台主机进行了再次的划分,本质来说,CIDR 是分类地址的一种优化算法补充,我们还是要基于分类地址的原则下进行工作,例如D,E类我们一般还是不会去使用,根据自己网络拓扑图的大小,选择合适的分类(前缀),再进行无分类的划分。这才是较好的方案。

通过这种方式,在同一个物理网络区域下,我们就可以通过子网掩码和 ip 地址计算出对应的网段,从而得知两个 ip 主机是否可以直接通信。

3.怎么获取一个 IP 地址

我们需要有一个公网 IP 才可以在网络上冲浪,对,一个就行了,但是在很多情况下,我们是需要使用多台设备上网的,这些设备可以共享一个出口,相当于说同一个栋楼的人共用一个大门。一栋楼是有多个房间的,怎么让这些房间物尽其用呢?如果每个租客或者业主都没有进行登记,就随便的住,会导致很多的问题,我住着401 房间,然后没有登记,后面又来了个401,还拿我房间电话叫了一个酒水套餐,这钱要是算我头上咋办。

每台主机想要上网都必须拥有至少一个 IP 地址,为什么我说至少一个呢? 一台设备有多少个网卡就有多少个 mac 地址,当然也可以拥有多个 IP 地址。

想要一个 IP 地址,有两种方式?

1.自己造一个

2.申请一个

怎么自己造呢?
如果你是简单的家庭网络,你可以通过设置静态 IP 的方式,所谓的静态 IP ,就是你自己手填一个,但是要保证你填的 IP 是对的,一般来说,不了解网络的人会觉得这样很麻烦,就像是一个没有登记就进房间的住的人,很容易房管就把你住的房间给别人了,造成了冲突,还有另一个问题。你长期拥有这个房间,但是又不住,占着茅坑不lashi,这样也不行啊,大家都这么搞,就太浪费房间资源了。所以这种静态 IP 设置的方式,自己玩玩就好了,还是需要专业的 service 来处理比较好。

如何申请:

在这里插入图片描述

  用租房的栗子来讲 DHCP 再合适不过了,所以的 DHCP,就是动态主机配置协议。强调的就是这个动态,如果有一台新机器到来,就会跟 DHCP 服务器申请拿一个 IP 地址,这个IP地址是有个有效期的,也就是租约,当租约过了一半,如果你还想用就得续约,没有续约的话,这个IP地址就会被回收,然后给下一个有需要的孩子。这跟我们现实中的租房是一样的道理。这种方式可以更大的利用已有的IP地址,也可以避免 IP 冲突导致的问题,由于可以设置静态IP,当 DHCP 服务器出现问题时,不要慌张,暂时手动设置一下 IP 地址也是可以上网的。一个后端程序员这点技能还是需要的,不要动不动就找网管。

IP 层有关的知识还有很多。考虑到这篇文章已经很长了,就放到下一篇吧,有时间我再写一篇关于 IP 寻址的文章帮助大家增强网络通讯的基本认识。

  相关解决方案