
🎬 个人主页 :艾莉丝努力练剑
❄专栏传送门 :《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》
《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》
⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平
🎬 艾莉丝的简介:

文章目录
- 前言
- [1 ~> 网络发展背景:人类协作倒逼计算机协作](#1 ~> 网络发展背景:人类协作倒逼计算机协作)
-
- [1.1 从独立模式到"人力搬运"](#1.1 从独立模式到“人力搬运”)
- [1.2 网络的诞生:军工起步与阿帕网](#1.2 网络的诞生:军工起步与阿帕网)
- [1.3 中国互联网的"燃情岁月"](#1.3 中国互联网的“燃情岁月”)
- [2 ~> 网络基础概念:局域网是"点",广域网是"面"](#2 ~> 网络基础概念:局域网是“点”,广域网是“面”)
- [3 ~> 协议的本质:一种让通信变简单的"约定"](#3 ~> 协议的本质:一种让通信变简单的“约定”)
-
- [3.1 协议就是"约定"](#3.1 协议就是“约定”)
- [3.2 计算机为什么需要协议?](#3.2 计算机为什么需要协议?)
- [4 ~> 协议分层与模型:解决复杂问题的"手术刀"](#4 ~> 协议分层与模型:解决复杂问题的“手术刀”)
-
- [4.1 分层的必要性:解耦合](#4.1 分层的必要性:解耦合)
- [4.2 理论与实践:OSI 与 TCP / IP](#4.2 理论与实践:OSI 与 TCP / IP)
-
- [4.2.1 OSI](#4.2.1 OSI)
- [4.2.2 TCP / IP模型](#4.2.2 TCP / IP模型)
- [5 ~> TCP / IP 协议与操作系统的"合体"](#5 ~> TCP / IP 协议与操作系统的“合体”)
-
- [5.1 内核中的 C 语言实现](#5.1 内核中的 C 语言实现)
- [5.2 用户态与内核态的分界线:Socket](#5.2 用户态与内核态的分界线:Socket)
- [5.3 底层细节:驱动与 MAC 帧](#5.3 底层细节:驱动与 MAC 帧)
- [6 ~> 再识协议:结构化数据的约定](#6 ~> 再识协议:结构化数据的约定)
- [7 ~> 总结与展望](#7 ~> 总结与展望)
- 结尾

前言
好久不见!(小声BB:好像也没有好久)uu们!我是艾莉丝努力练剑。
Linux的系统部分终于是聊完啦!
今天,我们要聊一个既熟悉又陌生的核心话题------计算机网络。
在这个低头看手机、抬头看电脑的时代,网络像空气一样无处不在。但你是否思考过:两台原本互不相干的计算机,是如何跨越千山万水,准确无误地交换一张图片或一段文字的?
这篇博客将带你拨开技术的迷雾,从网络诞生的历史脉络讲起,深入剖析协议的本质与操作系统的底层实现。无论你是零基础小白,还是想要温故知新的开发者,希望这篇文章能成为你理解网络通信的基石。
1 ~> 网络发展背景:人类协作倒逼计算机协作
网络的产生并不是科学家们突发奇想的产物,而是人类社会协作需求在技术领域的必然映射 。

1.1 从独立模式到"人力搬运"

在网络出现之前,计算机处于"独立模式" 。想象一下,如果小松、小竹、小梅三位同事需要处理业务,每个人都只能坐在自己的终端前操作自己的数据 。如果小松想把一份报表给小梅看,他必须先通过软盘拷贝出来,再物理跑位到小梅的电脑前插上软盘 。这种效率极低的多人协作模式,完全依赖于人的体力参与。

1.2 网络的诞生:军工起步与阿帕网
新技术的产生往往源于军工需求。20世纪70年代,美国国防部高级研究计划局(ARPA)资助建立了阿帕网(ARPANET),这是世界上第一个投入运行的分组交换网络 。起初,它仅用于五角大楼内部的通信。
1974年,温顿·瑟夫和罗伯特·卡恩发明了 TCP/IP 协议。直到1983年,TCP/IP 正式成为阿帕网的标准协议,这才标志着真正意义上的"网络互联"(Internet)诞生,解决了不同设备间"语言不通"的问题。
1.3 中国互联网的"燃情岁月"
1994年,中国正式接入国际公网。此后,一大批传奇的互联网公司喷薄而出:
-
腾讯: 马化腾曾是深圳站的站长。
-
阿里: 2003年"非典"期间,足不出户的需求救活了淘宝,也让马云的团队走向巅峰。
此外,网易的丁磊、百度的李彦宏、金山的雷军等大佬,都在那个年代书写了中国网络的开篇故事。
2 ~> 网络基础概念:局域网是"点",广域网是"面"
理解网络规模,我们通常会接触到两个概念:局域网(LAN) 和广域网(WAN)。
-
局域网(LAN): 范围较小,比如一个实验室、一栋办公楼或一个家庭内部。它通过交换机等设备将多台计算机连接在一起实现数据共享。交换机的作用就像是一个高效的派单员,负责在小范围内准确转发数据包。
-
广域网(WAN): 随着基础设施(如海底光缆、光纤等)的建设,人们把散落在各地的局域网连接起来,就形成了广域网。
-
两者的关系 : 所谓局域网和广域网只是一个相对的概念 。你可以把一个国家的网络看作一个巨大的局域网,而连接全球的则是广域网。网络的产生一定是先有局域网,再有广域网,因为跨地域的基础设施建设成本极高,只能从小规模逐步扩展。

3 ~> 协议的本质:一种让通信变简单的"约定"
很多人觉得"协议"这个词很高深,其实它在生活中无处不在。
3.1 协议就是"约定"
举个例子:以前给家里打电话很贵,我和老爸约定:电话响一声挂掉表示"报平安";响两声表示"没钱了";响三声以上再接听 。这就是一种协议。它通过预先的约定,极大地降低了长距离通信的沟通成本。
下面是两个不同国籍的人,中间有一个"通信规约手册":

3.2 计算机为什么需要协议?
计算机底层只认识二进制(0和1)。然而,数据在物理媒介中是以光电信号传输的。
-
硬件层面: 你用电压的高低表示01,我用频率的快慢表示01,如果不约定好,大家就无法交流。
-
语言层面: 就好比你说中国话,我说葡萄牙语,即便电话线通了,我们也听不懂对方在说什么。
因此,我们需要像 IEEE(电气和电子工程师协会) 、ISO(国际标准化组织) 和 IETF(互联网工程师任务组) 这样的组织站出来,制定全世界通用的标准。有了这些约定,无论你买的是什么品牌的电脑,插上USB就能用,连上网络就能通。
4 ~> 协议分层与模型:解决复杂问题的"手术刀"
既然有了协议,为什么要分那么多层?为什么不写一个"巨无霸"程序搞定一切?
4.1 分层的必要性:解耦合
分层的本质是模块化。 想象一对异地恋情侣打电话:
- 语言层: 两人约定用汉语交流。
- 设备层: 两人通过手机和基站通信。
如果某天他们决定改用英语(上层变动),并不需要更换手机;如果他们把手机换成了对讲机(下层变动),也不影响他们继续说汉语 。这就是解耦合:任何一层的替换或维护,都不影响其他层的工作。
- 物理上,说话并没有直接给对方听,而是给了手机、电话,通过网络协议传给对方听
这个过程太快了,让你以为是直接在跟对方说话。

在逻辑上同层之间直接和对方通信,物理上是没有跟对方直接通信的。
换成电话,一层被替换掉,并不影响上层,这就是解耦合------分层之后,增加了代码的可维护性,任何一层被替换都不影响。
上层被替换,也不影响。
代码的可维护性增加。
4.2 理论与实践:OSI 与 TCP / IP
4.2.1 OSI
OSI七层模型: 这是一套理论上非常完美的规范,包括应用层、表示层、会话层、传输层、网络层、数据链路层和物理层 。但因为它太复杂且不实用,在现实中并未被完全采用。
把协议也进行了层状化处理。
这种标准当然是让所有需要用到网络通信的厂商要去遵守这种OSI定义出来的模型,这样Linux和Windows开发的产品使用同一套标准,就能够实现网络通信。
定标准和未来实现标准的人大概率不是同一个人。 比如华为定义了6G的标准,但是苹果也实现了6G,只要使用同一套标准,就能够实现网络通信。
同一套标准之下办事,所以能够进行网络通信。 关于OSI七层模型,说完里面的名词,其它的就不多说了。
| 层数 | 分层名称 | 功能描述 |
|---|---|---|
| 7 | 应用层 | 针对特定应用的协议。例如:电子邮件(电子邮件协议)、远程登录(远程登录协议)、文件传输(文件传输协议)。 |
| 6 | 表示层 | 设备固有数据格式与网络标准数据格式的转换。接收不同表现形式的信息,如文字流、图像、声音等。 |
| 5 | 会话层 | 通信管理。负责建立和断开通信连接(数据流动的逻辑通路),管理传输层以下的分层。涉及何时建立连接、断开连接及保持时长。 |
| 4 | 传输层 | 管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠地传送到目标地址),关注是否有数据丢失。 |
| 3 | 网络层 | 地址管理与路由选择。决定经过哪个路由传递到目标地址。 |
| 2 | 数据链路层 | 数据帧与比特流之间的转换,分段转发。负责互连设备之间传送和识别数据帧。 |
| 1 | 物理层 | 比特流与电子信号之间的切换,连接器与网线的规格。以"0"、"1"代表电压的高低、灯光的闪灭。界定连接器和网线的规格。 |
4.2.2 TCP / IP模型
TCP / IP模型(四层/五层,去掉硬件层就是四层) : 这是目前工业界的事实标准。它将 OSI 的上三层整合为应用层,专注于软件逻辑;中间是传输层 (如 TCP)和网络层 (如 IP);底层则是数据链路层 和物理层。


5 ~> TCP / IP 协议与操作系统的"合体"
很多初学者认为网络和操作系统是两个独立的东西,但实际上,网络协议栈就是操作系统内核的一部分。
5.1 内核中的 C 语言实现
Linux 内核绝大部分由 C 语言编写,协议栈也不例外。
模块化设计: OS 可以灵活选择加载哪些协议(如加载 IPv4 或 IPv6。
内存管理的神器 :sk_buff 结构体。 在内核中,数据包从网卡进来后,一直由这个结构体指针管理 。由于各层共享同一个指针,避免了频繁的内存拷贝,极大地提高了效率。
5.2 用户态与内核态的分界线:Socket
当你写代码调用 socket()、bind() 或 sendto() 时,你实际上是触发了系统调用 ,穿过了用户态进入内核态 。Socket 接口就是连接应用层与内核协议栈的唯一桥梁。
5.3 底层细节:驱动与 MAC 帧
数据链路层通常在驱动程序 中实现。驱动程序像说明书一样操作硬件,将内核里的 IP 报文封装成能在物理线路上跑的 MAC 帧(以太网协议的标准格式)。
6 ~> 再识协议:结构化数据的约定
从软件工程的角度看,协议到底是什么?
协议本质上就是通信双方都认识的结构化数据类型。
在 C 语言中,它可以简单理解为一个 struct(结构体。
c
struct protocol {
int version;
int data_length;
char payload[1024];
};
当发送端填充好这个结构体发送出去,接收端按照同样的结构进行解析,双方就达成了"共识"。
7 ~> 总结与展望
计算机网络的产生,本质上是为了解决 "距离变长带来的问题" 。
因为距离长了,信号会衰减,所以需要物理层和链路层;
因为路径复杂,所以需要网络层寻找路径;
因为传输可能丢包,所以需要传输层进行可靠性控制。
分层设计 则通过"高内聚、低耦合"的哲学,让这套复杂的系统变得可维护、可复用 。对于我们开发者而言,学习网络编程本质上就是在学习系统编程 。虽然不同操作系统的内核实现各有差异,但由于网络协议标准是统一的,只要掌握了一套 Socket 接口,你就能在 Linux 或 Windows 下游刃有余。
结尾
uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 艾莉丝努力练剑 C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主 *** ** * ** *** 👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。 ❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。 ⭐ 【收藏】 把核心知识点存好,在需要时随时查、随时用。 💬 【评论】 分享你的经验或疑问,评论区一起交流避坑! 不要忘记给博主"一键四连"哦! "今日练剑达成!"
"技术之路难免有困惑,但同行的人会让前进更有方向。" |
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!
往期回顾:
不急,该版块当前准备中,敬请期待,等第二篇就堂堂登场啦!
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა
