Linux系统之网络基础概念
本篇目标:
1.了解计算机网络背景
2.深入了解协议概念
一.计算机网络背景
1.网络发展
我们都知道人与人之间是需要协作的,而计算机是人类的工具,也就注定了计算机之间也是要协作的,所以网络的诞生是必然的,但是网络的发展并不是一蹴而就的,通常是先局部产生然后由局部到整体。
主要经过一下的几个阶段:
<1>.独立模式:计算机之间相互独立;如图:
解释:
图中有三台计算机:
终端A:办理业务①
终端B:办理业务②
终端C:办理业务③
每台计算机都保存着自己的客户数据,而且彼此不能直接交换数据。
假如小松先在 A 上办理业务①。办理完之后,如果还要办理业务②,他不能继续坐在 A 前操作,
因为业务②的数据和程序都在 B 上,所以必须本人移动到 B 前面。
与此同时:
- 小竹需要等小松处理完成。
- 小梅需要等小松和小竹都处理完成。
- 三项业务无法方便地共享数据。
- 人要跟着业务在不同计算机之间移动。
- 前一道业务没完成,后面的人只能等待。
根本问题:数据和业务被固定在某一台计算机上,而计算机之间无法通信。
人们希望把这些计算机连接起来:连接以后,A 可以访问 B 或 C 中的数据,不需要让人跑到另一
台计算机前;不同业务之间也可以直接传递处理结果。
<2>.网络互联:多台计算机连接在⼀起,完成数据共享;如图:

解释:后来有个共用服务器统一保存业务①、②、③以及共享数据。而小松、小竹、小梅分别拥有
自己的计算机。每个人都能在自己的计算机上访问三种业务,不需要再移动到其他终端。三个人可
以同时处理业务,后续人员不必等待前一个人用完计算机。数据由服务器集中保存,减少重复数
据,也更方便统一更新和管理。
缺点:服务器一旦故障,所有客户端都可能受到影响。
<3>.局域网LAN:计算机数量更多了,通过交换机和路由器连接在⼀起;如图:
解释:这张图表示两个局域网通过路由器连接起来。
左侧:
- 3 台计算机连接同一台交换机。
- 它们组成局域网 A。
- 内部通信主要由交换机完成。
右侧:
- 4 台计算机通过两台交换机连接。
- 两台交换机可以级联,用于扩展接口数量和覆盖范围。
- 它们共同组成局域网 B。
中间的路由器负责连接局域网 A 和局域网 B。
当左侧计算机向右侧计算机发送数据时,路径是:
左侧计算机 → 左侧交换机 → 路由器 → 右侧交换机 → 目标计算机
<4>.广域网WAN:将远隔千里的计算机都连在⼀起;如图:

解释:这张图表示多个相距很远的局域网通过路由器连接,组成广域网(WAN)。每个城市都有
自己的局域网:大阪、东京、福冈、名古屋、洛杉矶。
每个局域网内部:
计算机 → 交换机 → 路由器
- 交换机负责本地计算机之间的通信。
- 路由器是局域网的出口,负责把数据发送到其他城市。
- 城市之间通常通过运营商网络、专线等远距离通信线路连接。
例如大阪的计算机访问洛杉矶的计算机,数据路径大致是:
大阪计算机 → 大阪交换机 → 大阪路由器 → 广域网 → 洛杉矶路由器 → 洛杉矶交换机 → 洛杉矶计算机
2.网络历史
<1>.阿帕网
1969年,美国国防部高级研究计划局建立了阿帕网,即 ARPANET。最初连接的是美国几所大学和研究机构。阿帕网验证了分组交换和远程计算机通信的可行性,被认为是现代互联网的重要前身。
1989年,Tim Berners-Lee 提出了万维网 WWW,并设计了 HTML、HTTP 和 URL。浏览器和网页降低了互联网的使用门槛。20世纪90年代互联网开始商业化,普通家庭和企业也可以通过运营商接入互联网。
<2>.互联网
互联网本质上是“网络的网络”。大量运营商网络、企业网络、学校网络、数据中心网络通过路由器和通信线路互相连接,共同组成互联网。它不由某一家公司单独拥有。
一次普通的网络访问大致经过:
手机或计算机
→ 家庭路由器或移动通信基站
→ 运营商接入网
→ 运营商骨干网
→ 网络互联节点
→ 互联网公司的数据中心
→ 目标服务器
<3>.运营商
运营商也叫 ISP,主要负责“提供网络连接”。
它们会建设和维护:
- 家庭宽带接入网;
- 4G、5G移动通信网络;
- 城域网和骨干网;
- 跨城市、跨地区的光纤线路;
- 与其他运营商之间的互联线路。
普通用户向运营商购买宽带或手机流量,本质上就是购买接入互联网的能力。
中国移动、中国电信和中国联通都属于运营商。
<4>.互联网公司
互联网公司主要负责在网络上提供具体服务,例如:
- 网站和搜索服务;
- 即时通信和短视频;
- 网络游戏和电子商务;
- 云计算和网络存储;
- 数据中心和内容分发服务。
互联网公司通常需要建设服务器和数据中心,并向运营商购买带宽。运营商负责把用户的数据传过去,互联网公司负责处理用户的请求并返回内容。
可以简单理解为:运营商负责修路,互联网公司负责在路的另一端提供商店和服务。
<5>.通信设备公司
这里的通信公司如果指通信设备公司,它们主要负责生产建设网络所需的设备和技术,例如:
- 路由器;
- 交换机;
- 5G基站;
- 光通信设备;
- 网络芯片;
- 网络管理系统。
这些设备会被运营商、互联网公司、学校和企业购买,用来建设自己的网络。通信设备公司一般不直接给普通用户提供上网服务,而是为整个网络提供基础设备。
华为、中兴、思科和爱立信等属于这一类企业。
三者的关系可以概括为:
通信设备公司提供设备
↓
运营商使用设备建设网络
↓
互联网公司通过网络提供服务
↓
用户使用网络访问这些服务
需要注意,“通信公司”有时也被广义地用来指电信运营商。为了避免混淆,最好分别称为“运营商”和“通信设备公司”。
二.协议
1.初识协议
先举个例子:
先举一个简单的例子。
小李正在上高中,学校不允许学生携带手机。一天,小李的饭卡没钱了,于是他借用班主任的手机,给父亲老王打电话,让老王帮忙充饭钱。
后来,小李经常遇到饭钱不够的情况,每次都借班主任的手机打电话,让他觉得有些不好意思。于是,小李提前和老王约定:
电话响一声后挂断,表示饭卡没钱了,需要充饭钱;
电话响两声后挂断,表示自己一切平安;
电话响三声则不挂断,表示有其他事情,需要接通电话详细交流。
有了这个约定,老王只需要根据电话的响铃次数,就能判断小李想要表达的信息,不必每次都接通电话。
这种通信双方事先约定好的规则,就可以理解为一种简单的“协议”。
所以目前我们可以简单认为协议是一种约定,并且一个好处就是可以减少通信成本,快速形成共识
但是计算机之间如何进行约定呢?
首先计算机之间的传输媒介是光信号和电信号,我们可以通过"频率"和"强弱"来表示0和1这样的信
息,但是要想传递各种不同的信息,就需要约定好双方的数据格式。
但是我们需要先思考一个问题:只要通信的两台主机约定好协议就可以了么?
• 定好协议,但是一个用频率表示01,我用强弱表示01,就好比我⽤中国话,你⽤葡萄⽛语⼀样,虽 然⼤家可能遵守的⼀套通信规则,但是语⾔不同,即订好了基本的协议,也是⽆法正常通信的
所以,完善的协议,需要更多更细致的规定,并让参与的人都要遵守,但是:
• 计算机⽣产⼚商有很多;
• 计算机操作系统,也有很多;
• 计算机网络硬件设备,还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?
那么就需要有⼈站出来,约定⼀个共同的 标准,⼤家都来遵守,这就是网络协议;
⼀般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司,目前我们主要认识一个即可:
ISO(国际标准化组织):ISO是由多个国家的标准化团体组成的国际组织,它在开放系统互连 (OSI)模型⽅⾯的⼯作尤为著名。OSI模型定义了网络通信的七层协议结构,尽管在实际应用 中,TCP/IP协议族更为普遍,但OSI模型仍然在学术和理论研究中占有重要地位。
但是ISO组织只生产标准,不写代码实现。
2.协议分层
分层的好处,如图:

