计算机网络<三>——MAC地址、IP地址、子网掩码

1,058 阅读9分钟

MAC地址

简介

每个网卡都有一个全球唯一的6字节(48bit)的MAC地址,其对应的每一个数字都是用16进制来表示的。MAC地址又可以分成两部分——组织唯一标识符(由IEEE机构分配给厂商)和网络接口标识符(由厂商自由分配)

查看MAC地址

cmd中使用ipconfig /all命令可以查看到自己电脑的MAC地址

MAC地址的表示格式

MAC地址有很多的表示格式,比如在windows操作系统中,MAC地址是以-号连接的,而在LinuxMac等操作系统中,是以:连接的

MAC地址中的48位二进制数全为1时也就是FF-FF-FF-FF-FF-FF时,代表的是发送ARP广播的地址

修改MAC地址

路径:网络状态 - 更改适配器选项 - 属性 - 配置 - 高级 - 网络地址

因为我们和其他设备进行通信的时候需要提供自己的MAC地址,如果你想要伪装自己,不去使用网卡中的默认地址的话,可以到下图所示的地方进行修改,可以帮助我们欺骗检测MAC址的设备

有个需要注意的地方就是填写模拟MAC地址的值时需要把-号给去掉,意思就是将所有字符连着写才可以被正确识别

MAC地址的获取

  • 当我们不知道对方主机的MAC地址时,可以通过发送ARP广播获取对方的MAC地址

    • 获取成功后,计算机可以缓存IP地址和MAC地址的映射信息,俗称ARP缓存
    • 通过ARP广播获取的MAC地址,属于动态缓存
      • 存储时间比较短(默认是2分钟),过期了就会自动删除
  • 相关命令

    • arp -a [主机地址]:查询ARP缓存
    • arp -d [主机地址]:删除ARP缓存
    • arp -s 主机地址 MAC地址:增加一条缓存信息(这是静态缓存,存储时间较久,不同系统的存储时间不同)

IP地址

简介

互联网上的每一个主机都有一个IP地址,最初是IPv4版本,用32bit4字节)表示,但是到2019年11月25日,全球的IP地址已经用完了,所以后面又推出了IPv6版本,总共用128bit也就是16字节来表示IP地址

IP地址的组成

IP地址由两部分组成:网络标识(网络ID——这个代表了计算机在哪一个网段)、主机标识(主机ID——计算机在该网段下的唯一标识)

  • 同一网段下的计算机,网络ID是相同的
  • 通过子网掩码可以计算出网络ID也就是网段:子网掩码 &(按位与) IP地址
    • 回顾一下按位与运算符,只要两个对应的数字都是1,结果才是1,其余情况都是0

如下图所示,计算出来的子网掩码是192.168.1.0,所以IP地址前面的192.168.1表示的是网络ID,后面的10表示的是主机ID。所以IP的标识不能为0是有原因的,因为IP标识如果都是0的话,那么它表示的就是网段而并非是某台计算机的IP地址。

注意:单纯一个IP地址我们是不知道它属于哪一个网段,因为网段需要由IP地址和子网掩码计算得出,比如下图,子网掩码如果是255.255.0.0的话,IP地址所对应的网段就会变成130.168.0.0

思考一个问题:在上幅图的网段下,一共可以使用多少个IP地址?

根据排列组合的知识,总共有256 * 256的组合供我们选择,但是我们要排除IP标识全是0的情况,因为这代表的是网段;同时,我们也要排除IP地址全是1的情况,即130.168.255.255这种情况,因为这代表的是该网段下的所有主机(一般我们在发送ARP广播的时候会用到),所以这道题最终的答案是 256 * 256 - 2

IP地址的分类

  1. A类地址
  • 网络ID以0开头,但不能全部为0;其中127要作为保留网段,因为其对应着本地环回地址127.0.0.1
  • 默认的子网掩码是255.0.0.0

  1. B类地址
  • 网络ID以10开头
  • 默认的子网掩码是255.255.0.0

  1. C类地址
  • 网络ID以110开头
  • 默认的子网掩码是255.255.255.0

  1. D类和E类地址

子网掩码的CIDR表示方法

比如123.210.100.200/16,在该例子中,代表子网掩码中有16个1,也就是255.255.0.0。所以CIDR表示法也就是将子网掩码中有多少个1用十进制数字表示出来而已

子网划分

简介

子网划分:借用主机位作子网位,划分出多个子网,可分成等长子网划分以及变长子网划分

  • 等长子网划分:将一个网段等分成多个子网,每个子网段可用的IP地址数量是一样的
  • 变长子网划分:每个子网的可用IP地址数量可以是不一样的

