一、协议
我们可以将敲一声铃铛规定为字母a,两声为字母b......以此类推,我们就可以建立起一套通话规则进行人与人之间的交流,这种规定就可以看成协议。
当互联网出现,人与人之间的交流可以通过手中的机器实现时,就必定会出现一套针对市场上所有机器的协议。只有这样,机器之间的交流才会变得规范,可行。
协议分层
协议分成就是把复杂的交流,拆成好几层简单的规则,一层管一件事,互不干扰。为什么要这么设计呢?
就拿上面铃铛的例子来讲,实际交流中还会遇到听不清、敲太快分不清、不知对方是否收到、何时结束等问题,若把所有规则混在一起会杂乱难改。因此将铃铛通信规则分成多层,每层各司其职:最下层负责铃铛发声大小、间隔等信号传递,上层负责规整敲声避免混乱,再上层确定传递对象,接着负责确认接收与重发,最上层才是敲声与字母的对应规则。下层支撑上层,上层无需关心下层实现,更换铃铛只需改动底层,内容规则不受影响。
OSI七层模型

按照OSI七层模型可以将敲铃铛分为七层:
- 物理层 :铃铛怎么敲、声音多大、用什么铃铛(只传信号)
- 数据链路层 :规定敲几下一组、别敲太快听混(整理信号)
- 网络层 :这串铃铛声传给谁、传给哪个人(寻址找目标)
- 传输层 :对方收到没?没收到就重敲一遍(保证送达)
- 会话层 :什么时候开始敲、什么时候停、谁先敲(控制对话)
- 表示层 :把敲声转成字母、加密或翻译(统一格式)
- 应用层 :直接用来聊天、传话、表达意思(用户真正用的)
OSI 七层模型理论完整 ,但会话层、表示层难以在系统中独立实现,因此实际网络工程中采用合并了这两层的五层协议模型。
因为是刚入网络部分,上面的内容还需要后续的深入学习才能彻底明白,现在先记个大概。
TCP/IP五层协议
TCP/IP 并非单个协议,而是由众多协议共同组成的TCP/IP 协议簇。它采用 5 层层级结构,每一层都会调用下一层提供的网络服务来满足自身需求。
物理层负责光、电信号的传输方式,像以太网网线、光纤、WiFi 所用电磁波都属于这一层,它决定了网络最大传输速率、传输距离和抗干扰性,集线器(Hub)工作在物理层;
数据链路层负责设备间数据帧的传送与识别,完成网卡驱动、帧同步、冲突检测、数据差错校验等工作,对应以太网、无线 LAN 等标准,交换机(Switch)工作在数据链路层;
网络层负责地址管理和路由选择,比如通过 IP 地址标识主机,依靠路由表规划数据传输线路,路由器(Router)工作在网络层;
传输层负责两台主机之间的数据传输,例如 TCP 协议可确保数据可靠地从源主机传输到目标主机;
应用层负责应用程序之间的沟通,比如邮件传输(SMTP)、文件传输(FTP)、网络远程访问(Telnet)等,我们日常的网络编程主要针对应用层展开。
为什么要有TCP/IP协议
首先,就算是单机,计算机内部本身就存在各类通信协议 ,比如硬件和内存通信有内存协议,硬件和磁盘通信有磁盘相关协议,只是我们日常感知不到。而且这些协议只服务于本地主机内部的硬件,通信距离近、场景简单,需要解决的问题很少。
其次,网络通信和本地硬件通信最大的区别,就是不同主机之间的距离被拉远了,通信场景变得复杂,随之出现了很多新的传输问题,想要解决这些远距离、跨设备的通信问题,就需要一套专门的新协议,这就是 TCP/IP 协议存在的意义。
TCP/IP协议与OS之间的关系

图中左右两侧分别是 Windows 和 Linux 的系统架构:两者的用户操作、shell 界面、内核实现细节都有差异,但网络协议栈必须严格遵循 TCP/IP 国际标准实现。
传输层(TCP)、网络层(IP)是协议栈的核心,必须实现在操作系统内核中 ------ 无论 OS 是什么,这部分的协议逻辑必须完全一致,这是不同主机能互相通信的秘密。
协议的本质
不同操作系统就像不同国家的人,母语(系统实现)不同,但要交流必须用同一套国际通用语言(TCP/IP 协议栈)。TCP/IP 就是网络世界的 "通用语",核心规则(TCP/IP)被写进系统内核,保证所有人都遵循同一套标准,应用层就是用这套 "语言" 说不同的话(不同的网络应用)。

网络协议的本质就是一个双方必须完全一致的结构类型,发送方主机按照这个结构体的规则把数据塞进去,接收方主机拿着同一个结构体按照相同的规则把数据拆出来,这样数据就能被正确读取。
比如主机A定义`struct protocol { int a; int b; int c; };`并填入`{10,20,30}`,发送的就是按int顺序排列的12字节二进制数据,主机B只要用完全一样的结构体,先读4字节得a=10,再读4字节得b=20,最后读4字节得c=30,不管双方系统是Windows还是Linux、硬件怎么不一样,只要结构体完全相同,就能准确解析数据,这就是跨机器通信能正确的核心原因。
二、网络传输基本流程
局域网的通信
以太网
几个电脑之间用网线之间连起来,就算没有连上互联网,被几根网线链接起来的电脑依旧可以联机玩些联机游戏开房间,发送文件。这就是典型的以太网。
凡是用网线 / 光纤 连接电脑、交换机、路由器组成的本地网络,基本都是以太网,它是现代局域网最基础、最稳定的底层通信方式。
稍微注意一下,以太网专指有线标准,我们常用的 Wi-Fi 是无线局域网标准,和以太网并列、功能类似,但不属于以太网。
MAC地址初识
MAC 地址也叫物理地址 / 硬件地址 ,是工作在数据链路层、用来唯一标识网卡设备的固定地址,长度为 48 比特(6 个字节),标准格式为 16 进制数字加冒号分隔(例:08:00:27:03:fb:19);
它由网卡厂商在出厂时烧录到芯片中,理论上全球唯一,多数设备默认不可修改,虚拟机的 MAC 为虚拟生成、可能重复,部分网卡支持手动修改 MAC;
其核心作用是仅在同一局域网内实现设备寻址,同一局域网中 MAC 必须唯一

局域网内主机收到报文后,会通过比对目标 MAC 地址判断数据是否发给自己,匹配则接收,不匹配则丢弃。
数据碰撞
在以太网中,同一时刻只能有一台设备向外发送数据,多台设备同时发送会产生信号干扰,这种情况就是数据碰撞 。所有参与通信的主机都需要具备碰撞检测(CD)与 碰撞避免(CA)机制,来减少和处理冲突。在没有交换机、仅用集线器组网的环境下,整个以太网共享同一传输通道,属于同一个碰撞域。
从系统角度理解:网卡负责硬件层面的信号收发与碰撞检测,操作系统内核通过数据链路层协议,解析以太网帧中的源 / 目的 MAC 地址,完成局域网内的设备识别与数据交付,这也是以太网底层通信的核心逻辑。
通信栈


