【Linux网络编程】网络基础之MAC地址与IP地址的区别

前言:欢迎 各位光临本博客,这里小编带你直接手撕**,文章并不复杂,愿诸君**耐其心性,忘却杂尘,道有所长!!!!

IF'Maxue个人主页
🔥 个人专栏 :
《C语言》
《C++深度学习》
《Linux》
《数据结构》
《数学建模》

⛺️生活是默默的坚持,毅力是永久的享受。不破不立!

文章目录

  • 网络传输基本流程
    • [1. 每块网卡都有唯一"身份证":MAC 地址](#1. 每块网卡都有唯一"身份证":MAC 地址)
    • [2. 多台设备共享网络?小心"撞车"!](#2. 多台设备共享网络?小心"撞车"!)
    • [3. 网络通信靠"协议栈"层层协作](#3. 网络通信靠"协议栈"层层协作)
    • [4. 每一层都要做两件事(除应用层)](#4. 每一层都要做两件事(除应用层))
    • [5. 各层数据单元叫什么?](#5. 各层数据单元叫什么?)
    • [6. 抓包工具怎么工作的?混杂模式!](#6. 抓包工具怎么工作的?混杂模式!)
    • [7. 两台主机如何通过 TCP/IP 通信?](#7. 两台主机如何通过 TCP/IP 通信?)
    • [8. 跨网络传输:路由器登场!](#8. 跨网络传输:路由器登场!)
    • [9. IP vs MAC:分工明确](#9. IP vs MAC:分工明确)
    • [10. 为什么不能只要 IP,不要 MAC?](#10. 为什么不能只要 IP,不要 MAC?)

网络传输基本流程

网络通信看似复杂,其实就像寄快递:每层都有自己的"包装盒"和"地址标签"。下面结合图示,用最直白的方式讲清楚数据是怎么从一台电脑传到另一台的。


1. 每块网卡都有唯一"身份证":MAC 地址

每台设备的网卡出厂时就有一个全球唯一的物理地址------MAC 地址。它就像你的身份证号,不会重复。

MAC 地址由 6 组十六进制数组成(如 00:1A:2B:3C:4D:5E),前 3 组标识厂商,后 3 组是设备编号。在局域网(比如你家 Wi-Fi)里,设备之间靠 MAC 地址互相识别。


2. 多台设备共享网络?小心"撞车"!

早期以太网采用 CSMA/CD 机制(载波侦听多路访问/冲突检测):

  • 发数据前先"听"一下线路是否空闲
  • 如果多人同时发,就会碰撞(collision) ,导致丢包

设备越多,碰撞概率越高,有效传输的数据就越少。

为解决这个问题,后来出现了交换机,它能记住每个端口对应的 MAC,直接点对点转发,避免广播风暴。

补充:早期还有"令牌环"网络------谁拿到"令牌"谁才能发数据,本质是一种分布式锁。


3. 网络通信靠"协议栈"层层协作

现代网络使用 TCP/IP 协议栈,分为四层(或五层),每一层都有自己的协议:

  • 应用层(HTTP、FTP)
  • 传输层(TCP、UDP)
  • 网络层(IP)
  • 链路层(以太网、Wi-Fi)
  • (物理层:电线、光纤等,常被省略)

关键概念:报文封装 = 协议头 + 有效载荷

就像套娃:应用数据 → 加 TCP 头 → 加 IP 头 → 加以太网帧头。

每一层只关心自己的头部,把上层数据当"黑盒"传递。

虽然数据是逐层向下传,但逻辑上可以理解为:发送方的 TCP 和接收方的 TCP 在"直接对话"


4. 每一层都要做两件事(除应用层)

除了最顶层的应用层,其他每一层都必须完成两个核心功能:

  1. 封装(发送时):加自己的协议头
  2. 分用(接收时):根据头部信息,把数据交给上一层正确的协议

例如:

  • 链路层收到帧,检查 MAC 地址是否匹配
  • 网络层看 IP 头,决定是本地处理还是转发
  • 传输层看端口号(如 80、443),交给对应的应用程序

整个过程像"入栈出栈":

  • 发送:数据从应用层"入栈",逐层加头
  • 接收:从链路层"出栈",逐层剥头、分用

5. 各层数据单元叫什么?

不同层对数据的称呼不同:

层级 数据单元名称
应用层 报文(Message)
传输层 段(Segment,TCP)或报文(Datagram,UDP)
网络层 包(Packet)
链路层 帧(Frame)

6. 抓包工具怎么工作的?混杂模式!

正常情况下,网卡只接收目标 MAC 是自己的帧。

但开启 混杂模式(Promiscuous Mode) 后,网卡会接收所有经过的数据帧,不管是不是发给自己的。

这就是 Wireshark、tcpdump 等抓包工具的原理!

注意:混杂模式通常需要管理员权限,且可能被交换机限制(需端口镜像)。


7. 两台主机如何通过 TCP/IP 通信?

假设 A 要给 B 发消息(即使不在同一局域网):

  1. A 的应用层生成数据
  2. 传输层加 TCP 头(含端口号)
  3. 网络层加 IP 头(含源/目标 IP)
  4. 链路层加以太网帧头(含源/目标 MAC)

接收方 B 则反向操作:剥帧头 → 剥 IP 头 → 剥 TCP 头 → 交给应用。

宏观来看,整个过程是对称的封装与解封装


8. 跨网络传输:路由器登场!

如果 A 和 B 不在同一子网,数据就要经过路由器

  • IP 地址 用于跨网络寻址(全球唯一标识主机)
  • MAC 地址 仅用于局域网内通信

就像寄快递:

  • IP 地址 = 收件人完整地址(省市区街道门牌)
  • MAC 地址 = 最后一公里快递员手里的"楼栋号+房号"

IPv4 只有约 43 亿个地址,远不够全球设备使用。中国积极推动 IPv6(128 位,地址近乎无限),但因兼容性问题推广缓慢。


9. IP vs MAC:分工明确

对比项 IP 地址 MAC 地址
作用范围 全球(跨网络) 局域网内
是否可变 可配置(动态/静态) 固定(硬件写死)
协议层 网络层 链路层
路由依据

类比《西游记》:

  • IP 地址 = "去西天取经"(远期目标)
  • MAC 地址 = "今天走到女儿国"(近期目标)

10. 为什么不能只要 IP,不要 MAC?

有人问:既然 IP 能全球定位,干嘛还要 MAC?

原因有二:

  1. 历史兼容:以太网早于 IP 存在,底层硬件依赖 MAC
  2. 投入产出比低:重写所有网卡、交换机、驱动成本太高

而且,IP 提供逻辑寻址,MAC 提供物理寻址,二者分工协作,缺一不可。

正是 IP 层的存在,才让全世界各种物理网络(以太网、Wi-Fi、4G、卫星)统一成"IP 网络"------这是互联网成功的基石。


相关推荐
神奇霸王龙2 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
生活爱好者!2 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
groundhappy4 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
尽兴-4 小时前
企业业务系统架构选型与渐进式演进
运维·系统架构·devops
数智化管理手记4 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
通信小小昕4 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
LabVIEW开发4 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
壮哥_icon5 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
RD_daoyi5 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
电商API_180079052475 小时前
企业ERP进销存场景|京东商品详情接口自动同步方案|凭证鉴权批量调用技术实操
大数据·运维·人工智能·爬虫·数据挖掘·网络爬虫