【Linux网络】计算机网络入门:从背景到协议,理解网络通信基础

🎬 个人主页艾莉丝努力练剑
专栏传送门 :《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有所帮助,不要忘记给博主"一键四连"哦!

往期回顾

不急,该版块当前准备中,敬请期待,等第二篇就堂堂登场啦!

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა

相关推荐
沫璃染墨2 小时前
C++ std::list 深度解析:迭代器、splice 核心接口与排序效率全解
开发语言·c++
艾莉丝努力练剑2 小时前
【Linux线程】Linux系统多线程(十):线程安全和重入、死锁相关话题
java·linux·运维·服务器·c++·学习·安全
23471021272 小时前
4.21 学习笔记
软件测试·笔记·python·学习
运维老郭2 小时前
Nginx vs Envoy:高并发负载均衡实战指南(含踩坑记录)
linux·运维
小娄~~2 小时前
特殊进程-
linux·运维·服务器
没有天赋那就反复2 小时前
C++里面引用参数和实参的区别
开发语言·c++·算法
Keep Running *2 小时前
Python基础_学习笔记
笔记·python·学习
ximu_polaris2 小时前
设计模式(C++)-创造型模式-建造者模式
c++·设计模式·建造者模式
AOwhisky2 小时前
Kubernetes 学习笔记:Volume 存储卷与 ConfigMap 配置管理
linux·运维·笔记·学习·云原生·kubernetes