【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 网络"------这是互联网成功的基石。


相关推荐
2501_941982052 小时前
外部群自动化中的“静默心跳”存活检测
运维·自动化
Mr-Wanter2 小时前
搭建局域网时间同步服务器
java·运维·服务器
有谁看见我的剑了?2 小时前
ESXI 虚拟机文件组成学习
运维·学习·云计算
chenyuhao20242 小时前
Linux系统编程:多线程同步与单例模式
linux·服务器·c++·后端·单例模式
代码游侠2 小时前
应用——UDP 网络编程
linux·运维·开发语言·学习·算法
Lueeee.2 小时前
RTSP协议
linux
忍冬行者2 小时前
通过ansible分发免密公钥、清理不再使用的公钥及验证公钥状态
linux·服务器·ansible
辉视广播对讲2 小时前
SIP广播对讲系统:引领未来IP广播的主流方向
网络·网络协议·tcp/ip
木童6622 小时前
Docker 容器操作(资源限制、数据卷容器、端口映射、容器互联)
运维·docker·容器