Linux 网络编程基础:网络分类、分层模型与数据封装

Linux 网络编程基础:网络分类、分层模型与数据封装

课程:尚硅谷《嵌入式 Linux 应用层开发》第 6 章 Socket 编程

依据:2026-09-29 20:21 录音转写;课程 PDF 第 244---254 页。

本节边界:这是 Socket 编程的理论入口,暂未讲 socket()、bind()、listen()、connect() 等代码接口。

1. 本节在网络编程路线中的位置

录音首先说明:计算机网络范围很大,本课程不会完整讲完所有网络技术,而是先建立后续 Socket 编程必需的框架。
#mermaid-svg-S4BGc3gQHvlT95FF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-S4BGc3gQHvlT95FF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-S4BGc3gQHvlT95FF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-S4BGc3gQHvlT95FF .error-icon{fill:#552222;}#mermaid-svg-S4BGc3gQHvlT95FF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-S4BGc3gQHvlT95FF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-S4BGc3gQHvlT95FF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-S4BGc3gQHvlT95FF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-S4BGc3gQHvlT95FF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-S4BGc3gQHvlT95FF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-S4BGc3gQHvlT95FF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-S4BGc3gQHvlT95FF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-S4BGc3gQHvlT95FF .marker.cross{stroke:#333333;}#mermaid-svg-S4BGc3gQHvlT95FF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-S4BGc3gQHvlT95FF p{margin:0;}#mermaid-svg-S4BGc3gQHvlT95FF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-S4BGc3gQHvlT95FF .cluster-label text{fill:#333;}#mermaid-svg-S4BGc3gQHvlT95FF .cluster-label span{color:#333;}#mermaid-svg-S4BGc3gQHvlT95FF .cluster-label span p{background-color:transparent;}#mermaid-svg-S4BGc3gQHvlT95FF .label text,#mermaid-svg-S4BGc3gQHvlT95FF span{fill:#333;color:#333;}#mermaid-svg-S4BGc3gQHvlT95FF .node rect,#mermaid-svg-S4BGc3gQHvlT95FF .node circle,#mermaid-svg-S4BGc3gQHvlT95FF .node ellipse,#mermaid-svg-S4BGc3gQHvlT95FF .node polygon,#mermaid-svg-S4BGc3gQHvlT95FF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-S4BGc3gQHvlT95FF .rough-node .label text,#mermaid-svg-S4BGc3gQHvlT95FF .node .label text,#mermaid-svg-S4BGc3gQHvlT95FF .image-shape .label,#mermaid-svg-S4BGc3gQHvlT95FF .icon-shape .label{text-anchor:middle;}#mermaid-svg-S4BGc3gQHvlT95FF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-S4BGc3gQHvlT95FF .rough-node .label,#mermaid-svg-S4BGc3gQHvlT95FF .node .label,#mermaid-svg-S4BGc3gQHvlT95FF .image-shape .label,#mermaid-svg-S4BGc3gQHvlT95FF .icon-shape .label{text-align:center;}#mermaid-svg-S4BGc3gQHvlT95FF .node.clickable{cursor:pointer;}#mermaid-svg-S4BGc3gQHvlT95FF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-S4BGc3gQHvlT95FF .arrowheadPath{fill:#333333;}#mermaid-svg-S4BGc3gQHvlT95FF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-S4BGc3gQHvlT95FF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-S4BGc3gQHvlT95FF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-S4BGc3gQHvlT95FF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-S4BGc3gQHvlT95FF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-S4BGc3gQHvlT95FF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-S4BGc3gQHvlT95FF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-S4BGc3gQHvlT95FF .cluster text{fill:#333;}#mermaid-svg-S4BGc3gQHvlT95FF .cluster span{color:#333;}#mermaid-svg-S4BGc3gQHvlT95FF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-S4BGc3gQHvlT95FF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-S4BGc3gQHvlT95FF rect.text{fill:none;stroke-width:0;}#mermaid-svg-S4BGc3gQHvlT95FF .icon-shape,#mermaid-svg-S4BGc3gQHvlT95FF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-S4BGc3gQHvlT95FF .icon-shape p,#mermaid-svg-S4BGc3gQHvlT95FF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-S4BGc3gQHvlT95FF .icon-shape .label rect,#mermaid-svg-S4BGc3gQHvlT95FF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-S4BGc3gQHvlT95FF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-S4BGc3gQHvlT95FF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-S4BGc3gQHvlT95FF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 网络分类
为什么要分层
OSI 七层模型
教学五层模型
TCP/IP 四层模型
PDU、SDU、PCI
封装与解封装
服务、接口、协议
后续 Socket API

本节最需要留下的主线是:

text 复制代码
应用程序通过 Socket 接口使用传输层服务
→ TCP 或 UDP 通过 IP 发送数据
→ IP 数据包由链路层承载
→ 接收端逐层解封装并交给目标应用

2. 按地理范围划分网络

类型 英文 典型范围 常见示例
个人区域网 PAN 几米到十几米 蓝牙、近距离个人设备通信
局域网 LAN 家庭、办公室、楼宇或校园 以太网、Wi-Fi
城域网 MAN 城市范围 城域光纤网络
广域网 WAN 跨城市、国家或洲际 运营商骨干网、跨区域企业网

范围分类描述的是覆盖尺度,不代表四类网络之间存在绝对、不可重叠的技术边界。

2.1 局域网和互联网不要混淆

电脑连接家里的交换机或无线路由器后,先进入一个局域网。能否访问公网,还取决于路由、网关、运营商连接、地址转换和访问策略。

text 复制代码
电脑或开发板
→ 家庭或公司局域网
→ 默认网关
→ 运营商网络
→ Internet

连接 Wi-Fi 只表示接入了无线局域网,不自动保证已经连通互联网。

3. 按拓扑划分网络

拓扑 基本结构 主要特点
总线型 多个节点共享一条主干介质 布线简单,主干故障影响大
星型 所有终端连接中央交换设备 易管理,中央节点是关键点
环型 节点首尾相连形成环 数据沿环传递,故障影响取决于是否有冗余
网状 节点之间存在多条可选路径 冗余和可靠性高,成本与管理复杂度高

网状拓扑还分为全网状和部分网状。互联网整体更接近由大量网络和路由器组成的部分网状结构,并不是每台终端都直接连接所有其他终端。

4. 其他分类方法

4.1 按使用范围

类型 含义
Internet 全球互联的公网体系
Intranet 组织内部使用的网络和服务
Extranet 向合作伙伴等受控外部用户开放的部分内部资源

内网并不天然安全。身份认证、授权、补丁、加密和访问控制仍然需要落实。

4.2 按交换方式

类型 工作方式 典型场景
电路交换 通信前建立并独占一条逻辑通路 传统电话系统
分组交换 数据拆成分组,经网络逐跳转发 Internet 的基本方式
报文交换 节点存储并转发完整报文 早期通信系统中的概念

4.3 按通信关系

  • 广播:一个节点发送的信息能被广播域中的多个节点接收;
  • 点对点:在两个端点之间建立直接或逻辑上的通信关系。

现代交换式以太网中的普通单播帧通常只被转发到目标端口,不能简单理解为"每个以太网帧都会让所有节点收到"。以太网仍支持广播帧和多播帧。

5. 为什么网络必须分层

网络通信同时涉及应用程序、操作系统、协议栈、网卡、交换机、路由器和物理介质。分层可以把复杂问题拆开:

  • 每层处理一组相对明确的问题;
  • 下层为相邻上层提供服务;
  • 上层不需要理解下层全部实现细节;
  • 同层的通信双方遵守同一协议;
  • 某层实现可以替换,而不必重写所有上层。

例如应用程序通常只需要调用 Socket API,不需要自己生成以太网帧、计算 IP 路由或直接控制网卡发送比特。

6. 分层模型中的五个概念

6.1 层 Layer

把完整通信过程划分成多个功能层级。例如传输层负责应用之间的数据传递,网络层负责跨网络寻址与转发。

6.2 实体 Entity

实现某一层功能的软件或硬件组件。同一层中位于通信两端的实体称为对等实体。

6.3 协议 Protocol

对等实体之间遵守的规则,规定数据格式、字段含义、交互次序和错误处理方法。

text 复制代码
主机 A 的 TCP 实体 ← 按 TCP 协议进行逻辑通信 → 主机 B 的 TCP 实体

6.4 接口 Interface

相邻层之间调用功能的边界和方法。在 Linux 应用层开发中,Socket API 是应用程序访问操作系统网络能力的重要接口。

6.5 服务 Service

下层能够为上层完成的功能。服务说明"能做什么",接口说明"怎样调用",协议规定通信双方"按照什么规则实现"。

7. OSI 七层模型

OSI 模型从下到上分为七层:

层级 主要职责 常见理解
7 应用层 为应用提供网络功能 HTTP、FTP、SMTP 等
6 表示层 数据表示、编码、压缩、加密 把数据转换成双方可理解的格式
5 会话层 建立、维护和结束会话 管理通信过程
4 传输层 应用端点之间的数据传输 TCP、UDP、端口号
3 网络层 跨网络寻址和路由 IP、路由器
2 数据链路层 同一链路上的帧传输 Ethernet、MAC 地址、FCS
1 物理层 传输比特和电气或光学信号 网线、光纤、射频、PHY

OSI 是理解职责边界的参考模型。实际互联网软件通常按 TCP/IP 协议栈讨论。

7.1 数据链路层并不保证端到端可靠

教材把数据链路层描述为"确保物理链路上的无误传输",适合作为入门简化,但不能理解成端到端数据一定送达。

以太网 FCS 能帮助检测链路帧错误,错误帧通常会被丢弃;是否重传、是否最终到达以及是否按序交付,还取决于更高层协议和具体链路技术。

8. 教学五层模型

五层模型把 OSI 的应用层、表示层和会话层合并为一个应用层:

text 复制代码
应用层
传输层
网络层
数据链路层
物理层

它主要用于教学,既保留了链路层和物理层的区别,又比七层模型简洁。

9. TCP/IP 四层模型

本课程后续 Socket 编程主要使用 TCP/IP 四层视角:

TCP/IP 层 主要协议或技术 负责的问题
应用层 HTTP、FTP、SSH、SMTP、DNS 等 应用数据的含义和交互规则
传输层 TCP、UDP 把数据交给正确的应用端点
网际层 IPv4、IPv6、ICMP 跨网络寻址和路由
链路层 Ethernet、Wi-Fi、PPP 在当前物理网络上承载 IP 数据包

9.1 三种模型怎样对应

OSI 七层 教学五层 TCP/IP 四层
应用、表示、会话 应用层 应用层
传输层 传输层 传输层
网络层 网络层 网际层
数据链路层 数据链路层 链路层
物理层 物理层 链路层

模型用于帮助定位功能。实际协议并不总能完美、唯一地塞进某一层,分析时应关注协议真正提供的能力。

10. IP 地址、端口号和协议号分别负责什么

老师使用"IP 找到电脑,端口找到电脑中的程序"帮助入门。更准确的理解是:

  • IP 地址标识网络接口,并参与路由选择;
  • 协议号告诉 IP 层负载应交给 TCP、UDP、ICMP 等哪个上层协议;
  • 端口号帮助 TCP 或 UDP 把数据交给主机中的具体 Socket;
  • 操作系统再把 Socket 与相应进程关联。

#mermaid-svg-OvvSNvpno39kbbCg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OvvSNvpno39kbbCg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OvvSNvpno39kbbCg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OvvSNvpno39kbbCg .error-icon{fill:#552222;}#mermaid-svg-OvvSNvpno39kbbCg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OvvSNvpno39kbbCg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OvvSNvpno39kbbCg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OvvSNvpno39kbbCg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OvvSNvpno39kbbCg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OvvSNvpno39kbbCg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OvvSNvpno39kbbCg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OvvSNvpno39kbbCg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OvvSNvpno39kbbCg .marker.cross{stroke:#333333;}#mermaid-svg-OvvSNvpno39kbbCg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OvvSNvpno39kbbCg p{margin:0;}#mermaid-svg-OvvSNvpno39kbbCg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OvvSNvpno39kbbCg .cluster-label text{fill:#333;}#mermaid-svg-OvvSNvpno39kbbCg .cluster-label span{color:#333;}#mermaid-svg-OvvSNvpno39kbbCg .cluster-label span p{background-color:transparent;}#mermaid-svg-OvvSNvpno39kbbCg .label text,#mermaid-svg-OvvSNvpno39kbbCg span{fill:#333;color:#333;}#mermaid-svg-OvvSNvpno39kbbCg .node rect,#mermaid-svg-OvvSNvpno39kbbCg .node circle,#mermaid-svg-OvvSNvpno39kbbCg .node ellipse,#mermaid-svg-OvvSNvpno39kbbCg .node polygon,#mermaid-svg-OvvSNvpno39kbbCg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OvvSNvpno39kbbCg .rough-node .label text,#mermaid-svg-OvvSNvpno39kbbCg .node .label text,#mermaid-svg-OvvSNvpno39kbbCg .image-shape .label,#mermaid-svg-OvvSNvpno39kbbCg .icon-shape .label{text-anchor:middle;}#mermaid-svg-OvvSNvpno39kbbCg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OvvSNvpno39kbbCg .rough-node .label,#mermaid-svg-OvvSNvpno39kbbCg .node .label,#mermaid-svg-OvvSNvpno39kbbCg .image-shape .label,#mermaid-svg-OvvSNvpno39kbbCg .icon-shape .label{text-align:center;}#mermaid-svg-OvvSNvpno39kbbCg .node.clickable{cursor:pointer;}#mermaid-svg-OvvSNvpno39kbbCg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OvvSNvpno39kbbCg .arrowheadPath{fill:#333333;}#mermaid-svg-OvvSNvpno39kbbCg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OvvSNvpno39kbbCg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OvvSNvpno39kbbCg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OvvSNvpno39kbbCg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OvvSNvpno39kbbCg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OvvSNvpno39kbbCg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OvvSNvpno39kbbCg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OvvSNvpno39kbbCg .cluster text{fill:#333;}#mermaid-svg-OvvSNvpno39kbbCg .cluster span{color:#333;}#mermaid-svg-OvvSNvpno39kbbCg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OvvSNvpno39kbbCg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OvvSNvpno39kbbCg rect.text{fill:none;stroke-width:0;}#mermaid-svg-OvvSNvpno39kbbCg .icon-shape,#mermaid-svg-OvvSNvpno39kbbCg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OvvSNvpno39kbbCg .icon-shape p,#mermaid-svg-OvvSNvpno39kbbCg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OvvSNvpno39kbbCg .icon-shape .label rect,#mermaid-svg-OvvSNvpno39kbbCg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OvvSNvpno39kbbCg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OvvSNvpno39kbbCg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OvvSNvpno39kbbCg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} TCP
UDP
目的 IP 地址
到达目标主机的网络接口
IP 协议字段
目标 TCP 端口
目标 UDP 端口
目标 Socket / 应用

一条 TCP 连接通常由以下信息区分:

text 复制代码
源 IP + 源端口 + 目的 IP + 目的端口 + 传输层协议

所以同一个服务器端口可以同时服务许多客户端连接。

11. TCP 与 UDP 的初步区别

特征 TCP UDP
连接 面向连接 无连接
数据形式 连续字节流 一个个数据报
可靠性 提供可靠、有序传递 不保证送达、顺序或不重复
消息边界 不保留应用写入边界 保留数据报边界
常见取舍 功能完整,协议开销和状态更多 简单、低开销,应用自行处理可靠性需求

TCP 的"可靠"表示协议会通过序号、确认、重传等机制提供可靠、有序的字节流服务,不表示网络永远不会断开,也不表示一次 send() 必然对应接收端一次完整 recv()。

录音在本节只做初步对比,第 254 页开始进入 TCP 特性,详细机制属于后续课程。

12. PDU、SDU 与 PCI

12.1 PDU

PDU(Protocol Data Unit,协议数据单元)是同层对等实体交换的数据单位。

不同层常使用不同名称:

层 常见 PDU 名称
应用层 消息或应用数据
TCP 传输层 TCP 报文段 Segment
UDP 传输层 UDP 数据报 Datagram
IP 网际层 IP 数据包或 IP 数据报 Packet / Datagram
数据链路层 帧 Frame

具体资料对 Packet、Datagram 等词的使用可能略有差异,判断时应先看它所处的协议层。

12.2 SDU

SDU(Service Data Unit,服务数据单元)是当前层从上层接收、需要继续承载的数据。对当前层来说,它是负载。

12.3 PCI

PCI(Protocol Control Information,协议控制信息)是当前层为了实现自身协议功能而添加的控制信息,例如:

  • 源和目的地址;
  • 源和目的端口;
  • 协议类型;
  • 序号、确认号和控制标志;
  • 长度、校验信息。

基本关系:

text 复制代码
PDU = PCI + SDU

PCI 常位于头部。某些协议还包含尾部,例如以太网帧尾部的 FCS。

13. 封装与解封装

假设浏览器向网站服务器发送 HTTP 请求。

13.1 发送端封装

#mermaid-svg-Y7E6EQc020er00aJ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Y7E6EQc020er00aJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Y7E6EQc020er00aJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Y7E6EQc020er00aJ .error-icon{fill:#552222;}#mermaid-svg-Y7E6EQc020er00aJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Y7E6EQc020er00aJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Y7E6EQc020er00aJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Y7E6EQc020er00aJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Y7E6EQc020er00aJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Y7E6EQc020er00aJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Y7E6EQc020er00aJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Y7E6EQc020er00aJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Y7E6EQc020er00aJ .marker.cross{stroke:#333333;}#mermaid-svg-Y7E6EQc020er00aJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Y7E6EQc020er00aJ p{margin:0;}#mermaid-svg-Y7E6EQc020er00aJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Y7E6EQc020er00aJ .cluster-label text{fill:#333;}#mermaid-svg-Y7E6EQc020er00aJ .cluster-label span{color:#333;}#mermaid-svg-Y7E6EQc020er00aJ .cluster-label span p{background-color:transparent;}#mermaid-svg-Y7E6EQc020er00aJ .label text,#mermaid-svg-Y7E6EQc020er00aJ span{fill:#333;color:#333;}#mermaid-svg-Y7E6EQc020er00aJ .node rect,#mermaid-svg-Y7E6EQc020er00aJ .node circle,#mermaid-svg-Y7E6EQc020er00aJ .node ellipse,#mermaid-svg-Y7E6EQc020er00aJ .node polygon,#mermaid-svg-Y7E6EQc020er00aJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Y7E6EQc020er00aJ .rough-node .label text,#mermaid-svg-Y7E6EQc020er00aJ .node .label text,#mermaid-svg-Y7E6EQc020er00aJ .image-shape .label,#mermaid-svg-Y7E6EQc020er00aJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-Y7E6EQc020er00aJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Y7E6EQc020er00aJ .rough-node .label,#mermaid-svg-Y7E6EQc020er00aJ .node .label,#mermaid-svg-Y7E6EQc020er00aJ .image-shape .label,#mermaid-svg-Y7E6EQc020er00aJ .icon-shape .label{text-align:center;}#mermaid-svg-Y7E6EQc020er00aJ .node.clickable{cursor:pointer;}#mermaid-svg-Y7E6EQc020er00aJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Y7E6EQc020er00aJ .arrowheadPath{fill:#333333;}#mermaid-svg-Y7E6EQc020er00aJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Y7E6EQc020er00aJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Y7E6EQc020er00aJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Y7E6EQc020er00aJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Y7E6EQc020er00aJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Y7E6EQc020er00aJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Y7E6EQc020er00aJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Y7E6EQc020er00aJ .cluster text{fill:#333;}#mermaid-svg-Y7E6EQc020er00aJ .cluster span{color:#333;}#mermaid-svg-Y7E6EQc020er00aJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Y7E6EQc020er00aJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Y7E6EQc020er00aJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-Y7E6EQc020er00aJ .icon-shape,#mermaid-svg-Y7E6EQc020er00aJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Y7E6EQc020er00aJ .icon-shape p,#mermaid-svg-Y7E6EQc020er00aJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Y7E6EQc020er00aJ .icon-shape .label rect,#mermaid-svg-Y7E6EQc020er00aJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Y7E6EQc020er00aJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Y7E6EQc020er00aJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Y7E6EQc020er00aJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} HTTP 请求数据
加入 TCP 头部
TCP 报文段
加入 IP 头部
IP 数据包
加入以太网头部和尾部
以太网帧
网卡发送比特

可以把每层动作理解为:

text 复制代码
上层 PDU
→ 作为本层 SDU
→ 本层添加 PCI
→ 形成新的本层 PDU

13.2 接收端解封装

接收端按相反方向处理:

text 复制代码
网卡接收帧
→ 链路层检查并去除链路头尾
→ IP 层检查目的地址并去除 IP 头
→ TCP 根据端口和连接状态处理报文段
→ 应用从 Socket 读取字节

每层只解释自己负责的控制信息,然后把负载交给上层。

14. 服务、接口和协议的关系

这三个概念容易混淆,可以用一个问题分别对应:

概念 回答的问题 网络编程中的例子
服务 下层能为上层做什么 TCP 提供可靠、有序的字节流传输
接口 上层怎样使用服务 应用调用 Socket API
协议 通信双方怎样实现和互操作 两端 TCP 按统一报文格式和状态机通信

#mermaid-svg-wPKx5ZL5ZO6tEuTw{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .error-icon{fill:#552222;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .marker.cross{stroke:#333333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wPKx5ZL5ZO6tEuTw p{margin:0;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .cluster-label text{fill:#333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .cluster-label span{color:#333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .cluster-label span p{background-color:transparent;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .label text,#mermaid-svg-wPKx5ZL5ZO6tEuTw span{fill:#333;color:#333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .node rect,#mermaid-svg-wPKx5ZL5ZO6tEuTw .node circle,#mermaid-svg-wPKx5ZL5ZO6tEuTw .node ellipse,#mermaid-svg-wPKx5ZL5ZO6tEuTw .node polygon,#mermaid-svg-wPKx5ZL5ZO6tEuTw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .rough-node .label text,#mermaid-svg-wPKx5ZL5ZO6tEuTw .node .label text,#mermaid-svg-wPKx5ZL5ZO6tEuTw .image-shape .label,#mermaid-svg-wPKx5ZL5ZO6tEuTw .icon-shape .label{text-anchor:middle;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .rough-node .label,#mermaid-svg-wPKx5ZL5ZO6tEuTw .node .label,#mermaid-svg-wPKx5ZL5ZO6tEuTw .image-shape .label,#mermaid-svg-wPKx5ZL5ZO6tEuTw .icon-shape .label{text-align:center;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .node.clickable{cursor:pointer;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .arrowheadPath{fill:#333333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wPKx5ZL5ZO6tEuTw .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wPKx5ZL5ZO6tEuTw .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wPKx5ZL5ZO6tEuTw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .cluster text{fill:#333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .cluster span{color:#333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wPKx5ZL5ZO6tEuTw rect.text{fill:none;stroke-width:0;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .icon-shape,#mermaid-svg-wPKx5ZL5ZO6tEuTw .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .icon-shape p,#mermaid-svg-wPKx5ZL5ZO6tEuTw .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .icon-shape .label rect,#mermaid-svg-wPKx5ZL5ZO6tEuTw .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wPKx5ZL5ZO6tEuTw .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wPKx5ZL5ZO6tEuTw .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wPKx5ZL5ZO6tEuTw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 调用接口
使用服务
遵守 TCP 协议
应用程序
Socket API
内核 TCP 实现
远端 TCP 实现

协议主要描述对等层之间的横向规则,服务和接口描述相邻层之间的纵向关系。

15. 与后续 Socket 编程的对应

学完本节后,后面的 API 才有明确位置:

后续概念 本节理论对应
socket() 创建应用访问传输层服务的 Socket
IP 地址 指定本地或远端网络地址
端口号 指定主机中的服务端点
SOCK_STREAM 通常选择 TCP 字节流服务
SOCK_DGRAM 通常选择 UDP 数据报服务
send / recv 应用通过接口提交和取得数据
网卡与驱动 在链路层和物理层完成实际收发

Socket 是操作系统提供给应用的编程接口。它本身不是 TCP、UDP 或 IP 协议,但可以让应用选择并使用这些协议提供的能力。

16. 可以立即做的观察练习

在 Linux 中运行:

bash 复制代码
ip addr
ip route
ss -lntup

观察:

  1. ip addr 中接口和 IP 地址的对应关系;
  2. ip route 中默认网关和路由条目;
  3. ss -lntup 中 TCP、UDP、本地地址和端口号;
  4. 同一个进程是否可能监听多个 Socket;
  5. 127.0.0.1 与网卡实际地址有什么不同。

这一步不要求写代码,目的是把"接口、IP、传输协议、端口、进程"对应起来。

17. 录音与教材表述校正

  1. 转写中的"操作编程"应为"Socket 编程"或"套接字编程"。
  2. OSI 是网络体系结构参考模型,不宜称为"法律上的标准"。TCP/IP 是互联网实际采用的协议族和实现框架。
  3. IP 地址不应简单等同于网址。域名可以解析为 IP 地址,而 URL 还包含协议、主机、端口、路径等信息。
  4. IP 地址更准确地标识网络接口;端口帮助传输层把数据分用到 Socket,不是端口直接"找到进程"。
  5. 数据链路层能检测某些链路错误,但不能独自保证端到端可靠传输。
  6. TCP 提供可靠、有序的字节流,不保留应用消息边界;一次发送的数据可能被多次接收,也可能与其他发送合并读取。
  7. UDP 不是"保证传过来但可能丢"。UDP 只提供数据报发送能力,不保证交付、顺序和去重。
  8. 现代交换式以太网的普通单播不会让所有节点都接收每个帧;广播只适用于特定目的地址和广播域。
  9. 网状网络可分全网状和部分网状,互联网不是所有终端之间全部直连。
  10. 教材把应用层写作"应用、表示、会话的简单合并"便于入门;实际协议分层可能跨越理论模型边界。
  11. PDU、Packet、Datagram 等术语在不同资料中可能有宽泛用法,应结合所在层和协议判断。

18. 本节最低掌握标准

学完后应能回答:

  1. LAN 与 Internet 有什么区别?
  2. 为什么网络要分层?
  3. OSI 七层、教学五层和 TCP/IP 四层怎样对应?
  4. TCP/IP 四层各自解决什么问题?
  5. IP 地址、传输层协议和端口号分别起什么作用?
  6. TCP 与 UDP 的最基本区别是什么?
  7. PDU、SDU、PCI 之间是什么关系?
  8. 什么是封装和解封装?
  9. 服务、接口和协议分别回答什么问题?
  10. Socket API 在分层模型中的位置是什么?

最低实践要求:

  • 能画出应用数据到以太网帧的封装顺序;
  • 能解释"IP 找主机接口,端口找 Socket"的含义;
  • 能读懂 IP:端口 形式,例如 192.168.1.10:8080;
  • 能使用 ip addr、ip route 和 ss 查看本机网络状态。

19. PDF 页码与录音时间索引

主题 PDF 页码 录音时间
Socket 编程章节入口 244 00:05---00:55
按地理范围和拓扑分类 245---246 00:56---03:22
按用途、交换方式和通信方式分类 246---247 03:23---05:23
分层原因及相关概念 247---248 05:25---08:49
OSI 七层模型 248---249 08:50---13:43
教学五层和 TCP/IP 四层模型 249---251 13:44---17:59
PDU、SDU、PCI 251---252 18:00---20:07
以太网通信的封装与解封装 252---253 20:08---21:31
服务、接口与协议 253---254 21:32---22:52
TCP 特性入口 254 教材下一部分,录音尚未正式展开

进一步核对资料:

20. 下一步学习

下一阶段应按下面顺序继续:

  1. IPv4 地址、子网掩码、默认网关和端口号;
  2. 主机字节序与网络字节序;
  3. sockaddr_in 地址结构;
  4. TCP 的连接、可靠字节流和三次握手;
  5. TCP 服务端:socket → bind → listen → accept → recv/send → close;
  6. TCP 客户端:socket → connect → send/recv → close;
  7. UDP:socket → sendto/recvfrom → close。

这节不需要背下所有网络名词。先确保自己能解释四层模型、IP 与端口、封装过程,后续写 Socket 程序时再把 API 放到对应层次中。

相关推荐
欣欣之王来了1 小时前
5G的行业应用:工业互联网、车联网、智慧医疗中的网络支撑
网络·学习·计算机网络·安全·教程
FACELESS VOID1 小时前
wsl下使用npm,错误识别到了windows下的npm
linux·windows·npm
小白的码BUG之路1 小时前
Docker -- 构建ruoyi-system镜像
运维·docker·容器
AOI小白新手上路1 小时前
视频去雨网络的模块缝合路线 · 实践笔记
网络·笔记·音视频
H.莓飛1 小时前
【数据结构】栈
linux·开发语言·数据结构·算法·centos
LRL_1 小时前
【云原生】Oracle Linux 9.6 离线(Air-Gapped)环境下安装 Longhorn 及其底层依赖(iSCSI/NFS)完全指南
linux·云原生·oracle
Brookty1 小时前
双向分流FIN标记、TCB服务逻辑与TCP断开连接流程介绍
网络·tcp
小白的码BUG之路2 小时前
Docker -- 构建redis镜像
运维·docker·容器
吴声子夜歌2 小时前
Nginx应用与运维——Nginx Web服务应用实战(HTTPS安全服务器的搭建)
运维·前端·nginx