首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Linux网络编程】(二)计算机网络概念进阶:彻底搞懂协议本质、传输流程与封装分用

【Linux网络编程】(二)计算机网络概念进阶:彻底搞懂协议本质、传输流程与封装分用

作者头像
_OP_CHEN
发布2026-03-22 08:25:08
发布2026-03-22 08:25:08
740
举报
文章被收录于专栏:C++C++

前言

       上一篇我们聊了计算机网络的起源与协议的基本概念,知道了网络是为了连接、协议是为了沟通。但这只是入门 ——协议到底在代码里长什么样?数据怎么从一台电脑跑到另一台?封装、分用、MAC、IP、端口到底在干嘛?这篇文章带你进入网络概念进阶,吃透「再识协议」「网络传输基本流程」全部核心,为 Socket 编程打下硬核基础。下面就让我们正式开始吧!


一、再识协议:从 “约定” 到 “代码级理解”

        很多同学学到协议,总停留在 “规则、约定” 这种抽象词上。但真正的网络工程师 / 开发者眼里,协议是可落地、可编码、可解析的结构化数据。我们从三个问题重新认识协议。

1.1 为什么需要 TCP/IP 协议?

        答案非常扎心:因为设备离远了!

  • 单机内部:内存、磁盘、CPU 通信距离极近,问题少,用 SATA、IDE、内存协议就行,感知不到。
  • 网络通信:两台主机可能隔一座城、一个大洋,距离带来三大问题:
    1. 信号衰减、干扰
    2. 不知道对方是谁
    3. 不知道数据发给谁、怎么传、丢了怎么办

        所以 TCP/IP 不是凭空造的,是为了解决 “远距离通信” 而生的一套完整解决方案

1.2 协议在代码里到底是什么?

协议 = 通信双方都认识的结构化数据类型

        操作系统内核、网络协议栈几乎都是 C/C++ 写的,协议最直观的体现就是:双方用一模一样的结构体

        我们直接上代码理解:

代码语言:javascript
复制
// 通信双方 100% 相同的协议结构体
struct NetProtocol {
    int a;     // 自定义字段1
    int b;     // 自定义字段2
    int c;     // 自定义字段3
    char payload[1024];  // 真正要传的数据
};

        发送端代码:

代码语言:javascript
复制
// 发送端构建协议数据
struct NetProtocol data;
data.a = 10;
data.b = 20;
data.c = 30;
strcpy(data.payload, "Hello Network!");

// 发送到网络(socket 发送)
send(sockfd, &data, sizeof(data), 0);

        接收端代码:

代码语言:javascript
复制
// 接收端用完全一样的结构体解析
struct NetProtocol recv_data;
recv(sockfd, &recv_data, sizeof(recv_data), 0);

// 直接读取!因为结构一致,天然能识别
printf("a=%d, b=%d, c=%d\n", recv_data.a, recv_data.b, recv_data.c);
printf("payload: %s\n", recv_data.payload);

        结论:只要双方结构体一致,就能正确解析。这就是协议最朴素、最本质的样子 ——共识 = 相同结构

1.3 协议为什么要分层?

        因为问题本身就能分层!

  • 物理层:解决 0/1 信号怎么传
  • 数据链路层:解决局域网内设备怎么找
  • 网络层:解决跨网怎么路由
  • 传输层:解决可靠传输、发给哪个进程
  • 应用层:解决具体业务(网页、邮件、文件)

        分层 = 解耦 + 模块化 + 易维护。改物理层不影响应用层,换应用不影响底层传输。这就是软件工程的经典思想。


二、网络传输基本流程:数据从出发到抵达全链路

        我们把网络传输拆成两块:

  1. 同一局域网(以太网)内怎么传
  2. 跨网段(广域网)怎么传

        先从最简单、最核心的局域网通信开始。

2.1 局域网通信:以太网是怎么工作的?

        同一个局域网内的两台主机可以直接通信,原理像 “教室喊话”。

2.1.1 唯一标识:MAC 地址

        每块网卡出厂就带一个全球唯一的地址:MAC 地址

  • 48 位(6 字节)
  • 格式:08:00:27:03:fb:19
  • 固化在硬件,一般不可改

        Windows 查看 MAC 命令(bash):

代码语言:javascript
复制
ipconfig /all

        Linux 查看 MAC:

代码语言:javascript
复制
ip link
ifconfig -a
2.1.2 以太网规则:同一时刻只能一人说话

        以太网是共享信道

  • 多台主机同时发 → 信号碰撞 → 数据错乱
  • 所以必须:碰撞检测 + 自动重发

        因此在没有交换机时,整个网络就是一个冲突域

2.1.3 局域网收发逻辑

  1. 主机 A 封装数据,填上目标 MAC
  2. 发到局域网广播
  3. 所有主机都能收到,但只看目标 MAC
  4. 匹配自己 MAC 就留下,不匹配就丢弃

2.2 封装与分用:网络世界的 “快递打包”

        这是网络最核心的流程,所有网络通信都绕不开

2.2.1 三个必背概念

  • 报头 Header:每层协议的结构体(控制信息)
  • 有效载荷 Payload:真正要传的数据
  • 报文 = 报头 + 有效载荷
2.2.2 不同层的数据包叫法(面试常考)

  • 应用层:数据 Data
  • 传输层:段 Segment(TCP 段、UDP 段)
  • 网络层:数据报 Datagram(IP 数据报)
  • 数据链路层:帧 Frame(以太网帧)
2.2.3 封装:自上而下层层加头

        数据发送流程:

        就像寄快递:物品(payload)→ 装盒子(应用)→ 贴快递单(传输)→ 贴路由单(网络)→ 贴派送单(链路)

2.2.4 分用:自下而上层层剥头

        分用就是接收端的逆过程:

        一句话总结:发送端自上而下封装,接收端自下而上分用

三、跨网传输:IP 地址与路由的真相

        局域网能直接通信,跨网必须经过路由器

3.1 认识 IP 地址

        IP 地址用来标识网络中的主机

  • IPv4:32 位,4 字节,点分十进制 192.168.1.1
  • 范围:0~255

        查看本机 IP(Windows):

代码语言:javascript
复制
ipconfig

        Linux:

代码语言:javascript
复制
hostname -I
ifconfig

3.2 IP 与 MAC 的核心区别(面试必考)

  • 目的 IP:全程不变,是最终目标地址
  • MAC:每经过一个路由都会变,是下一跳地址

        我们来比喻一下:

  • IP = 最终收货地址
  • MAC = 下一站快递站地址

        总而言之就是:路由器只看 MAC 转发,全球路由只看 IP 寻址。

3.3 网络层的意义:屏蔽底层差异

        IP 网络层创造了一个虚拟层:不管你是以太网、WiFi、4G、光纤,统统变成 IP 网络。这才是互联网能互联互通的根本原因。


总结

        本文全部都是考试、面试、开发的必考核心知识。下一篇我们正式进入 Socket 编程相关知识与实战,自己写出 TCP/UDP 服务器与客户端!         原创不易,点赞 + 收藏 + 关注,后续持续更新网络底层、操作系统、后端开发干货!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、再识协议:从 “约定” 到 “代码级理解”
    • 1.1 为什么需要 TCP/IP 协议?
    • 1.2 协议在代码里到底是什么?
    • 1.3 协议为什么要分层?
  • 二、网络传输基本流程:数据从出发到抵达全链路
    • 2.1 局域网通信:以太网是怎么工作的?
      • 2.1.1 唯一标识:MAC 地址
      • 2.1.2 以太网规则:同一时刻只能一人说话
      • 2.1.3 局域网收发逻辑
    • 2.2 封装与分用:网络世界的 “快递打包”
      • 2.2.1 三个必背概念
      • 2.2.2 不同层的数据包叫法(面试常考)
      • 2.2.3 封装:自上而下层层加头
      • 2.2.4 分用:自下而上层层剥头
  • 三、跨网传输:IP 地址与路由的真相
    • 3.1 认识 IP 地址
    • 3.2 IP 与 MAC 的核心区别(面试必考)
    • 3.3 网络层的意义:屏蔽底层差异
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档