快速理解网络协议(一) IP 地址、MAC 地址

IP 地址

IP 地址中的 "IP" 代表Internet Protocol(互联网协议),IP 地址是在 IP 协议下使用的地址,IP 地址有三个主要功能:标识设备或网络、定位和选择路由。由于 IPv4 是第一个架构中的主要版本,所以在没有特殊说明的时候,IP 地址一般指的是 IPv4 地址。

IPv4 地址

一个 IPv4 地址被 "." 分割成 4 个部分,每个部分 8 个 bit,总共 32 位,使用十进制表示。在设计之初,IPv4 地址被分成 5 类,如下图所示,我们平时接触到的基本是 ABC 三类。一个 IPv4 地址被分为两部分,网络号 + 主机号,这种地址分类的方式叫做分类网络

在分类网络中,A、B、C 三类的 IPv4 地址的数量分割一点都不合理,范围跨度太大了。随着互联网的快速发展,CIDR 取代了分类网络。

CIDR (Classless Inter-Domain Routing )无类别域间路由,旨在重新划分地址空间,将地址块可以较为自由合理的分配给用户。

  • CIDR("/" 后带着数字这种表示形式,"/" 后)将 32 位的 IP 地址一分为二,网络号 + 主机号,例如 100.100.100.2/24,前 24 位是网络号,后 8 位是主机号

  • 网络号全为 1 的就是子网掩码,主机号全为 1 的就是广播地址

  • 将子网掩码和 IP 地址按位计算 AND,可以得到网络号,可用于判断一个 IP 地址是不是在当前子网内

    示例: 100.100.100.2/24

    • 子网掩码:255.255.255.0
    • 广播地址:100.100.100.255,所有 100.100.100 网络里面的机器都可以收到
    • 100.100.100.20 与子网掩码做按位与运算,得到 100.100.100.0,即为网络号
      易错计算: 求 16.158.165.91/22 的网络号、第一个地址、子网掩码和广播地址
    • 16.158.165.91/22 → 16.158. 101001/01. 01011011
    • 网络号:16.158. 101001/00.0 → 16.158.164.0
    • 第一个地址:16.158.164.1
    • 子网掩码:255.255.252.0
    • 广播地址:16.158.167.255

特殊 IPv4 地址

  • 127.0.0.1 表示本机地址
  • 0.0.0.0 有两种含义,默认路由地址和通配符地址。默认路由地址我们之后再说。通配符地址指的是,若进程监听了通配符地址,那么进程监听了本机上的所有 IP 地址

IPv6 地址

由于互联网的快速兴起, IPv4 地址很快就不够用了,于是出现了 IPv6 地址。一个 IPv6 地址被 ":" 分为 8 个部分,每个部分以 4 位十六进制方式表示,总共 128 位。比如:2001:0db8:85a3:08d3:1319:8a2e:0370:734。

IPv6 地址和 IPv4 地址相似,也使用网络号 + 主机号的形式划分。一个 IPv4地址可以很容易的转换成一个 IPv6 地址,如果一个地址是 IPv4 地址,可以直接表示成::ffff:IPv4地址,比如 ::ffff:192.168.89.9,这种格式叫做IPv4映射地址 。而::1类似于 IPv4 中的 127.0.0.1

IP 地址的功能

  1. 标识设备或网络、定位,提供设备在网络中的位置信息
  2. 选择路由,在网络传输中,通过 IP 地址选择路由

MAC 地址

和 IP 地址相似,由于此地址作用于 MAC 层,所以称之为 MAC 地址。MAC 地址是指网络设备的硬件地址,是由网络设备的制造商烧录在设备的网卡中的一个全球唯一的地址。类比现实生活的话,IP 地址更像是精确到门牌号的地址信息,而 MAC 地址则是拥有唯一身份证号的"人"。

IP 地址 和 MAC 地址的区别

区别 IP地址 MAC地址
地址类型 逻辑地址 物理地址
分配方式 由运营商分配 由设备制造商烧录到设备的网卡中
作用范围 全球互联网上的通信 局域网内通信
主要功能 标识设备和选择路由 唯一标识设备

查看 IP 地址、MAC 地址

Linux 下使用 ip addr 或 ifconfig,Windows 下使用 ipconfig

  • "1" 表示 MAC 地址,是一个网卡的物理地址,使用十六进制,6个byte表示
  • "2" 表示 net_device flags,网络设备的状态标识
    • BROADCAST 表示此网卡有广播地址,可以发送广播包
    • MULTICAST 表示此网卡可以发送多播包
    • UP 表示此网卡处于启动状态
    • LOWER_UP 表示 L1 启动,即网线已插入
    • mtu 1500 表示最大传输单元 MTU 为 1500,是以太网的默认值,即正文部分不允许超过 1500 个字节
    • qdisc 表示 queueing discipline 排队规则,内核通过网络接口发送数据包时,需要按照 qdisc 配置的规则把数据包加入队列
      • mq:是一个虚拟 qdisc,目的是为网络设备的每个硬件队列创建一个 pfifo_fast 队列
      • pfifo:不对数据包做任何处理,先入先出
      • pfifo_fast:数据包按照服务类型 TOS Type Of Service( IP 头中的一个字段)分配到不同的波段中,每个波段对应的优先级不同

小测验

  1. 如何判断一个 IP 地址是否在子网内?
  2. IP 地址是逻辑地址还是物理地址?它在网络中的作用是什么?
  3. IP 地址和 MAC 地址的区别?
  4. MAC 地址是逻辑地址还是物理地址?它在网络中的作用是什么?
相关推荐
无奈何杨1 分钟前
CoolGuard增加枚举字段支持,条件编辑优化,展望指标取值不同
前端·后端
这里有鱼汤4 分钟前
小白必看:QMT里的miniQMT入门教程
后端·python
brzhang23 分钟前
当AI接管80%的执行,你“不可替代”的价值,藏在这20%里
前端·后端·架构
绝无仅有1 小时前
后端 Go 经典面试常见问题解析与总结
后端·面试·github
绝无仅有1 小时前
后端工程师面试常见问题与回答解析总结
后端·面试·github
程序员爱钓鱼3 小时前
Go语言实战案例 — 项目实战篇:简易博客系统(支持评论)
前端·后端·go
追逐时光者10 小时前
精选 4 款基于 .NET 开源、功能强大的 Windows 系统优化工具
后端·.net
TF男孩10 小时前
ARQ:一款低成本的消息队列,实现每秒万级吞吐
后端·python·消息队列
AAA修煤气灶刘哥11 小时前
别让Redis「歪脖子」!一次搞定数据倾斜与请求倾斜的捉妖记
redis·分布式·后端
AAA修煤气灶刘哥11 小时前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql