先做个小测试。下面这个问题很多人学完整个计算机网络课程也未必能一句话说清协议到底是什么你大概能背出几个名词TCP、UDP、HTTP、IP……也能说出来协议就是约定。但要是再追问一句它到底怎么实现跟代码有什么关系——很多人就卡住了。这篇文章的目标就是在接触任何具体协议之前先把协议这个概念的底层逻辑彻底讲透。先立框架再学细节后面学 TCP、IP、HTTP 的时候你会发现自己比别人快得多。目录一、计算机网络发展历程1.独立模式2.网络互联阶段3.局域网 LAN编辑4.广域网 WAN二、通信的前提两台计算机必须说同一种语言三、从约定到协议电话铃声里的道理四、单靠约定不够语言不通与标准化的必然五、拓展谁来制定标准从 IEEE 到 W3C、3GPP1.国际标准化组织2.区域与行业组织3.互联网工程组织4.专注某一领域的行业大佬5.公司6.官方机构六、协议的工程灵魂为什么一定要分层1.一个最简单的分层例子2.拓展分层带来的四个现实好处七、拓展OSI 七层到底分成哪七层八、理论 vs 现实为什么最终赢家是 TCP/IP1.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 协议族几乎全部由它制定通过RFCRequest 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、DNS6表示层数据格式转换、加密压缩JPEG、ASCII、TLS可归此层5会话层建立/管理/终止会话NetBIOS、RPC4传输层端到端的可靠传输TCP、UDP3网络层地址管理与路由选择IP、路由器2数据链路层帧的传送与差错检测以太网、交换机1物理层光/电信号的传输方式双绞线、光纤、HubOSI 模型最大的贡献是把服务、接口、协议三个概念清晰区分开协议同层之间如何通信的规则对等层之间说话用的语言接口本层如何被上层调用上下层之间的电话服务本层能为上层提供什么能力上层能获得的东西。这个概念区分是网络理论里最精华的部分后面写 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并准确提取出 a10、b20、c30 吗回答答案是肯定的因为双方都有同样的结构体类型struct protocol。用同样的代码实现协议用同样的数据类型定义数据。双方天然就具有共识能够解析对方发来的数据——这不就是约定吗这也就解释了为什么Linux和Windows之间可以进行互相联系了1.于是协议有了一个非常朴素、也非常本质的定义所谓协议就是通信双方都认识的、结构化的数据类型。再深入一层因为协议栈是分层的所以每一层都有双方共同遵守的协议。同层之间互相能识别对方的协议——应用层对应用层、传输层对传输层、网络层对网络层……每一层的结构体长什么样、怎么解析都由这一层的协议规定。2.快递单类比网购商品时商家把商品应用层数据装进箱子贴上快递单这一层协议规定的头部信息快递分拣中心把它装进更大的包裹再贴一张运输单下一层协议的头部……数据每经过一层就被套上一层信息。收件时每一层再一层层拆开最终把商品送到你手上。数据向下每过一层就封装一次向上每过一层就解包一次——这就是协议分层在数据传输上的真实写照。十、结语1.一句话总结网络让计算机互联协议是通信双方共同遵守的约定因为问题能分层协议也分层实现而协议的本质是通信双方都认识的结构化数据类型struct protocol数据的流动靠封装—解包完成。2.一张思维导图网络协议入门 ├── 通信前提说同一种语言约定数据格式 ├── 协议是什么一种约定 │ ├── 光有约定不够 → 语言必须相通 │ └── 需要公认标准 → IEEE / ISO / ITU / IETF / W3C / 3GPP ... ├── 协议分层 │ ├── 软件分层的启示模块化、解耦合 │ ├── OSI 七层模型理论完整、工程太重 │ └── TCP/IP 五层/四层模型实际落地 │ └── 主机 / 路由器 / 交换机 / 集线器的分层分工 ├── 协议本质通信双方都认识的结构化数据类型 │ └── struct protocol 示例同样的代码 同样的类型 共识 └── 数据流动报头 有效载荷 报文封装 → 传输 → 解包每一步都紧扣今天建立的框架——分层、结构化数据、封装解包——你会发现网络其实没有想象中那么难。如果你觉得这篇有帮助欢迎点赞、收藏、关注我们下一篇见