当前位置: 首页 > news >正文

[计算机网络] 局域网内的网络传输


文章目录

  • 同一局域网内主机能否直接通信?
  • MAC 地址:局域网内的身份证
  • 以太网通信原理(局域网实例)
  • 同一网段内两台主机发送消息的过程(简化)
  • 数据包的封装与分用
      • 基本概念
      • 不同协议层的数据单元名称
      • 封装过程
      • 分用 (Demultiplexing) / 解封装过程
      • 整体图示:
      • 为什么要自顶向下封装???
  • 接收的主机收到报文后的细节!
        • 细节一
        • 细节二
        • 细节三
        • 细节四
  • 之后学习协议的关键视角

该博客目标是深入探讨计算机网络中数据传输的基本流程。理解这个过程对于我们学习网络知识至关重要。本文将从局域网通信讲起,逐步扩展到跨网段传输,并详细解析数据封装与解封装、IP 地址与 MAC 地址等核心概念。下篇进行跨网络传输的讲解(IP)。


我们首先来看看两台主机在同一个局域网内是如何通信的。

同一局域网内主机能否直接通信?

答案是:是的

想象一下,一个局域网就像一个教室,教室里的每台主机(学生)都有一个独特的名字(MAC 地址),确保了其唯一性。当一台主机想和另一台主机说话时,它需要知道对方的名字。所以在局域网通信的时候,必须有唯一的标识来保证主机的唯一性,这个标识就是MAC地址。

MAC 地址:局域网内的身份证

  • 什么是 MAC 地址? MAC (Media Access Control) 地址,也称为物理地址或硬件地址,用于在数据链路层识别网络中相连的节点。

MAC地址在网卡中分配

  • 格式与特性:
    • 长度为 48 位,即 6 个字节。
    • 通常用 16 进制数字加上冒号的形式表示,例如:<font style="color:rgb(87, 91, 95);">08:00:27:03:FB:19</font>
    • MAC 地址在网卡出厂时就被烧录好了,一般不能修改(尽管有些网卡支持用户配置,虚拟机中的 MAC 地址也可能不是真实的物理 MAC 地址,可能会发生冲突)。MAC 地址理论上是全球唯一的。

以太网通信原理(局域网实例)

以太网是局域网通信机制的一种,是目前最普遍的局域网技术。其通信原理可以概括为:

  • 共享介质: 在传统的以太网(未使用交换机或使用集线器)中,所有主机共享同一个通信信道。

当老师想要在课堂上叫一个特定名字的同学起来回答问题,那么老师一定会直接喊这个学生的名字,这时候,所有人都可以听到老师喊的这个名字!!

但是,只有这个特定名字的学生才会应答,其他人只是听到,但是不会做出回应。

这就是泛洪!局域网通信的特性,理论化理解:

  • 广播特性与冲突:
    • 以太网中,任何时刻,只允许一台主机向网络中发送数据。
    • 如果有多台主机同时发送数据,就会发生信号干扰,我们称之为数据碰撞 (Collision)
    • 为了解决这个问题,发送数据的主机需要进行碰撞检测 (Collision Detection)碰撞避免 (Collision Avoidance) (例如 CSMA/CD 协议)。
      • 如何避免呢,这就会涉及到碰撞避免算法,通俗来讲就是不要让所有的数据在同一时期发送,控制发送的时间。
    • 在没有交换机的情况下(例如使用集线器),一个以太网就是一个碰撞域 (Collision Domain)。交换机的出现使得每个端口都是一个独立的碰撞域,大大减少了碰撞。
  • 寻址方式: 当一台主机发送数据时,数据帧中会包含目标主机的 MAC 地址。局域网内的其他主机都会收到这个数据帧,但只有目标 MAC 地址与自身 MAC 地址匹配的主机才会接收并处理这个数据帧。

通过该图示过程来理解:

现在主机A要给主机E发送数据,在主机A设置好,我的源地址是MacA,我的目标地址是MacE,我要发送的数据是“你好”。

  1. 从主机A开始泛洪广播,沿路上每个主机都会看到这个消息、主机D和主机C看到了,拿到信息,在数据链路层通过对比目标Mac地址,发现不是自己的Mac地址,就会直接将该消息丢弃。
  2. 当消息传到主机E的时候,对比发现,目标Mac地址就是自己的Mac地址,于是处理信息,并发一条信息通知主机A,我已经收到你的消息了。

这就是一个简单的局域网通信的过程。


数据碰撞要怎么理解呢?

可以想象,当一间教室有很多同学,每个同学都给自己想对话的人说话,但是每个人都在说话,并且在说话的人有可能还是其他人想对其说话的对象。这就造成谁也听不到完整的消息,十分的吵闹,这就是数据的碰撞。


我们日常也可以感受到,一个以太网内如果设备过多的话网络就会变得卡顿。原因就是设备要通信,但是只有一个路由器,每个设备都发送数据,设备越多发送的数据越多,造成的数据碰撞不也就更多了吗。


通过上面的理解,我们也可以对以太网通信原理有一个大概的认识了。

以太网不就是临界资源吗?!

以太网的本质就是共享的资源!主机发送报文时进行互斥!

以太网本质就是基于碰撞检测以及碰撞避免, 碰撞域等的局域网通信,局域网就是实现限定区域内设备间通信的网络。 局域网的机制是在数据链路层实现的。


现在我们已经通过对局域网的通信机制之一的以太网的通信原理学习,明白了局域网通信的原理。下文再来看看同一个网段(同一子网)内的两台主机进行发送消息的过程。

同一网段内两台主机发送消息的过程(简化)

用户A(人)向用户B发送数据,内容为“你好”。

发送数据的过程并不是在同层之间直接进行传输,而是在用户A主机上通过操作内对协议的实现,层层向下进行传输,每一层都进行特定的包装。当传输到数据链路层的时候,会通过在网络层的确认信息来决定下一步要去的主机的MAC地址。然后通过网卡泛洪数据,用户B通过网卡接收到消息后,通过数据链路层确定当前主机MAC地址是不是该数据的最终MAC地址。如果是的话就将之前在A主机数据链路层对于数据的包装解包,然后再向上传输,网络层解包用户A主机网络层的包装,以此类推。相同的协议只能识别和处理相同协议的数据包装,因为协议就是数据结构!!将一个固定大小空间内的数据进行强转,不就是可以得到这个准确的数据吗?!

这就是同一网段主机发送消息的过程。

里面有个很重要的点,就是同一网段,也就是同一子网里面的主机,只需要确认MAC地址就可以了,因为不会出现IP地址的问题,子网内的主机IP地址都是由路由器分配的。


具体来说,当主机 A 想要将数据发送给主机 B(知道主机 B 的 IP 地址)时:

  1. 网络层判断: 主机 A 的网络层会根据自己的 IP 地址和子网掩码,以及目标主机 B 的 IP 地址,判断目标主机是否与自己在同一个子网内。
  2. 同子网处理: 如果判断目标主机 B 就在同一个子网内,主机 A 就知道可以直接将数据发送给主机 B,而无需通过路由器进行转发。
  3. 获取目标 MAC 地址: 为了在数据链路层直接通信,主机 A 需要获取目标主机 B 的 MAC 地址。它会查找本地的 ARP 缓存表(ARP Cache),看是否有目标 IP 地址对应的 MAC 地址记录。
  4. ARP 请求: 如果 ARP 缓存中没有找到,主机 A 会发送一个 ARP 请求(ARP Request) 广播包到本地网络中。这个广播包的内容大致是:“谁拥有这个 IP 地址 (主机 B 的 IP)?请把你的 MAC 地址告诉我。”
  5. ARP 响应: 同一网段内的主机收到 ARP 请求后,会检查广播包中的目标 IP 地址是否是自己的。如果发现是自己的 IP 地址,主机 B 就会发送一个 ARP 响应(ARP Reply) 单播包给主机 A,告诉主机 A 自己的 MAC 地址。
  6. 封装与发送: 主机 A 收到主机 B 的 ARP 响应后,就获取了主机 B 的 MAC 地址,并将其加入 ARP 缓存表以备后用。然后,主机 A 将网络层下来的 IP 数据包封装成数据链路层帧(Ethernet Frame),在帧头部的目标 MAC 地址字段填入主机 B 的 MAC 地址,源 MAC 地址填入自己的 MAC 地址。最后,这个帧被发送到物理链路上(通常通过交换机)。
  7. 物理层传输: 帧通过物理层转换为电信号(或光信号等)在网络介质(如网线、光纤)上传输。
  8. 接收方处理:
    • 目标主机接收到信号,物理层将其转换回数据帧。
    • 数据链路层检查帧头中的目标 MAC 地址。如果与自身 MAC 地址匹配,则接收该帧;否则丢弃。
    • 接收后,数据链路层会去掉帧头,将剩余的数据(网络层数据包)向上传递给网络层,以此类推,直到应用层。这个去掉头部,向上层交付的过程叫做解封装分用

