了解完网络协议,咱们会发现,网络通讯的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址。linux
那么 IP 地址是怎么来的,又是怎么没的?MAC 地址与 IP 地址又有什么区别?服务器
这回答上面问题前,先热下身,你们知道如何查看本机的 IP 吗?这个问题,即使是没有专业学过计算机的人,只要折腾过电脑,重装过系统,大多都会知道答案:在 Windows 下是 ipconfig,在 linux 下是 ifconfig。网络
在 Windows 下输入 ipconfig,咱们会看到这个界面:
命令行
在 linux 下输入 ifconfig,咱们会看到这个界面:
设计
能够看到,不管是在 Windows 仍是在 linux 下,输入相关命令都能显示出这台机器上全部的网卡。大部分的网卡都会有一个 IP 地址。就像 192.168.1.73 ,就是我本机以太网的 IP 地址。3d
IP 地址是一个网卡在网络世界中的通信地址,至关于咱们现实世界的门牌号码。blog
注意,IP 地址是网卡的通信地址,不是一台机器的通信地址。不少时候,咱们会说一个电脑只有一个 IP 地址,这种说法实质上并不正确,准确的来讲,应该是:ip
一个网卡在同一时段只能有一个 IP 地址,一台机器能够有多个 IP 地址。路由
就像咱们的笔记本,通常都会有线网卡和无线网卡,则有线网卡有一个 IP 地址,无线网卡也有一个 IP 地址。v8
一台机器有多个 IP 地址,那 IP 地址会不会重复呢?其实咱们应该会碰到 IP 地址重复的状况。有时候咱们电脑弹出网络地址冲突,出现没法上网的状况,那多半就是 IP 地址冲突了。
就像上面输出的结果,192.168.1.73 就是一个 IP 地址。这个地址被点(.)分割为四个部分,每一个部分有 8 个 bit,因此 IP 地址总共是 32 位。显然,32 位产生的 IP 地址在当今这个互联网社会,很明显就是"狼多肉少"。因而就有了 IPv6,也就是上面结果中的 fe80::515d:5483:ff4d:6db9/64。这个有 128 位,能知足咱们如今的需求了。至于后面会不会出现 IPv8 ,那就看后面互联网世界的发展了。
咱们应该都据说过,IP 地址分为 A、B、C、D、E 五类。对于 A、B、C 类,主要分两部分,前面一部分是网络号,后面一部分是主机号。
下图是 A、B、C 三类地址所能包含的主机数量。
这里面有个问题,C 类地址包含的主机数量太少,而 B 类地址包含的主机数量又太多,因而就有了一个折中的方式叫作无类型域间选路。
顾名思义,无类型域间选路(CIDR)基本思想是取消地址的分类结构,取而代之的是容许以可变长分界的方式分配网络数。192.168.1.73/24 就是无类型域间选路格式的 IP 地址。这种格式的 IP 地址,将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号。从哪里分呢?若是注意观察的话能够看到,上面地址中有一个斜杠,斜杠后一个数字 24。这个 24 的含义就是,前24 位是网络号,后 8 位是主机号。
继续看上面的表格。表格最右列是私有 IP 地址段。平时咱们在一个局域网内,看到的 IP 地址都是私有 IP 地址。由于这些地址容许组织内部的 IT 人员本身管理和分配,并且还能够重复。因此会出现你局域网的私有 IP 地址段和我局域网的是同样的。
就像咱们上面说的,小明在本身家里给同单元的小伙伴说本身是五单元 101 号,小伙伴能理解,可是他若是这样和小红说,小红就会问,你是哪一个小区的?这里的小区实际上就是公有 IP 地址,而五单元 101 号就是私有 IP 地址。
表格中的 192.168.0.x 是最多见的私有 IP 地址段。就像咱们家里的路由器地址通常是 192.168.0.1 同样。
IP 分配咱们平时应该接触比较少。还记得在大学的时候,刚入学第一件事就是赶忙交网费。交网费时会有一个步骤,网管会让你提供 MAC 地址,而后把 IP 地址和 MAC 地址绑定,这也就是博主在隔壁宿舍没法经过网线上网的缘由。
其实,若是你有相关的知识积累,能够用命令行本身配置 IP 地址。固然,能不能通讯就看你的知识储备量了。
除了命令行配置外,咱们平时应该对于 IP 分配应该都是用的 "拿来主义"。不管是在学校仍是在办公室,都会有网络管理员把分配好的 IP 给你,直接使用就能够了。可是有时候也会好奇,网管是怎么分配 IP 的呢?难不成经过命令行一个个配置?这时候就要用到动态主机配置协议(DHCP)。
这个协议的工做原理是怎样的呢?咱们就拿一台机器新加入一个网络为例,来走一遍 DHCP 的工做流程。
当一台机器新加入一个网络时,确定一脸懵逼,啥状况也不知道,只知道本身的 MAC 地址。没人理你怎么办?那无论三七二十一,先吼一声,告诉全部人,我来了,有人吗?这时候的沟通基本靠"吼"。这一步,咱们称为 DHCP Discover。
新来的机器使用 IP 地址 0.0.0.0 发送了一个广播包,目的 IP 地址是 255.255.255.255。广播包封装在 UDP 里面,UDP 封装在 BOOTP 里面。在这个广播包里,新人大喊:我是新来的(Boot Request),个人 MAC 地址是 xxx,我尚未 IP,谁能给我个 IP 地址?格式就像下面这样:
这时候,网络里的 DHCP Server 就至关于这个局域网的管理员。他知道来了一个"新人",须要给它分配一个 IP 地址,这个过程就是 DHCP Offer。同时,DHCP Server 保留为此机器提供的 IP 地址,从而不会再将相同的 IP 地址分配给其它的机器。而 DHCP Offer 的格式就像下图,里面有给新人分配的地址。
DHCP Server 仍然使用广播地址做为目的地址,由于,此时请求分配的新人尚未本身的 IP 地址。若是一个局域网中有多个 DHCP Server,这台新机器会收到多个 DHCP Offer。
它会选择其中一个 DHCP Offer,通常是最早到达的那个,而且会向网络发送一个 DHCP Request 广播数据表,包中包含客户端的 MAC 地址、接受分配的 IP 地址、提供此 IP 的 DHCP 服务器地址等,并告诉全部的 DHCP Server 它将接受哪一台服务器提供的 IP 地址,告诉其余 DHCP 服务器撤销它们提供的 IP 地址,以便提供给下一个 IP 请求分配者。新人广播包格式以下:
此时,因为尚未获得 DHCP Server 的最后确认,新机器仍然使用 0.0.0.0 为源 IP 地址、255.255.255.255 为目标地址进行广播。
当 DHCP Server 接收到新机器的 DHCP Request 以后,会广播返回给新机器一个 DHCP ACK 消息包,代表已经接受新机器的选择,并将这一 IP 地址分配信息和其余配置信息都放入该广播包,发给新机器。DHCP ACK 格式以下:
新机器收到 DHCP ACK 后,会检测分配的 IP 地址是否可以适应,若是不能使用,它就会给 DHCP Server 发出 DHCP Decline 消息,通知 DHCP Server 禁用这个 IP 地址,而后新机器就开始新的地址申请过程。
在新机器使用 IP 租期超过 50% 时,DHCP Client 会以单播形式向 DHCP Server 发送 DHCP Request 报文来续租 IP 地址。若是 DHCP Client 成功收到 DHCP Server 发送的 DHCP ACK 报文,则按相应时间延长 IP 地址租期;若是没有收到 DHCP Server 发送的 DHCP ACK 报文,则 DHCP Client 继续使用这个 IP 地址。
在新机器使用 IP 租期超过 87.5% 时,DHCP Client 会以广播形式向 DHCP Server 发送 DHCPRequest 报文来续租 IP 地址。若是 DHCP Client 成功收到 DHCP Server 发送的 DHCP ACK 报文,则按相应时间延长 IP 地址租期;若是没有收到 DHCP Server 发送的 DHCP ACK 报文,则 DHCP Client 继续使用这个IP地址,直到 IP 地址使用租期到期时,DHCP Client 才会向 DHCP Server 发送 DHCP Release 报文来释放这个 IP 地址,并开始新的 IP 地址申请过程。
在咱们查询 IP 地址的输出结果中,有一行:
Link encap:Ethernet HWaddr 28:d2:44:ce:77:51
这个被称为 MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。
MAC 地址是一个很容易让人误解的地址。由于 MAC 地址号称全球惟一,不会存在有相同 MAC 地址的网卡。这就很容易让咱们想,既然全球惟一,那网络通讯直接用 MAC 地址不行吗?为何要加个 IP 地址,多封装一层,再去通讯呢?
固然是不行的。咱们想把一个网络包从一个地方传到另外一个地方,除了有肯定的地址外,还须要有定位功能。就像你去广州找博主同样,我只告诉你个人身份证号,你能在广州找到我吗?这种寻找无异于大海捞针。可是若是我告诉你个人详细地址,你就能够直接经过导航找到对应的地址,而后再找到我。
IP 地址在必定程度上就承担了详细地址这种远程地位的功能。MAC 地址更像是身份证号,是一个惟一的标识。它的惟一性设计是为了组网的时候,不一样的网卡放在一个网络里面,不用担忧冲突。
固然,MAC 地址也有必定的定位功能。就像你来到了博主所在的办公室,你能够在办公室喊身份证号是 XXX 的是哪位?博主听到了,就会站起来回答你。可是若是你在博主听不到的地方喊,那确定不会有人应你。这就说明,MAC 地址的通讯范围比较小,仅仅局限在一个子网内。
参考: