了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念: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 地址的通信范围比较小,仅仅局限在一个子网内。

欢迎添加个人微信号:Like若所思。

欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!

网络协议 2 - IP 地址和 MAC 地址的更多相关文章

  1. 为什么同时需要IP地址和MAC地址

    每个以太网设备在出厂时都有一个唯一的MAC地址,为什么还需要为每台主机再分配一个IP地址?或者说每台主机都分配唯一的IP地址,为什么还要在网络设备(如网卡,集线器,路由器等)生产时内嵌一个唯一的MAC ...

  2. IP,IP地址,mac地址

    IP地址与IP是两个不同的概念.单独讲IP,是指IP协议 IP地址分为三类:单播地址(目的为单个主机):多播地址(目的端为同一组的所有主机):广播地址(目的端为网络上所有给定的主机) ip地址由网络和 ...

  3. IP地址、MAC地址及端口

    概述: IP 是地址,有定位功能(网与网的通讯)     (在逻辑上唯一标识一台电脑)(网络层) MAC 是身份证,无定位功能(在子网干活)(在物理上唯一标识一台电脑) (链路层) 首先是如何查看ip ...

  4. 关于IP地址与MAC地址(网卡硬件地址)的区别小谈

    IP地址是指Internet协议使用的地址,而MAC地址是Ethernet协议使用的地址. IP地址与MAC地址之间并没有什么必然的联系,MAC地址是Ethernet NIC(网卡)上带的地址,为48 ...

  5. IP地址和MAC地址绑定的必要性

    计算机网络是一个共通的网络,世界上任何计算机都可以互相访问. 实现的原理基于网络通讯的互联网交互五层模型. 计算机网络的历史发展 当计算机网络技术初始利用的时代,几台计算机通过集线器连接,就可以实现网 ...

  6. 计算机网络之IP地址与MAC地址

    IP地址 IP地址(Internet Protocol Address): 缩写为IP Adress,是一种在Internet上的给主机统一编址的地址格式,也称为网络协议(IP协议)地址. 它为互联网 ...

  7. 计算机网络参考模型,IP地址及MAC地址查看方法,数据包封装过程

    分层思想 首先,计算机网络参考模型,是基于分层思想而出现的.分层思想,就是将复杂流程分解为几个功能单一的子过程. 优点: 可以让整个流程更加清晰, 让复杂问题简单化, 更容易发现问题,并真对性的解决问 ...

  8. java获取服务器IP地址及MAC地址的方法

    这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下   本文实例讲述了 ...

  9. 转:数据包经由路由转发时源、目的IP地址及MAC地址变化情况

    数据包经由路由转发时源.目的IP地址及MAC地址变化情况.  IP数据包经由路由转发的时候源ip,目的ip,源MAC,目的mac是否发生改变,如何改变?   A—–(B1-B2)—–(C1-C2)—— ...

随机推荐

  1. 如何给div、p添加onload事件?

    前提 其实只有 <body>.<frame>.<iframe>.<img>.<link>.<script>.<style& ...

  2. JavaScript 基于HTML5 canvas 获取文本占用的像素宽度

    基于HTML5 canvas 获取文本占用的像素宽度   by:授客 QQ:1033553122 直接上代码   // 获取单行文本的像素宽度 getTextPixelWith(text, fontS ...

  3. 高版本Visual Studio和低版本ArcGIS共存 工具箱没有控件的解决方法

    转载请声明.博客园/B站/CSDN/知乎/小专栏 @秋意正寒 欢迎访问小专栏,更多WebGIS开发(Cesium等)经验分享:https://xiaozhuanlan.com/gishome 众所周知 ...

  4. 群晖NAS再再折腾

    问题 最近电信把我的公网地址收回去了,之前做好的网络端口映射失效了,在公司已经不能愉快地访问家里的网络.原先网络结构示意图如下: (直接访问方案网络结构图)   只需要对电信光猫(也是个路由器)和家用 ...

  5. 使用SC命令操作(安装、开启、配置、关闭、删除)Windows下的服务

    目录 一.直接使用cmd命令行操作windows服务 二.使用bat批处理-操作windows服务 一.直接使用cmd命令行操作windows服务 1.安装服务 sc create 服务名 binPa ...

  6. 【重学Node.js 第5篇】部署项目到腾讯云服务器

    课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https://github.com/hellozhangran ...

  7. Java题库——Chapter16 JavaFX UI组件和多媒体

    Chapter 16 JavaFX UI Controls and Multimedia Section 16.2 Labeled and Label1. To create a label with ...

  8. oracle中创建用户、角色、权限、表空间简单使用

    一.数据库用户 创建数据库用户 create user 用户名 identified by 密码; 授权 grant 权限名 to 用户名; 查看当前用户权限 select * from sessio ...

  9. Docker 私服Registry简介与使用Docker-Compose安装Registry

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  10. Burp Suite渗透操作指南 【暴力破解】

    1.1 Intruder高效暴力破解 其实更喜欢称Intruder爆破为Fuzzing.Intruder支持多种爆破模式.分别是:单一字典爆破.多字段相同字典爆破.多字典意义对应爆破.聚合式爆破.最常 ...