对于具体的数据的封装和分用之后会进行详细讲解,通过该小节只需要理解:

  • 主机之间的通信,本质上是两个协议栈在通信
  • 人只是数据发送的原始动力
  • 怎么得到每一步的MAC地址,在下文IP协议部分会进行讲解
  • 下图用于总结理解:

数据包的封装与分用

网络通信的核心在于数据的封装与分用(解封装)。我们要对数据的封装和分用进行理解,必须先对报文的组成进行理解。

基本概念

  • 报头 (Header): 每一层协议都会给数据添加一些控制信息,这部分信息就是对应协议层的结构体字段,我们通常称之为报头。
  • 有效载荷 (Payload): 除了报头之外的实际数据部分。
  • 报文 (Packet/Message): 报文 = 报头 + 有效载荷。

不同协议层的数据单元名称

为了区分,不同协议层对数据包有不同的称谓:

  • 应用层: 通常称为消息 (Message) 或数据 (Data)。
  • 传输层: 称为段 (Segment) (主要指 TCP) 或用户数据报 (Datagram) (主要指 UDP)。
  • 网络层: 称为数据报 (Datagram) 或包 (Packet)。
  • 数据链路层: 称为帧 (Frame)
  • 物理层: 称为比特流 (Bit Stream)。(对物理层不关心)

封装过程

当应用程序的数据需要通过网络发送时,它会自顶向下穿过协议栈的每一层,每一层都会执行封装操作:

  1. 应用层: 原始数据。
  2. 传输层: 给应用层数据加上 TCP 或 UDP 头部(包含端口号等信息),形成传输层段。
    1. 此时的报头是传输层协议加的部分
    2. 有效载荷是 原始数据
  3. 网络层:给传输层段加上 IP 头部(包含源 IP 地址、目标 IP 地址等信息),形成 IP 数据报。
    1. 此时报头是网络层协议加的部分
    2. 有效载荷是 TCP头部+原始数据
  4. 数据链路层: 给 IP 数据报加上帧头部(包含源 MAC 地址、目标 MAC 地址等信息)和可能的帧尾部(如 FCS 帧校验序列),形成数据帧。
    1. 此时报头是帧头部
    2. 有效载荷是 TCP头部+IP头部+原始数据
  5. 物理层: 将数据帧转换为比特流,通过物理介质发送出去。

注意对报头和有效载荷在每一层理解清晰。

分用 (Demultiplexing) / 解封装过程

当目标主机接收到数据时,过程正好相反,是自底向上地进行解封装:

  1. 物理层: 从网络介质接收比特流,重组成数据帧。
  2. 数据链路层: 检查帧头中的目标 MAC 地址,如果匹配,则去掉帧头和帧尾,将载荷(IP 数据报)交给网络层。这是通过帧头中的类型字段(例如,指明上层是 IP 协议)来确定交给哪个上层协议。
  3. 网络层: 检查 IP 头部,根据其中的协议字段(例如,指明上层是 TCP 还是 UDP)去掉 IP 头部,将载荷(传输层段)交给传输层。
  4. 传输层: 根据 TCP 或 UDP 头部中的目标端口号,将数据交给对应的应用程序。
  5. 应用层: 接收到原始数据。

整体图示:

为什么要自顶向下封装???

这个过程发生在发送数据时,数据从应用层(靠近用户)逐层向下传递到物理层(靠近硬件)。之所是这样,核心原因在于网络协议栈的分层设计每一层负责的任务不同。网络协议栈,每一层都有协议!!

  1. 分层抽象和职责划分: 网络协议栈将复杂的网络通信任务分解成若干个独立的层。每一层只关注并完成自己的特定功能,并通过接口与上下层交互。
  2. 逐层添加控制信息: 当数据从上层向下传递时,每一层都会在上一层的数据基础上加上自己的协议头部(Header)。这个协议头部包含了当前层协议所需的控制信息。
    • 传输层添加头部,是为了标识源和目标的应用进程(端口号),提供端到端的服务质量控制(如 TCP 的可靠性、流量控制)。
    • 网络层添加头部,是为了标识源和目标的主机(IP 地址),并提供路由功能,让数据包能跨越不同的网络到达目标主机。
    • 数据链路层添加头部和尾部,是为了在当前物理链路上标识源和目标的物理地址(MAC 地址),进行帧的定界、差错检测等。
  3. 服务与被服务关系: 高层协议使用低层协议提供的服务。例如,应用层的数据需要传输层提供端到端的传输服务,传输层的数据需要网络层提供路由服务,网络层的数据需要数据链路层提供在链路上可靠传输的“帧”服务。为了使用下一层的服务,当前层需要按照下一层规定的格式(包括头部信息)来组织数据。这个组织过程就是封装。
  4. 最终交付给硬件: 最底层的数据链路层物理层负责与物理网络介质(网线、光纤等)和网络硬件(网卡)交互。网卡需要一个完整的、包含了所有必要信息的“帧”才能将其转换成能在物理线路上发送的电信号或光信号。这个完整的帧就是通过自顶向下的逐层封装最终形成的。

所以,“自顶向下封装”是数据从产生(应用层)到准备通过物理网络传输(数据链路层/物理层)的过程中,逐层添加该层协议所需的控制信息,将数据打包成适合在物理链路上发送的格式的必然过程。

这个原因怎么和操作系统联系起来呢?

  1. 数据的通信过程,必须贯穿操作系统,贯穿协议栈
  2. OS是硬件(网卡)的管理者

不要忘了,网络的分层结构是OSI提出的,但是究竟是怎么实现分层之间每层的协议呢?是操作系统!!

所以如果数据要进行通信,那么通信过程必须贯穿整个操作系统,从发送的操作系统自上而下包装,再从接受的操作系统自下而上解封。

  1. 协议栈的实现: 整个网络协议栈(TCP/IP 协议栈)通常是集成在操作系统的内核中的。应用程序通过操作系统提供的系统调用(如 Socket 接口)来使用这些网络服务,但数据实际的处理、封装和解封装过程都是在操作系统内核中完成的。
  2. 操作系统管理硬件: 操作系统是计算机硬件的管理者。网络通信最终需要通过网卡这个硬件设备来完成数据的发送和接收。操作系统通过网卡驱动程序来控制网卡。数据链路层处理后的帧就是由操作系统交给网卡驱动,再由网卡发送出去的。接收到的数据比特流也是由网卡接收并初步处理后,通过驱动程序交给操作系统,再向上逐层解封装。
  3. 连接软件与硬件: 操作系统扮演着连接应用程序(运行在用户空间,产生和处理应用数据)、协议栈(运行在内核空间,进行封装/解封装和路由等)和网络硬件(网卡)的关键角色。数据正是在操作系统的协调下,穿过协议栈,最终到达或来源于网卡。