发送方(主机 1):数据封装过程
发送数据时,数据从应用层向下逐层传递,每一层都会给上层数据加上本层的协议报头(即我们之前说的 "结构体"),完成封装:
- 应用层 :用户 A 生成原始业务数据
"你好",应用层(如 HTTP、FTP)加上应用层报头,封装成应用层数据。 - 传输层 :将应用层数据作为 payload,加上传输层报头(如 TCP 头,含端口、序号、校验和等),封装成传输层报文段。
- 网络层 :将传输层报文段作为 payload,加上网络层报头(如 IP 头,含源 / 目的 IP、TTL 等),封装成 IP 数据包。
- 数据链路层 :将 IP 数据包作为 payload,加上链路层报头(如以太网帧头,含源 / 目的 MAC、帧校验等),封装成以太网帧。
- 物理层:网卡将以太网帧转换为比特流(电 / 光 / 无线信号),通过物理网络发送给主机 2。
特点:每一层仅给上层数据加本层报头,不修改上层内容,最终形成
链路报头+网络报头+传输层报头+应用层报头+"你好"的完整数据帧,像 "套娃" 一样层层嵌套。
接收方(主机 2):数据解封装 / 分用过程
接收数据时,数据从物理层向上逐层传递,每一层都会剥掉本层的协议报头,完成解封装,最终还原原始数据:
- 物理层:网卡接收比特流,还原成完整的以太网帧,交给数据链路层。
- 数据链路层 :剥掉链路层报头,校验 MAC 地址、帧完整性,将 IP 数据包交给网络层。
- 网络层 :剥掉网络层报头,校验 IP 地址、TTL,将传输层报文段交给传输层。
- 传输层 :剥掉传输层报头,校验端口、序号、校验和,将应用层数据交给应用层。
- 应用层 :剥掉应用层报头 ,还原出原始数据
"你好",最终交给用户 B。
特点:与封装过程完全逆序,每一层只处理自己的报头,不关心上层内容;接收方根据报头中的标识(如端口号、协议号),将数据分发给对应的上层协议 / 应用,这个过程称为分用(Demultiplexing)。
通信栈的价值
- 解耦:各层独立实现、独立升级,互不干扰。比如从 IPv4 升级到 IPv6,仅修改网络层,应用层、传输层完全无需改动;从百兆网升级到万兆网,仅修改物理层 / 数据链路层,上层无感知。
- 标准化:每一层的协议(结构体)由国际标准统一规定,保证全球设备互通。
- 可扩展性:可以在现有分层架构上新增协议、功能,不破坏原有体系。
报头 = 协议的结构体
每一层的报头,本质就是我们之前说的「双方必须完全一致的结构体」:
-
发送方按结构体格式填字段、打包数据;
-
接收方按完全相同的结构体格式读字段、解析数据;
-
只要结构体(协议格式)完全一致,无论操作系统、硬件如何不同,都能正确还原数据。
层级 报头标准名称 报头核心作用 对应核心知识点 数据链路层 以太网帧头(Ethernet Header) 解决局域网内的设备寻址与物理传输 用 MAC 地址唯一标识目标网卡,保证数据在同一局域网内精准送达目标设备;同时承载帧校验序列(FCS)、冲突处理相关字段,保障链路层传输的完整性 网络层 IP 报头(IP Header) 解决跨网络的全局路由与寻址 用 IP 地址标识目标主机,承载源 / 目的 IP、TTL、路由标识等字段,让数据可经过多个路由器跨网段传输,最终送达全球任意联网设备;无 IP 报头则数据仅能在局域网内传输,无法接入互联网 传输层 TCP/UDP 报头(TCP/UDP Header) 解决端到端的进程通信与可靠性 用端口号唯一标识目标主机上的具体应用(如微信、浏览器);TCP 报头额外承载序号、确认号、重传、流量控制、拥塞控制等字段,保证数据 100% 可靠、不丢包、不乱序;UDP 报头则以极简结构实现低延迟传输 应用层 应用协议报头(如 HTTP Header、FTP Header) 解决应用之间的业务交互 定义业务数据的格式、语义与交互规则,例如 HTTP 报头会声明请求方法(GET/POST)、资源路径、编码格式、缓存策略等,让通信双方的应用能准确解析业务数据
上面的知识点后面会深入学习,目前了解大概就行。
返回发包和解包,每一次的发包和解包都是一次入栈、出栈的过程,故会被称为通信栈。
跨网络的通信
IP地址初识
世界很大,我想去看看。出门旅游,最值得重视的就是目的地。互联网很大,为了使得数据能从一台机器精准的传输至另一台指定机器,每个机器都会被分配一个全球唯一的IP地址,类似于我们的身份证。
IP 协议有 IPv4 和 IPv6 两个版本,如无特殊说明一般默认指 IPv4;
IP 地址是 IP 协议里用于标识网络中不同主机的地址,IPv4 的 IP 地址为 4 字节(32 位)的整数,通常采用点分十进制的字符串形式表示(如 192.168.0.1),以点分隔的每个数字对应一个字节,取值范围 0~255
跨网通信的核心逻辑
跨网通信,就是数据从源主机所在的局域网出发,经过路由器在多个网络之间接力转发,最终抵达目标主机所在的局域网。
结合 IP 与 MAC 联合工作的逻辑就是:
- IP 地址:从头到尾不变,用来标识 "起点是哪个网络、终点是哪个网络",路由器靠它决定往哪个方向转发;
- MAC 地址:只在当前局域网内有效,每经过一个路由器就会被替换一次,负责把数据包在当前这段局域网里,准确送到下一跳设备。