为什么要进行子网划分?

场景一:如果需要让200台主机在同一个网段内,可以分配一个C类网段,比如192.168.1.0/24,因为一个C类网段有254个可用的IP地址,这样分配下来也不算浪费

场景二:如果需要让500台主机在同一个网段内,那就要分配一个B类网段,比如192.100.0.0/16,因为B类网段共有65534个可用的IP地址,这样子就会多出大量空闲的IP地址,属于极度浪费

为了尽量的避免浪费IP地址,我们需要合理的进行子网划分

等长子网划分

本来有一个C类网段,192.168.0.0/24,我们要把它划分成两个子网段的话,子网掩码就要往后面多移一位,也就是说现在子网掩码对应了25个1,分成了两个子网段192.168.0.0/25192.168.0.128/25,千万不要搞错了,虽然这两个子网的网段号不一样,但是他们的子网掩码对应的都是255.255.255.128,因为网段是由IP地址按位与(&)上子网掩码得到的

A子网可用的IP地址是多少个呢?

总共有2^7 = 128中组合方式,但是全0代表的是该子网的网段号,全1代表的是该子网下的所有计算机(广播时用的),所以能够分配的IP地址只有128 - 2 = 126个,对应的IP地址为192.168.0.1 ~ 192.168.0.126

B子网也一样的道理,它的IP取值范围是192.168.0.129 ~ 192.168.0.254,和A子网一样,能容纳的计算机为126

规律:

  • 如果一个子网是原来网络的1/(2^n),那么子网掩码就要往后面移动n
  • n个子网,能够使用的IP地址数量就是 IP所有的组合方式 - 2 * n,因为每一个子网全0和全1对应的地址都不能使用

不管你是想分成4个子网、8个子网还是更多的子网,还是想去将A类网段还是B类子网,划分方式都是一样的

模拟通信

现在有两个IP地址192.168.0.10/25192.168.0.80/25,他们对应的子网掩码都是255.255.255.128,不难发现他们都在192.168.0.0这个网段下,所以可以不需要路由器直接进行通信

如果我们将第二个计算机IP地址改为192.168.0.200之后,两个计算机直接通信就会失败,因为该IP地址所在的网段是192.168.0.128,和第一台计算机已经不是同一个网段了,所以想要通信就必须要借助路由器去跨网段转发

如何判断IP地址属于哪一类?

比如10.172.168.1/24这个地址,我们看到了子网掩码是24自然就对应到了255.255.255.0,刚好是C类地址对应的默认子网掩码,但这个答案是错误的!

我们判断IP地址是属于哪一类并不是去看子网掩码,每一类地址最本质的区别就是网络ID是以什么开头,A类地址的网络ID以0开头,B类以10开头...,每一类地址对应的第一部分值范围都是不一样的,该例子很明显就属于A类地址。

至于后面的子网掩码24怎么解释呢?

我们知道A类地址默认对应的子网掩码是255.0.0.0也就是8,但是它可能是A类地址下面的子网啊,只要子网掩码超过8,那么该地址就是A类地址下的子网

变长子网划分

如果一个子网地址块的长度是原网段的(1/2)^n,那么子网的子网掩码就是在愿望段的子网掩码基础上增加n1,而且不等长的子网,他们的子网掩码也不相同,这样我们就可以将同一个网段划分成多个不同长度的子网

比如下图中C网段的网段号是192.168.0.128/25,B网段的网段号是192.168.0.64/25

思考题

192.168.0.10/24192.168.10.10/16这两个计算机可以正常通信吗?

之前我们讲过,计算机在通信之前会先检测自己的网段是否和对方相同来决定用哪种方式来进行通信。但我们在与另一台计算机通信之前,其实只能知道对方的IP地址,并不知道对方的子网掩码,所以无法正确的算出对方真正的网段号,我们只能够拿自己的子网掩码算出对方预估的网段号

以这道题为例,其实两个计算机都是在192.168.0.0这个网段下的。在计算机0->计算机1时,计算机0自己的网段号是192.168.0.0,通过自己的子网掩码计算出来的计算机1对应的网段号是192.168.10.0,所以它会先获取网关对应的MAC地址,但我们这里都没有路由器,所以肯定通信会失败,请求消息传递不到计算机1中

但计算机1向计算机0发送请求消息时,根据自己的子网掩码算出计算机0的网段号和自己一样,所以可以正常的将请求消息发送过去,但是计算机0是不能够正常将响应消息返回给计算机1,理由就是刚刚讲过的原因,计算机0会将计算机1的网段识别为和自己不相同