解释:
表面上看是同层之间在进行通信:
A ←使用汉语交流→ C
实际上信息经过的路径是:
A说话 → A的电话机 → 电话网络 → C的电话机 → C听到并理解
如果我们只更换通信设备层:
图片左下把电话机换成了无线电;虽然通信设备及其协议发生变化,但 A 和 C 仍然使用汉语,因
此语言层不需要修改。
所以A 不需要关心声音究竟通过电话线还是无线电波传输,只需要知道如何使用通信设备提供的接
口。
结论:只要上下层之间的接口保持不变,修改底层实现不会影响上层。
如果我们只更换了语言层:
图片右下把交流语言从汉语改成了英语;语言层发生变化,但通信设备层仍然使用电话机和原来的
电话协议,因此电话系统不需要修改。因为电话机只负责传输声音,并不关心人说的是汉语还是英
语。
结论:上层协议发生变化时,通常不需要修改底层传输方式。
所以我们就可以得出只要层与层之间的接口保持不变,修改某一层的内部实现,通常不会影响其他层,所以我们就能理解,分层可以实现解耦合,让软件维护的成本更低。
注意:
• 在这个例子中,我们的"协议"只有两层:语言层、通信设备层。
• 但是实际的⽹络通信协议,设计的会更加复杂,需要分更多的层。
3.TCP/IP五层(或四层)模型
OSI(开放系统互连)是一个将网络通信划分为七层的参考模型。
它的主要作用是:
- 规范不同计算机和网络之间的通信;
- 明确区分服务、接口和协议;
- 降低网络系统的复杂度;
- 方便网络的设计、学习和故障排查。
OSI 模型理论完整,但结构较复杂,实际网络主要使用 TCP/IP 模型,因此后面将按照 TCP/IP 四层模型进行讲解。
如图:


其实在网络角度,OSI定的协议7层模型其实非常完善,但是在实际操作的过程中,会话层、表示层 是不可能接⼊到操作系统中的,所以在⼯程实践中,最终落地的是5层协议。
但是要理解上⾯的话,需要我们学习完⽹络才可以理解,这里就知道就可以。
TCP/IP 是一组网络协议的统称,也叫 TCP/IP 协议簇。它通常分为五层,每一层使用下一层提供的服务。
1.物理层:
负责光/电信号的传递⽅式.⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同
轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物
理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等.集线器(Hub)⼯作在物理层.
2.数据链路层:
负责设备之间的数据帧的传送和识别.例如⽹卡设备的驱动、帧同步(就是说从⽹线上
检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯
作.有以太⽹、令牌环⽹,⽆线LAN等标准.交换机(Switch)⼯作在数据链路层
3.网络层:
负责地址管理和路由选择.例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表的
⽅式规划出两台主机之间的数据传输的线路(路由).路由器(Router)⼯作在⽹路层.
4.传输层:
负责两台主机之间的数据传输.如传输控制协议(TCP),能够确保数据可靠的从源主机发送
到⽬标主机
5.应用层:
负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远
程访问协议(Telnet)等.我们的⽹络编程主要就是针对应⽤层
如图:

注意:物理层我们考虑的比较少,我们只考虑软件相关的内容,因此很多时候我们直接称为
TCP/IP四层模型。
4.再识协议
为什么要有TCP/IP协议?
首先我们得意识到:计算机内部的所有设备都是通过线连接起来的,所以计算机内部本身就是一个
网络结构,因此计算机的内部其实都是存在协议的,比如:其他设备和内存通信,会有内存协议。
其他设备和磁盘通信,会有磁盘相关的协议,比如:SATA,IDE,SCSI等。只不过我们感知不到
罢了。而且这些协议都在本地主机各自的硬件中,通信的成本、问题比较少。
现在假设我们把连接设备的线无限延长,把多台计算机放到相距千里的地方。此时通信就会遇到很
多新问题:
数据如何传输?丢了咋办?
如何定位目标主机?
如何解决当下立即要去哪里的问题?
接受数据后如何处理的问题?
所以TCP/IP协议诞生的一个原因就是通信主机距离变远了。
什么是TCP/IP协议?
• TCP/IP协议的本质是⼀种解决方案
• TCP/IP协议能分层,前提是因为问题们本身能分层
TCP/IP协议与操作系统的关系图:

解释:
| TCP/IP层次 | 在计算机中的主要位置 | 具体内容 |
|---|---|---|
| 应用层 | 操作系统之上的用户态 | 浏览器、聊天软件、服务器程序,以及 HTTP、DNS 等应用层协议 |
| 传输层 | 操作系统内核 | TCP、UDP,负责进程之间的数据传输 |
| 网络层 | 操作系统内核 | IP,负责 IP 地址和路由选择 |
| 数据链路层 | 操作系统内核、网卡驱动和网卡 | 组织以太网帧,通过 MAC 地址完成局域网传输 |
| 物理层 | 网卡及通信介质 | 把数据转换为电信号、光信号或无线电波 |
对应关系就是:
- 用户程序、用户操作接口 → 应用层
- 操作系统内核 → 传输层和网络层
- 网卡驱动程序 → 数据链路层的一部分
- 网卡、网线等硬件 → 数据链路层的一部分和物理层
传输层和网络层中最著名的协议就是TCP协议和IP协议,是现在OS的核心,因此将协议整体统称
TCP/IP协议。
还有一点就是:每台主机安装的操作系统可以不同,例如一台使用 Windows,另一台使用
Linux;但是它们实现的网络协议必须遵守同一套标准,因此才能互相通信。
所以究竟什么是协议?
• 截止到目前,我们还没接触过任何协议,但是如何朴素的理解协议,我们已经可以试试了。
• OS源代码⼀般都是用C/C++语言写的。
下面,仔细看看下面的图:

解释:两台主机想要通信,必须事先约定数据的格式以及每个字段的含义,这个约定就是协议。
左边主机 A 使用 Windows,右边主机 B 使用 Linux。操作系统虽然不同,但假设双方在传输层都
约定了下面这种数据格式:
struct protocol
{
int a;
int b;
int c;
};
主机 A 想发送的数据是:
struct protocol data = {10, 20, 30};
这表示双方约定:
第一部分是字段 a,值为 10
第二部分是字段 b,值为 20
第三部分是字段 c,值为 30
主机 A 按照这个格式把数据转换成字节并发送。主机 B 收到字节后,也按照同样的格式解析,于
是得到:
a = 10
b = 20
c = 30
如果双方的协议不一样,例如:
主机A认为:第一个字段是a,第二个字段是b
主机B认为:第一个字段是b,第二个字段是a
那么主机 B 就会错误地理解数据。即使数据成功传到了主机 B,也无法实现正常通信。
也就是说,用同样的代码实现协议,用同样的自定义数据类型,天然就具有”共识“,能够识别对方发来的数据,这不就是约定吗?
所谓协议,就是通信双方都认识的结构化的数据类型
因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)