了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址。

那么 IP 地址是怎么来的,又是怎么没的?MAC 地址与 IP 地址又有什么区别?

这回答上面问题前,先热下身,大家知道如何查看本机的 IP 吗?这个问题,即便是没有专业学过计算机的人,只要折腾过电脑,重装过系统,大多都会知道答案:在 Windows 下是 ipconfig,在 linux 下是 ifconfig。

在 Windows 下输入 ipconfig,我们会看到这个界面:

在 linux 下输入 ifconfig,我们会看到这个界面:

IP 地址

可以看到,无论是在 Windows 还是在 linux 下,输入相关命令都能显示出这台机器上所有的网卡。大部分的网卡都会有一个 IP 地址。就像 192.168.1.73 ,就是我本机以太网的 IP 地址。

IP 地址是一个网卡在网络世界中的通讯地址,相当于我们现实世界的门牌号码。

注意,IP 地址是网卡的通讯地址,不是一台机器的通讯地址。很多时候,我们会说一个电脑只有一个 IP 地址,这种说法实质上并不正确,准确的来说,应该是:

一个网卡在同一时段只能有一个 IP 地址,一台机器可以有多个 IP 地址。

就像我们的笔记本,一般都会有线网卡和无线网卡,则有线网卡有一个 IP 地址,无线网卡也有一个 IP 地址。

一台机器有多个 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 地址段。平时我们在一个局域网内,看到的 IP 地址都是私有 IP 地址。因为这些地址允许组织内部的 IT 人员自己管理和分配,而且还可以重复。所以会出现你局域网的私有 IP 地址段和我局域网的是一样的。

就像我们上面说的,小明在自己家里给同单元的小伙伴说自己是五单元 101 号,小伙伴能理解,但是他如果这样和小红说,小红就会问,你是哪个小区的?这里的小区实际上就是公有 IP 地址,而五单元 101 号就是私有 IP 地址。

表格中的 192.168.0.x 是最常见的私有 IP 地址段。就像我们家里的路由器地址一般是 192.168.0.1 一样。

IP 分配与释放

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 地址申请过程。

MAC 地址

在我们查询 IP 地址的输出结果中,有一行:

Link encap:Ethernet HWaddr 28:d2:44:ce:77:51

这个被称为 MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。

MAC 地址是一个很容易让人误解的地址。因为 MAC 地址号称全球唯一,不会存在有相同 MAC 地址的网卡。这就很容易让我们想,既然全球唯一,那网络通信直接用 MAC 地址不行吗?为什么要加个 IP 地址,多封装一层,再去通信呢?

当然是不行的。我们想把一个网络包从一个地方传到另一个地方,除了有确定的地址外,还需要有定位功能。就像你去广州找博主一样,我只告诉你我的身份证号,你能在广州找到我吗?这种寻找无异于大海捞针。但是如果我告诉你我的详细地址,你就可以直接通过导航找到对应的地址,然后再找到我。

IP 地址在一定程度上就承担了详细地址这种远程地位的功能。MAC 地址更像是身份证号,是一个唯一的标识。它的唯一性设计是为了组网的时候,不同的网卡放在一个网络里面,不用担心冲突。

当然,MAC 地址也有一定的定位功能。就像你来到了博主所在的办公室,你可以在办公室喊身份证号是 XXX 的是哪位?博主听到了,就会站起来回答你。但是如果你在博主听不到的地方喊,那肯定不会有人应你。这就说明,MAC 地址的通信范围比较小,仅仅局限在一个子网内。

参考:

  1. 刘超-趣谈网络协议系列课;
  2. 百度百科-DHCP 词条;
  3. 百度百科-CIDR 词条;

网络协议 2 - IP 是怎么来,又是怎么没的?的更多相关文章

  1. JavaWeb 获取请求网络协议、IP、端口号、项目根路径

      JavaWeb 获取请求网络协议.IP.端口号.项目根路径 CreateTime--2018年6月1日16点32分 Author:Marydon 1.需求 在项目中,需要使用Java向本程序发送r ...

  2. js 获取请求网络协议、IP、端口号、项目名称

      js 获取请求网络协议.IP.端口号.项目名称 CreationTime--2018年6月19日15点54分 Author:Marydon /** * 获取url请求前缀 * @return ht ...

  3. 网络协议 2 - IP 地址和 MAC 地址

    了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址. 那么 IP 地址是怎么来的,又是怎么没的?MAC 地址与 IP 地址又有什么区别? 这回答上面问题前 ...

  4. 网络协议TCP/IP、IPX/SPX、NETBEUI简介

    网络中不同的工作站,服务器之间能传输数据,源于协议的存在.随着网络的发展,不同的开发商开发了不同的通信方式.为了使通信成功可靠,网络中的所有主机都必须使用同一语言,不能带有方言.因而必须开发严格的标准 ...

  5. 【网络协议】IP协议、ARP协议、RARP协议

    IP数据报 IP是TCP/IP协议族中最核心的协议,全部的TCP.UDP.ICMP.IGMP数据都以IP数据报的格式传输.IP仅提供尽力而为的传输服务.假设发生某种错误.IP会丢失该数据.然后发送IC ...

  6. 网络协议 13 - HTTPS 协议:加密路上无尽头

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

  7. 网络协议 12 - HTTP 协议:常用而不简单

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

  8. 网络协议 11 - Socket 编程(下):眼见为实耳听为虚

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

  9. 网络协议 10 - Socket 编程(上):实践是检验真理的唯一标准

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

随机推荐

  1. ArcGIS中CGCS2000投影坐标数据转CGCS2000地理坐标数据

    拿到一批数据是CGCS2000投影坐标数据(单位:米),需要转成CGCS2000地理坐标数据(单位:经纬度). 在ArcGIS10.2.2中操作如下: 1.工具箱中选择“Project”工具,如下: ...

  2. PTA_Have fun with numbers(C++)

    #include<iostream> #include<cstring> using namespace std; int main() { ; ]="; ]={}, ...

  3. babel分析

    现在都用 ES6 新语法以及 ES7 新特性来写应用了,但是浏览器和相关的环境还不能友好的支持,需要用到 Babel 转码器来转换成 ES5 的代码 相信大家都看到过如下的名词: babel-pres ...

  4. 远程服务器数据交互技术:rsync,scp,mysqldump

    远程服务器间数据文件交互,可用技术:rsync,scp 速度:rsync是非加密传输,比scp快 安全:scp为加密传输 备份体量:rsync只更新差异部分,可以做增量和全量备份.scp为全量 传输方 ...

  5. MFC学习RepositionBars

    学习过程中用到了就找了下资料 https://blog.csdn.net/u012372584/article/details/50718968

  6. DW1000 用户手册中文版 附录3:双向测距(Two-Way Ranging)

    由于已经在wode中排版无法直接复制到博客中,故本节博客发布使用了图片. 论坛可下载PDF  http://bphero.com.cn/forum.php?mod=viewthread&tid ...

  7. linux的软件安装方式总结

    Linux系统中软件的“四”种安装原理详解:源码包安装.RPM二进制安装.YUM在线安装.脚本安装包   一.Linux软件包分类 1.1 源码包 优点: 开源,如果有足够的能力,可以修改源代码: 可 ...

  8. deepin 开机进入 initramfs,无法开机

    原因 这个问题多是由于不正常关机造成文件系统出问题导致的 解决 fsck -t ext4 /dev/sda6 这个命令用于修复磁盘,一直选择y即可. 如果sda6 不行就换位sda1 再试. 执行完后 ...

  9. 真正的ddos防御之道,简单干脆有效!

    话说,30G 就各种发博客 BB,唉,坦白说 ,博客园团队真心没见过世面 来 各位 先看图 啥意思呢? 就是哥的 最高防御是 600G.  没错,基本对当时的游戏没啥大的影响,10秒内恢复. 因为时间 ...

  10. MySQL 中 having 和 where 的区别

    区别一: where 是数据从磁盘读入内存时候一条一条判断的 having 是将所有数据读入内存,在分组统计前,根据having的条件再将不符合条件的数据删除 区别二: having 子句可以使用字段 ...