因此,自顶向下的封装是协议栈分层设计的体现,而整个协议栈的运行和数据的传输过程则离不开操作系统的支持和管理,特别是操作系统对底层硬件(网卡)的控制。操作系统是数据在软件协议栈和物理硬件之间流动的桥梁和管理者

接收的主机收到报文后的细节!

细节一

当报文到了发送主机的对端同层时,要先解包,将报头和有效载荷进行分离。不考虑应用层协议,其他协议:

  • 报头必须能做到和有效载荷进行分离的能力
  • 报头中必须包含,如何将自己的有效载荷交付给上层的哪一个具体的协议 (该过程叫分用)
细节二

接受主机收到报文后,数据链路层发现该报文不是发送给我的,直接丢弃该报文!

细节三

为什么叫TCP/IP 协议“栈”?

站在每一层的视角来看,他们是直接和接收主机的每一层通信的,因为封装的报头只有同层可以解包。

但是我们已经学习了实际的过程及原理,现在怎么理解呢?

再来看这个图示。当数据开始发送,从上至下进行一层一层封装,每封装一层,上一层封装的报头就会加入成为这一层的有效载荷。

当解包的时候,解包的顺序和刚才发送是封装的顺序是逆序的,从下至上逐个解包。

这不就是个压栈和出栈的过程吗??

所以这就是为什么叫协议栈。

计算机网络通过使用网络协议栈来进行通信,而互联网广泛采用的这套协议栈,网络协议栈指的就是这个协议栈,因为这一套都是为了计算机网络的实现啊。又因为其中TCP和IP协议的重要性,所以计算机网络的协议栈又叫做TCP/IP协议栈

细节四

为什么不对物理层进行讨论?

网卡的一种模式是:不管收到的数据是不是给我所在主机的,全部向上交付。这就是网卡的混杂模式,所以不进行没有意义的讨论。

之后学习协议的关键视角

从该篇开始,讲解的任何协议,都会要先从宏观上建立这样的认识:

  1. 该协议是如何进行解封装(分用)的? 明确了解封装过程,封装过程自然也就容易理解了。关键在于识别头部中的哪些字段用于决定将数据交给哪个上层或下层模块。
  2. 该协议是如何将其有效载荷交付给上层协议的? 这通常涉及到头部中的特定字段(如类型、协议号、端口号)。

相关文章:

  • 【Android】初识 Activity
  • 【人工智能基础】初识神经网络
  • docker私有仓库部署配置学习
  • 冯·诺依曼体系、哈佛架构以及现代计算机架构中的关键优化技术(多级缓存、流水线)
  • 网络资源模板--基于Android Studio 实现的咖啡点餐App
  • 为什么用Qwen3 embedding和rerank
  • 大模型MetaGPT面试题汇总及参考答案
  • WebRTC(七):媒体能力协商
  • Linux系统之grub-mkstandalone详解
  • C#Halcon从零开发_Day14_AOI缺陷检测策略1_Bolb分析+特征分析
  • 日语学习-日语知识点小记-进阶-JLPT-真题训练-N2阶段(3):单词2018年12月2024年7月
  • 【机器学习四大核心任务类型详解】分类、回归、聚类、降维智能决策指南
  • 案例:塔能科技以“数字光网”重塑某市照明绿色生态
  • rknn优化教程(三)
  • DAY 39 图像数据与显存
  • unity版本控制PlasticSCM转git
  • RADIUS认证服务器全面解析:核心功能、应用场景
  • FLTK从源码编译到使用
  • SQL Server基础语句4:数据定义
  • ROS 2 中 Astra Pro 相机与 YOLOv5 检测功能编译启动全记录
  • wordpress 导入用户/seo外包公司哪家专业
  • 中铁建设集团华北分公司网站/网络营销策划与推广
  • 成都住房和城乡建设局 网站首页/青岛网站排名公司
  • 怎么做文化传播公司网站/百度浏览器官方下载
  • 自建网站免费教程/网站友情链接购买
  • 陈村建网站/网站seo排名优化软件