欢迎光临
我们一直在努力

Linux网络篇1:网络协议入门:到底什么是“协议“?从约定到结构化数据的本质

先做个小测试。下面这个问题,很多人学完整个计算机网络课程也未必能一句话说清:

"协议到底是什么?"

你大概能背出几个名词:TCP、UDP、HTTP、IP……也能说出来"协议就是约定"。但要是再追问一句:"它到底怎么实现?跟代码有什么关系?"——很多人就卡住了。

这篇文章的目标,就是在接触任何具体协议之前,先把"协议"这个概念的底层逻辑彻底讲透。先立框架,再学细节,后面学 TCP、IP、HTTP 的时候,你会发现自己比别人快得多。


目录

一、计算机网络发展历程

1.独立模式

2.网络互联阶段

3.局域网 LAN

​编辑4.广域网 WAN

二、通信的前提:两台计算机必须"说同一种语言"

三、从"约定"到"协议":电话铃声里的道理

四、单靠约定不够:语言不通与标准化的必然

五、拓展:谁来制定标准?从 IEEE 到 W3C、3GPP

1.国际标准化组织

2.区域与行业组织

3.互联网工程组织

4.专注某一领域的"行业大佬"

5.公司

6.官方机构

六、协议的工程灵魂:为什么一定要分层

1.一个最简单的分层例子

2.拓展:分层带来的四个现实好处

七、拓展:OSI 七层,到底分成哪七层?

八、理论 vs 现实:为什么最终赢家是 TCP/IP

1.TCP/IP 五层(或四层)模型速查

2.一套经典的"分层 × 硬件"对应关系

九、用一段代码揭开本质:协议就是"双方都认识的结构化数据类型"

1.于是,协议有了一个非常朴素、也非常本质的定义

2.快递单类比

十、结语

1.一句话总结

2.一张思维导图



一、计算机网络发展历程

计算机网络的演进分为四个阶段:

1.独立模式

计算机彼此孤立,数据互不互通,多人使用只能排队等待处理任务,使用效率极低。

2.网络互联阶段

多台计算机接入服务器,实现数据集中共享,用户可自由切换业务,摆脱排队限制。

3.局域网 LAN

借助交换机、路由器连接大量终端,完成小范围设备组网通信。

4.广域网 WAN

将世界各地的局域网相互连通,实现远距离互联。

局域网与广域网是相对概念,大型广域网,也可以视作规模超大的局域网,二者共同组成现代互联网。

二、通信的前提:两台计算机必须"说同一种语言"

计算机为什么需要网络?因为人是"协作"的动物,而计算机是人制造的工具——人要协同工作,计算机就必须互联,所以网络的出现是必然的。

但把两台计算机用网线连起来,并不等于它们能通信。想想看:

  • 物理介质上传输的是光信号和电信号;
  • 信号通过"频率"和"强弱"来表示 0 和 1 这样的信息;
  • 可光是传出去一串 0/1 没有任何意义——对方根本不知道你在说什么。

就像两个人打电话:声音能传过去,但如果一个说中文、一个说葡萄牙语,那就是鸡同鸭讲。

所以通信的前提是:双方必须共享一套"语言规则"——数据按什么格式组织、先发什么后发什么、谁代表地址、谁代表内容。这套规则,就是协议最初的样子。


三、从"约定"到"协议":电话铃声里的道理

理解"协议"最好的方式,是从生活里找类比。

打电话的例子:你给朋友打电话,双方约定电话铃响几声代表某个信号——比如响一声挂断代表"到了",响两声挂断代表"先走"。这个"响几声"的约定,就是一种最朴素的口头协议。

把场景升级到计算机世界:

  • 计算机之间要约定:信号用频率表示还是用强弱表示?
  • 数据的格式怎么定义?哪些位是地址,哪些位是数据,数据多长?
  • 传完之后如何告诉对方"我说完了"?

这些必须提前约定好,否则对方收到的只是一堆毫无意义的 0/1。

所以,协议的第一层理解:它是通信双方共同遵守的一套约定。


四、单靠约定不够:语言不通与标准化的必然

问题来了:只要通信的两台主机私下约定好协议,就可以了吗?

答案是:不行。

你用"频率"表示 0/1,我用"强弱"表示 0/1——就好比你说中国话、我说葡萄牙语。即便我们遵守的是同一套通信流程(都是先说地址再说数据),底层语言都不同,定好的协议也形同虚设,双方依旧无法正常通信。

所以一个完善的协议,必须包含更多、更细致的规则,并且让参与通信的每一方都遵守。

再把视角拉远一点,你会发现标准化是必然的:

  • 计算机生产厂商有很多;
  • 操作系统有很多;
  • 网络硬件设备还是有很多。

如何让这些不同厂商生产的设备能顺畅地互相通信? 唯一的出路是:有人站出来,定一个共同标准,大家都遵守。 这个"共同标准",才是我们常说的"网络协议"。


五、拓展:谁来制定标准?从 IEEE 到 W3C、3GPP

能定标准的基本都是"业界公认、有江湖地位"的组织。除了IEEE、ISO、ITU、IETF,现实世界还有很多组织在背后默默制定着我们每天用到的协议。这里做一次扩充整理:

1.国际标准化组织

组织全称主要贡献
IEEE 电气和电子工程师协会 制定全球电气、电子和计算机科学领域约 30% 的标准;IEEE 802 系列覆盖局域网到广域网的各种网络技术(Wi-Fi 的 802.11 就是它的杰作)
ISO 国际标准化组织 主导了 OSI 开放系统互连模型,定义了网络通信的七层协议结构
ITU 国际电信联盟 联合国下属专门机构,制定电话与网络通信的电信级标准,与 ISO 合作保障全球互操作

2.区域与行业组织

  • ETSI(欧洲电信标准学会):欧洲各国政府资助,覆盖从研究到标准制定的电信全链条。
  • ASTAP(亚洲与泛太平洋电信标准化协会):1998 年由日韩发起,协调亚太地区信息通信基础设施的标准化。

3.互联网工程组织

  • IETF(互联网工程任务组):互联网真正的"立法机关"。TCP/IP 协议族几乎全部由它制定,通过 RFC(Request For Comments)文档发布——你现在看到的任何网络协议规范,几乎都能在 RFC 里找到原文。

4.专注某一领域的"行业大佬"

组织领域
W3C(万维网联盟) HTML、CSS、Web 标准
3GPP(第三代合作伙伴计划) 移动通信标准,4G/5G 的制定者
蓝牙 SIG(蓝牙技术联盟) 蓝牙协议
GSMA 全球移动通信协会,SIM 卡、移动服务规范

5.公司

一些公司也自研标准协议栈,例如泰凌微自研低功耗蓝牙、Zigbee、Thread、Matter 等协议栈并可定制化,这是其核心竞争力。

6.官方机构

  • FCC(美国联邦通信委员会):美国官方通信管理机构,监管无线电、电视和有线通信,审查通信产品技术特性。

小结:标准不是谁想定就能定的,它需要权威、共识和生态。 理解"标准从哪来",你就明白了为什么全世界数以亿计的设备能互相通信——因为它们遵守的是同一套"世界通用语言"。


六、协议的工程灵魂:为什么一定要分层

有了标准,问题解决了吗?还没有。因为真实的网络协议极其复杂,如果做成一个"大礼包",任何厂商都维护不起。

这里有个非常关键的思维:

协议本质也是软件。 软件设计追求模块化、解耦合,所以协议也被设计成了层状结构。

1.一个最简单的分层例子

假设我们的"协议"只有两层:语言层 + 通信设备层。

  • 通信设备层负责"怎么把电信号发出去"(相当于电话线);
  • 语言层负责"我要表达什么意思"(相当于中文还是英文)。

想换语言?只改语言层。想换传输介质?只改设备层。两层互不影响,各改各的——这就是解耦合。真实的网络协议比这复杂得多,要分更多层,但设计哲学是一样的:分层让软件维护成本更低。

2.拓展:分层带来的四个现实好处

  • 解耦合:改一层不影响其他层,维护成本低;
  • 各层可独立演进:比如把双绞线换成光纤(物理层升级),上面的 HTTP 完全不用动;
  • 职责清晰:每一层只解决一类问题,出错时容易定位"是哪一层的问题";
  • 不同厂商可以专攻某一层:做路由器的专注网络层,做网卡的专注链路层,生态繁荣。

  • 七、拓展:OSI 七层,到底分成哪七层?

    OSI七层参考模型是ISO(国际标准化组织)制定的网络理论标准。OSI作为参考规范,其分层思想被实际使用的TCP/IP模型借鉴,但互联网并未完全实现OSI标准。

    课程里提到 OSI 七层模型时只说"把网络逻辑上分成 7 层",但常常不展开。这里把每一层补全——这是理解整个网络的坐标系,值得先记下来。

    层号名称核心职责典型协议/设备
    7 应用层 面向用户的应用交互 HTTP、FTP、SMTP、DNS
    6 表示层 数据格式转换、加密压缩 JPEG、ASCII、TLS(可归此层)
    5 会话层 建立/管理/终止会话 NetBIOS、RPC
    4 传输层 端到端的可靠传输 TCP、UDP
    3 网络层 地址管理与路由选择 IP、路由器
    2 数据链路层 帧的传送与差错检测 以太网、交换机
    1 物理层 光/电信号的传输方式 双绞线、光纤、Hub

    OSI 模型最大的贡献,是把 服务、接口、协议 三个概念清晰区分开:

    • 协议:同层之间如何通信的规则(对等层之间说话用的语言);
    • 接口:本层如何被上层调用(上下层之间的"电话");
    • 服务:本层能为上层提供什么能力(上层能获得的东西)。

    这个概念区分是网络理论里最精华的部分,后面写 Socket 程序时你会真切体会到"接口"的分量。


    八、理论 vs 现实:为什么最终赢家是 TCP/IP

    你可能要问:OSI 七层这么完美,为什么实际用的是 TCP/IP 五层(或四层)?

    真实原因是多方面的:

  • OSI 太"重":七层中会话层、表示层的功能在实际操作中很难落地到操作系统,工程上往往被"合并吸收",最终实际落地的是五层结构;
  • OSI 来得太晚:OSI 还在"设计图纸"阶段时,TCP/IP 已经在 ARPANET 上跑起来了,先发优势巨大;
  • TCP/IP 免费、开放、有实现:几乎所有操作系统内核都内置了 TCP/IP 协议栈,想不用都难;
  • TCP/IP 更务实:它不追求理论上的完美分层,而是"够用就行"。
  • 1.TCP/IP 五层(或四层)模型速查

    层级职责典型协议对应设备
    应用层 应用程序之间沟通 HTTP、SMTP、FTP、Telnet ——
    传输层 两台主机之间的数据传输 TCP(可靠)、UDP(不可靠) ——
    网络层 地址管理和路由选择 IP(用 IP 地址标识主机、用路由表规划路径) 路由器
    数据链路层 设备之间数据帧的传送与识别 帧同步、冲突检测、差错校验、以太网 交换机
    物理层 光/电信号的传递方式 双绞线、同轴电缆、光纤、Wi-Fi 集线器

    物理层的性能决定了最大传输速率、传输距离和抗干扰性。因为网络编程主要关注软件内容,物理层考虑得少,所以很多场合直接称 TCP/IP 四层模型。

    2.一套经典的"分层 × 硬件"对应关系

    • 主机:内核实现了从传输层到物理层(应用层是用户程序);
    • 路由器:实现了从网络层到物理层;
    • 交换机:实现了从数据链路层到物理层;
    • 集线器(Hub):只实现了物理层。

    注意"并不绝对":很多交换机支持网络层转发,很多路由器能做端口转发。但记住这张主力分工图,就是理解整个网络的地图。


    九、用一段代码揭开本质:协议就是"双方都认识的结构化数据类型"

    概念讲了这么多,协议的"本质"到底长什么样?别急,一段 C 代码直接把它戳破。

    操作系统源码一般用 C/C++ 编写。设想通信双方定义了一个一模一样的结构体:

    // 通信双方都"复制粘贴"了这份代码
    struct protocol
    {
    int a; // 4 字节
    int b; // 4 字节
    int c; // 4 字节
    };

    // 发送方:构造数据并发出去
    struct protocol data = {10, 20, 30};
    send_data(&data, sizeof(data));

    接收方收到一串字节流后,只要按同一个结构体去解析,就能还原出 a = 10, b = 20, c = 30。

    📌 问题:主机 B 能识别 data,并准确提取出 a=10、b=20、c=30 吗?

    回答:答案是肯定的! 因为双方都有同样的结构体类型 struct protocol。

    • 用同样的代码实现协议;
    • 用同样的数据类型定义数据。

    双方天然就具有"共识",能够解析对方发来的数据——这不就是约定吗?

    这也就解释了为什么Linux和Windows之间可以进行互相联系了

    1.于是,协议有了一个非常朴素、也非常本质的定义

    所谓协议,就是通信双方都认识的、结构化的数据类型。

    再深入一层:因为协议栈是分层的,所以每一层都有双方共同遵守的协议。同层之间,互相能识别对方的协议——应用层对应用层、传输层对传输层、网络层对网络层……每一层的"结构体"长什么样、怎么解析,都由这一层的协议规定。

    2.快递单类比

    网购商品时,商家把商品(应用层数据)装进箱子,贴上快递单(这一层协议规定的头部信息);快递分拣中心把它装进更大的包裹,再贴一张运输单(下一层协议的头部)……数据每经过一层就被"套"上一层信息。收件时,每一层再一层层拆开,最终把商品送到你手上。

    数据向下每过一层就"封装"一次,向上每过一层就"解包"一次——这就是协议分层在数据传输上的真实写照。


    十、结语

    1.一句话总结

    网络让计算机互联,协议是通信双方共同遵守的约定;因为问题能分层,协议也分层实现;而协议的本质,是通信双方都认识的结构化数据类型(struct protocol),数据的流动靠"封装—解包"完成。

    2.一张思维导图

    网络协议入门
    ├── 通信前提:说同一种语言(约定数据格式)
    ├── 协议是什么:一种约定
    │ ├── 光有约定不够 → 语言必须相通
    │ └── 需要公认标准 → IEEE / ISO / ITU / IETF / W3C / 3GPP …
    ├── 协议分层
    │ ├── 软件分层的启示:模块化、解耦合
    │ ├── OSI 七层模型(理论完整、工程太重)
    │ └── TCP/IP 五层/四层模型(实际落地)
    │ └── 主机 / 路由器 / 交换机 / 集线器的分层分工
    ├── 协议本质:通信双方都认识的结构化数据类型
    │ └── struct protocol 示例:同样的代码 + 同样的类型 = 共识
    └── 数据流动:报头 + 有效载荷 = 报文,封装 → 传输 → 解包

    每一步都紧扣今天建立的框架——分层、结构化数据、封装解包——你会发现,网络其实没有想象中那么难。

    如果你觉得这篇有帮助,欢迎点赞、收藏、关注,我们下一篇见!

    赞(0)
    未经允许不得转载:171主机测评 » Linux网络篇1:网络协议入门:到底什么是“协议“?从约定到结构化数据的本质
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址