小码哥《网络协议从入门到底层原理》笔记(三):MAC地址、IP地址

1,386 阅读6分钟

我的Github地址

小码哥《恋上数据结构与算法》笔记

极客时间《iOS开发高手课》笔记

iOS大厂面试高频算法题总结

iOS面试资料汇总

MAC地址

  • 每一个网卡都有一个6字节(48bit)的MAC地址(Media Access Control Address)
  • 全球唯一, 固化在了网卡的ROM中, 由IEEE802标准规定
    • 前3字节: OUI(Organizationally Unique Identifier), 组织唯一标识符(代表网卡的生产厂家),由IEEE的注册管理机构分配给厂商
    • 后3字节: 网络接口标识符,由厂商自行分配

MAC地址的表示格式

  • Windows
    • 40-55-82-0A-8C-6D
  • Linux, Android, Mac, iOS
    • 40:55:82:0A:8C:6D
  • Packet Tracer
    • 4055.820A.8C6D

获取MAC地址

  • 当48位全为1时, 代表广播地址
    • FF-FF-FF-FF-FF-FF
  • 当不知道对方主机的MAC地址时, 可以通过发送ARP广播获取对方的MAC地址
    • 获取成功后, 会缓存IP地址, MAC地址的映射信息, 俗称ARP缓存
    • 通过ARP广播获取的MAC地址, 属于动态(dynamic)缓存
    • 存储时间比较短(默认是2分钟), 过期了就自动删除

相关命令

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

IP地址

  • IP地址(Internet Protocol Address):互联网上的每一个主机都有一个IP地址
  • 最初是IPv4版本,32bit(4字节),2019年11月25日, 全球的IP地址已经用完
  • 后面推出了IPv6版本,128bit(16字节)

IP地址的组成

  • IP地址按照功能可以分为2部分:网络标识(网络ID)主机标识(主机ID)
    • 同一网段的计算机,网络ID相同
    • 通过子网掩码(subnet mask)可以计算出网络ID: 子网掩码 & IP地址
    • 网络ID:192.168.1
    • 主机ID:0

IP地址的分类

  • A类地址:默认子网掩码是255.0.0.0
  • B类地址:默认子网掩码是255.255.0.0
  • C类地址: 默认子网页码是255.255.255.0
  • D类地址:以1110开头,多播地址
  • E类地址:以1111开头,保留为今后所用
  • 只有A、B、C类地址才能分配给主机
    • 主机ID全为0,表示主机所在的网段
    • 主机ID全为1,表示主机所在网段的广播地址

A类地址

  • 网络ID

    • 0不能用,127作为保留网段。其中127.0.0.1是本地环回地址(Loopback),代表本机地址
    • 可以分配给主机的
      • 第一部分的取值范围:1~126
  • 主机ID

    • 2,3,4部分的取值范围是0-255
    • 每个A类网络能容纳的最大主机数是:256 * 256 * 256 - 2 = 2的24次方 - 2 = 16777214

B类地址

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

C类地址

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

D类地址

  • 没有子网掩码,用于多播(组播)地址
  • 1部分的取值范围:224~239

E类地址

  • 保留为今后使用
  • 1部分的取值范围:240~255

子网掩码的CIDR表示方法

  • CIDR(Classless Inter-Domain Routing): 无类别域间路由

  • 子网掩码的CIDR表示方法

    • 192.168.1.100/24, 代表子网掩码有241, 也就是255.255.255.0
    • 123.210.100.200/16, 代表子网掩码有161, 也就是255.255.0.0

为什么要进行子网划分?

  • 如果需要让200台主机在同一个网段内,可以分配一个C类网段,比如192.168.1.0/24

    • 254个可用IP地址192.168.1.1~192.168.1.254
    • 多出54个空闲的IP地址,这种情况并不算浪费资源
  • 如果需要让500台主机在同一个网段内,那就分配一个B类网段,比如191.100.0.0/16

    • 65534个可用IP地址191.100.0.0/16~191.100.255.254
    • 多出65034个空闲的IP地址,这种情况就属于极大的资源浪费
  • 如何尽量避免浪费IP地址资源?

    • 合理进行子网划分
      • 等长子网划分,将一个网段等分成多个子网段,每个子网段的可用IP地址数量是一样的。
        • 等分成2个子网
        • 等分成4个子网
        • 等分成4个子网的广播地址
        • 等分成8个子网
      • 变长子网划分,每个子网的可用IP地址数量可以是不一样的。

超网

  • 超网:跟子网反过来,它是将多个连续的网段合并成一个更大的网段
  • 需求:原本有200台计算机使用192.168.0.0/24网段,现在希望增加200台设备到同一个网段
    • 200台在192.168.0.0/24网段,200台在192.168.1.0/24网段
    • 合并192.168.0.0/24,192.168.1.0/24为一个网段:192.168.0.0/23(子网掩码往左移动1位)

合并4个网段

  • 子网掩码向左移动2位,可以合并4个网段

合并网段的规律

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

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

  • 首先

    • 看看该网段的类型,是A类网络B类网络C类网络?
    • 默认情况下,A类子网掩码的位数是8B类子网掩码的位数是16C类子网掩码的位数是24
  • 然后

    • 如果该网段的子网掩码位数比默认子网掩码多, 就是子网
    • 如果该网段的子网掩码位数比默认子网掩码少, 就是超网
  • 比如

    • 25.100.0.0/16是一个A类子网
    • 200.100.0.0/16是一个C类超网