快速理解网络协议(一) 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 小时前
玩影之刃零,两张四千元级显卡怎么挑
后端
用户47949283569155 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
努力的小雨6 小时前
别再复制日志给AI了!我让Codex自己去观测云查报错
后端
afumu8 小时前
Go 写一个只监听 127.0.0.1 的控制服务:鉴权、白名单、危险命令拦截
后端·安全·go
johnjincaaaa8 小时前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端
用户4702784004059 小时前
C语言编译与链接
后端·开源
你三大爷9 小时前
从 Hessian 迁移到 protostuff:深嵌套模型反序列化耗时与高并发类加载锁的根治实战
后端·架构
IT枫斗者枫哥9 小时前
子线程断言失败,JUnit 为什么还显示通过?
java·后端
stark张宇10 小时前
Vibe Coding 入门实战:用 Claude Code 跑通 AI 产品开发流程(上)
后端·claude·vibecoding
考虑考虑11 小时前
JDK27中的Set.ofLazy
java·后端·java ee