网络协议二:MAC地址与IP地址

MAC地址

简介

  1. 每一个网卡都有一个6字节(48bit)的MAC地址(Media Access Control Adress),即MAC地址就是网卡地址
  2. MAC地址全球唯一,固化在了网卡的ROM中,由IEEE802标准规定
    1. 前3字节:OUI(Organizationally Unique Identifier)组织唯一标识符
      1. 由IEEE的注册管理机构分配给厂商
    2. 后3字节:网络接口标识符
      1. 由厂商自行分配
    3. 即:只要同一个厂商生产的网卡,每个网卡的前三个字节的MAC地址是一样的
    4. 举例:

       //组织唯一标识符 网络接口标识符
       40-55-82-0A-8C-6D
      
  3. OUI查询:可以查询出一个MAC地址属于哪个厂商
    1. http://standards-oui.ieee.org/oui/oui.txt
    2. https://mac.bmcx.com

MAC地址的表示格式

  1. windows:40-55-82-0A-8C-6D
  2. Linux、Android、Mac、iOS: 40:55:82:0A:8C:6D
  3. Packet Tracer: 4055.820A.8C6D
  4. 当48位全为1时,代表广播地址: FF-FF-FF-FF-FF-FF
    1. 当发送ARP广播时,发送的数据有:源PC的IP地址-目的PC的IP地址、源PC的MAC地址-FF-FF-FF-FF-FF-FF
    2. 即只要发送到一个PC的数据中目的MAC地址为FF-FF-FF-FF-FF-FF,说明这个发送是ARP广播,是来想目的IP对应的PC索要MAC地址的

MAC地址的操作

  1. 查看MAC地址:ipconfig /all
  2. 修改MAC地址
    1. 更改适配器选项-属性-配置-高级-网络地址
    2. 填写的时候需要把减号(-)去掉
  3. 有时可以通过修改MAC地址蹭网
  4. 疑问:MAC地址不是固定写死在网卡硬件中的吗? 为何可以修改呢?
    1. 网卡中的MAC地址是固定地址,操作系统也可以设置虚拟的MAC地址
    2. 如果操作系统没有设置MAC地址,那么就用网卡的固定MAC地址,如果设置则使用设置地址

MAC地址的获取

  1. 当不知道对方主机的MAC地址时,可以通过发送ARP广播获取对方的MAC地址
    1. 获取成功后,会缓存IP地址、MAC地址的映射信息(在PC本机中缓存),俗称:ARP缓存
    2. 通过ARP广播获取的MAC地址,属于动态(dynamic)缓存
    3. 存储时间比较短(默认是2分钟),过期了就自动删除
  2. 相关命令(PC的终端查询)

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

ARP

  1. ARP(Adress Resolution Protocol),译为:地址解析协议
    1. 作用: 通过IP地址获取MAC地址
  2. RARP(Reverse Adress Resolution Protocol),译为:逆地址解析协议
    1. 使用与ARP相同的报头结构
    2. 作用与ARP相反,用于将MAC地址转换为IP地址
    3. 后来被BOOTP、DHCP所取代

ICMP

  1. ICMP(Internet Control Message Protocol),译为:互联网控制消息协议
    1. IPv4中的ICMP被称作ICMPv4,IPv6中的ICMP则被称作ICMPv6
    2. 通常用于返回错误信息
      1. 比如 值过期、目的不可达
    3. ICMP的错误消息总是包括了源数据并返回给发送者

IP地址

  1. 简介
    1. IP地址(Internet Protocol Address):互联网上的每一个主机都有一个IP地址
      1. 最初是IPv4版本,32bit(4字节),2019年11月25日,全球的IP地址已经用完
      2. 后面推出了IPv6版本,128bit(16字节)
  2. IP地址的组成
    1. IP地址由2部分组成:网络标识(网络ID)、主机标识(主机ID)
      1. 同一网段的计算机,网络ID相同
      2. 通过子网掩码(subnet mask)可以计算出网络ID:子网掩码 & IP地址
    2. 主机所在的网段 = 网络ID = 子网掩码 & IP地址
    3. 计算机和其他计算机通信前,会先判断目标主机和自己是否在同一网段
      1. 同一网段:不需要由路由器进行转发
      2. 不同网段:交由路由器进行转发
    4. 举例:

       IP地址:  130.168.1.10
       子网掩码: 255.255.0.0
       网段:    130.168.0.0
       主机ID为: 0.0.1.10
      

IP地址的分类

  1. A类地址:默认子网掩码是255.0.0.0
    1. 前8位为网络ID,而且必须以0开头;后24位用来分配主机ID
     8 bit        24 bit
     网络ID        主机ID
     0开头  
    
  2. B类地址:默认子网掩码是255.255.0.0
    1. 前16位为网络ID,而且必须以10开头;后16位用来分配主机ID
     16bit       16bit
     网络ID       主机ID
     10开头 
    
  3. C类地址:默认子网掩码是255.255.255.0
    1. 前24位为网络ID,而且必须以110开头;后8位用来分配主机ID
     24bit       8bit
     网络ID       主机ID
     110开头 
    
  4. D类地址:以1110开头,多播地址
  5. E类地址:以1111开头,保留为今后使用
  6. 只有A\B\C类地址才能分配给主机
    1. 主机ID为全0,表示主机所在的网段: 192.168.1.0
    2. 主机ID为全1,表示主机所在网段的全部主机(广播)
      1. 可以尝试用ping给某个网段的全部主机发数据: ping 192.168.1.255 图1

A类地址

  1. 网络ID
    1. 0不能用,127作为保留网段。其中127.0.0.1是本地环回地址(Loopback),代表本机地址
    2. 可以分配给主机的
      1. 第1部分的取值范围是:1~126
  2. 主机ID
    1. 第2、3、4部分的取值范围是:0~255
    2. 每个A类网络能容纳的最大主机数是:256 * 256 * 256 – 2 = 2的24次方 – 2 = 16777214(2:主机ID全为0,代表网段; 主机ID全为1代表整个网段的主机,这两个不能分配给主机)

B类地址

  1. 网络ID
    1. 可以分配给主机的
    2. 第1部分的取值范围是:128~191
    3. 第2部分的取值范围是:0~255
  2. 主机ID
    1. 第3、4部分的取值范围是:0~255
    2. 每个B类网络能容纳的最大主机数是:256 * 256 – 2 = 2的16次方 – 2 = 65534

C类地址

  1. 网络ID
    1. 可以分配给主机的
    2. 第1部分的取值范围是:192~223
    3. 第2、3部分的取值范围是:0~255
  2. 主机ID
    1. 第4部分的取值范围是:0~255
    2. 每个C类网络能容纳的最大主机数是:256 – 2 = 254

D类地址、E类地址

  1. D类地址:没有子网掩码,用于多播(组播)地址
    1. 第1部分取值范围是:224~239
  2. E类地址:保留为今后使用
    1. 第1部分取值范围是:240~255

子网掩码

子网掩码的CIDR表示方法

  1. CIDR(Classless Inter-Domain Routing):无类别域间路由
  2. 子网掩码的CIDR表示方法
    1. 192.168.1.100/24,代表子网掩码有24个1,也就是255.255.255.0
    2. 123.210.100.200/16,代表子网掩码有16个1,也就是255.255.0.0
  3. 计算工具:https://www.sojson.com/convert/subnetmask.html
  4. 注意:子网与子网掩码
    1. 子网就是网络ID,即主机部分全部为0
    2. 子网掩码就是网络ID所占据的位全部为1,主机部分全部为0

为什么要进行子网划分?

  1. 如果需要让200台主机在同一个网段内,可以分配一个C类网段,比如192.168.1.0/24
    1. 共254个可用IP地址:192.168.1.1~192.168.1.254
    2. 多出54个空闲的IP地址,这种情况并不算浪费资源
  2. 如果需要让500台主机在同一个网段内,那就分配一个B类网段,比如191.100.0.0/16
    1. 共65534个可用IP地址:191.100.0.1~191.100.255.254
    2. 多出65034个空闲的IP地址,这种情况属于极大的浪费资源
  3. 如何尽量避免浪费IP地址资源?
    1. 合理进行子网划分

子网划分

  1. 子网划分:借用主机位作子网位,划分出多个子网
  2. 可用分为
    1. 等长子网划分:将一个网段等分成多个子网,每个子网的可用IP地址数量是一样的
    2. 变长子网划分:每个子网的可用IP地址数量可以是不一样的
  3. 子网划分器:http://www.ab126.com/web/3552.html
  4. 子网划分的步骤
    1. 确定子网的子网掩码长度
    2. 确定子网中第1个、最后1个主机可用的IP地址

等长子网划分

1.C类网段的等长子网划分

图1

C类特点:192.168.0.0/24
前24位是一个网段,后8位是主机地址
  1. 等分成2个子网
    1. 将主机位的最高位也作为网段地址,即第25位,而且取值只能是0、1,正好将192.168.1.0这个网段分成两半,那么网络ID就成了25位,主机ID为7位
    2. 分配好的2个网段地址为:192.168.0.0/25、192.168.0.128/25
    3. 图分析:
      1. A子网:
        1. 子网掩码:255.255.255.128/25
        2. 主机可用IP地址:192.168.0.1~192.168.0.126
      2. B子网
        1. 子网掩码:255.255.255.128/25
        2. 主机可用IP地址:192.168.0.129~192.168.0.254
  2. 等分成4个子网
    1. 将主机位的最高2位也作为网段地址,即第26位,而且取值只能是00、01、10、11这4个值,正好将192.168.1.0这个网段分成4个,那么网络ID就成了26位,主机ID为6位
    2. 分配好的4个网段地址为:192.168.0.0/26、192.168.0.64/26、192.168.0.128/26、192.168.0.192/26
    3. 图分析:
      1. 4个子网的子网掩码都是:255.255.255.192/26
      2. A子网的主机可用IP地址:192.168.0.1~192.168.0.62
      3. B子网的主机可用IP地址:192.168.0.65~192.168.0.126
      4. C子网的主机可用IP地址:192.168.0.129~192.168.0.190
      5. D子网的主机可用IP地址:192.168.0.193~192.168.0.254
  3. 等分成4个子网的广播地址
  4. 等分成8个子网
    1. 同理类推,主机的3个二进制位取值为8个,作为网络ID,等分为8个子网
    2. 图分析:
      1. 4个子网的子网掩码都是:255.255.255.224/27
      2. A子网:192.168.0.1~192.168.0.30
      3. B子网:192.168.0.33~192.168.0.62
      4. C子网:192.168.0.65~192.168.0.94
      5. D子网:192.168.0.97~192.168.0.126
      6. E子网:192.168.0.129~192.168.0.158
      7. F子网:192.168.0.161~192.168.0.190
      8. G子网:192.168.0.193~192.168.0.222
      9. H子网:192.168.0.225~192.168.0.254
2.B类子网划分、A类子网划分

图1

变长子网划分

  1. 如果一个子网地址块的长度是原网段的(1/2)^n,那么
    1. 子网的子网掩码,就是在原网段的子网掩码基础上向右移动增加n个1;比如:如果A子网是原来网段的1/2(二等分),那么子网掩码就是原来的子网掩码255.255.255.0向右移动1位,就是255.255.255.128
    2. 不等长的子网,它们的子网掩码也不同

图1

  1. 假设上图是对192.168.0.0/24进行变长子网划分
    1. C网段:子网掩码是255.255.255.128/25
    2. B网段:子网掩码是255.255.255.192/26
    3. A网段:子网掩码是255.255.255.224/27
    4. D网段:子网掩码是255.255.255.252/30
    5. E网段:子网掩码是255.255.255.252/30
  2. C网段是原网段的1/2,所以255.255.255.0/24向右移动一位是255.255.255.128/25
  3. B网段是原网段的1/4(即(1/2)^2),所以255.255.255.0/24向右移动2位是255.255.255.192/26
  4. 同理,….

问题

  1. 题1:
    1. IP地址1:

       IP地址: 192.168.0.10
       子网掩码: 255.255.255.128
      
    2. IP地址22:

       IP地址: 192.168.0.132
       子网掩码: 255.255.255.128
      
    3. 请问IP地址1与IP地址2能直接通信吗?

      1. 不能,由子网掩码可以看出,子网掩码为25位,即将C类子网2等分,这两个IP地址分别在不同的网段,IP地址1在192.168.0.0这个网段,IP地址2在192.168.0.128这个网段
  2. 重点:这2台设备之间能正常通信么?PC1: 192.168.0.10/24、PC2:192.168.10.10/16
    1. 答案是不能正常通信
    2. PC1的网段地址为: 192.168.0.0,子网掩码为255.255.255.0
    3. PC2的网段地址为: 192.168.0.0,资额昂掩码为255.255.0.0
    4. PC1与PC2属于同一网段,表面看起来能正常通信,但是仍然不能通信
    5. 两台PC进行通信的前提是:PC1先判断PC2的IP地址是否跟自己在同一个网段,判断的方法是用PC1的子网掩码(因为拿不到PC2的子网掩码,自能用自己的) & PC2的IP地址得出网段地址与自己的网段地址进行比较
    6. PC1计算PC2的网段地址:255.255.255.0 & 192.168.10.10 = 192.168.10.0;PC1的网段地址为192.168.0.0,因此判断不在同一网段,因此不能正常通信。
  3. 题2: 请问10.172.168.1/24是A类、还是B类、C类地址?
    1. 是A类地址划分的子网段
    2. 24表示子网掩码24位
    3. 10代表A类地址,在0-127之间

总结

  1. IP地址 = 网络ID + 主机ID
  2. IPV4地址为32位
  3. 子网掩码:就是用来划分网段的,规定哪些位置为网络ID位,哪些位置为主机ID位置
  4. 子网掩码的表示形式:网络ID位全部为1,主机ID位全部为0
  5. 网段地址=网络ID+主机ID全部为0 = 子网掩码 & IP地址

超网

  1. 超网:跟子网反过来,它是将多个连续的网段合并成一个更大的网段
  2. 需求:原本有200台计算机使用192.168.0.0/24网段,现在希望增加200台设备到同一个网段
    1. 200台在192.168.0.0/24网段,200台在192.168.1.0/24网段
    2. 合并192.168.0.0/24、192.168.1.0/24为一个网段:192.168.0.0/23(子网掩码往左移动1位),此时的子网掩码为255.255.128.0 ,主机为变为9位,可容纳500多台PC
  3. 思考:
    1. 192.168.0.255/23这个IP地址,可以分配给计算机使用么?
      1. 可以,因为网络ID为23位,子网掩码为255.255.128.0,网段地址为192.168.0.0,广播地址为192.168.1.255,而不是192.168.0.255

合并4个网段

  1. 子网掩码向左移动2位,可以合并4个网段
  2. 将192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24合并为192.168.0.0/22网段

图1

合并网段的规律

  1. 假设n是2的k次幂(k≥1)
    1. 子网掩码左移k位能够将能够合并n个网段
    2. 如果第一个网段的网络号能被n整除,那么由它开始连续的n个网段,能通过左移k位子网掩码进行合并
  2. 比如
    1. 第一个网段的网络号以二进制0结尾,那么由它开始连续的2个网段,能通过左移1位子网掩码进行合并
    2. 第一个网段的网络号以二进制00结尾,那么由它开始连续的4个网段,能通过左移2位子网掩码进行合并
    3. 第一个网段的网络号以二进制000结尾,那么由它开始连续的8个网段,能通过左移3位子网掩码进行合并

判断一个网段是子网还是超网

  1. 首先
    1. 看看该网段的类型,是A类网络、B类网络、C类网络?
    2. 默认情况下,A类子网掩码的位数是8,B类子网掩码的位数是16,C类子网掩码的位数是24
  2. 然后
    1. 如果该网段的子网掩码位数比默认子网掩码多,就是子网
    2. 如果该网段的子网掩码位数比默认子网掩码少,则是超网
  3. 比如
    1. 25.100.0.0/16是一个A类子网
    2. 200.100.0.0/16是一个C类超网
Table of Contents