🌟 各位看官好,我是

👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享更多人哦!

计算机网络背景

为什么会出现计算机网络?

  • 操作系统已经能进行单人的计算了,但是科学家们需要互相协作,把软件代码交给另一个人处理,计算机之间必然要协作。
  • 现实世界,人之间是需要协作的,那么计算机是完成人的工作的,计算机之间也必然要协作起来  --> 人类产生计算机网络技术,是必然的!

网络的出现:

0 世纪六七十年代,美国国防部高级研究计划局(DARPA)主导建立了世界上首个分组交换网络 ——阿帕网(ARPANET)。其最初的核心目的并非单纯的 “内部协作”,而是源于冷战背景下的战略考量:为确保核打击等极端情况下通信系统不被一次性摧毁,实现不同军事、科研节点间的分布式通信,从而提升指挥与协作的抗风险能力。

随着阿帕网技术逐渐成熟并在科研领域展现出高效协作价值,美国作为资本主义经济体,对技术的投入产出比自然提出了更高要求。此时的阿帕网已不仅局限于五角大楼和军方实验室,其应用潜力开始向民用领域延伸 —— 人们开始思考:既然它能提升军事科研的协作效率,是否也能赋能高校实验室、金融机构、商业企业等更多场景?于是,从 20 世纪 80 年代开始,美国政府逐步推动阿帕网的民用化转型,后续通过 NSFNET(国家科学基金会网络)等过渡,最终为互联网的商业化普及奠定了基础,而非 “直接允许商业化” 的简单过程。

与此同时,随着全球互联网技术的发展,中国基于自身科研与社会发展需求,开始推进与国际互联网的对接。1994 年,中国科学院高能物理研究所等机构成功实现了与国际互联网的全功能连接,标志着中国正式接入全球互联网体系。需要说明的是,中国早期接入互联网是国家科研层面的战略布局,是源于对信息技术浪潮的主动回应。

独立模式: 计算机之间相互独立;

网络互联: 多台计算机连接在一起, 完成数据共享;

局域网 LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;

广域网 WAN: 将远隔千里的计算机都连在一起;

所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网.

局域网是一个子网,广域网是很多个子网.

一定是先有局域网,经过不断发酵,把局域网串联起来,才会形成广域网.

所以局域网和局域网之间,如清华有自己的实验室,北大有自己的实验室,他们之间可能会有合作的需求,这是必然的,为了能进行学术方面的交流,局域网之间也必然要通信,是子网和子网连接的基本诉求.

需要注意的是对应的互联网技术发展同时,设备厂商有没有可能在发展?我就问你,网络术发展,电脑的用户量就会极度增加。什么显示屏,主板,内存,磁盘,网卡,显卡,声卡设备,各个打印机,鼠标,话筒,摄像头,各种各样的设备,它都会蓬勃发展。一旦网络诞生,就会面临新的场景,需要有新的支持网络通信的设备的诞生,所以才出现了百度、阿里等等.

有需求了,如何保证两个实验室长距离传输呢?所以软件技术发展有IP地址,软件协议发展HTTP各种协议,硬件发展就必须得有交换机,路器这样的设备诞生了.各种子网互相连接,就形成了一个更大网络,叫广域网.

最终结论:计算机是人的工具, 人要协同工作, 网络产生是必然的.

初识协议

协议是什么?一种约定(这是最朴素性的认识)

约定是世界上最强的"力量",我们举几个例子:

假设主机A给主机B发送02020,但是主机B并不清楚010101代表什么意思,或者是哪几个做组合代表什么意思,那么另一台计算机它也就不可,即便是把数据发过去了。

再比如,假如你马上就要上大学了,但你是个穷小子,为了节省电话费,你跟你爸妈说:为了不要浪费电话费,打电话进行约定.当拨打一声时,表明我人是安全的,不要担心;拨打两声时,表明我身上没钱了,要拿钱作生活费;拨打三声说明我有事情了,来接电话呀!

曾经在写系统的时候有没有类似场景?有的,只是那时候没注意到.基于管道通信设计的一个进程池.当向管道写一个固定大小的整数,任务码之类.当我们想管道写4个字节,对方怎么知道是4个字节呢?本质是基于管道,已经定过简单的约定了.

要实现网络通信,必须要理解约定,即协议的力量!

计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式.

只要通信的两台主机, 约定好协议就可以了么?

定好协议, 但是你用频率表示 01, 我用强弱表示 01, 就好比我用中国话, 你用葡萄牙语一样, 虽然大家可能遵守的一套通信规则, 但是语言不同, 即是订好了基本的协议, 也是无法正常通信的

所以,要完善我们对应的协议,就需要做更多细致的规定,因为协议这个东西,它不是在我们两台计算机之间:

  • 计算机生产厂商有很多;
  • 计算机操作系统, 也有很多;
  • 计算机网络硬件设备, 还是有很多;

所以不是依靠协议就能完成通信的,必须让厂商之间约定好,用强弱还是频率表示01,计算机之间通信时必须规定好传送的二进制数字各自代表什么含义?

总而言说,既要有硬件上的协议,又要有软件的协议.

如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议;

可是你站出来指定,大家就会来听你的么?首先要明白的一点是定标准的人在世界上是具有绝对地位的,具有绝对的话语权.我会指定标准,至于跟不跟是你的事.我给出的是最优解,你绕不开,所以才要求我来提这个标准,是不是把你遍得没办法,知道绕不开,你不跟进,生产力就落后.

能定制协议标准的组织或公司主要有以下几类:

国际标准化组织:

IEEE(电气和电子工程师协会) : 这是一个由计算机和工程领域专家组成的庞大技术组织, 在通信协议领域贡献突出。 IEEE 制定了全世界电子、 电气和计算机科学领域 30%左右的标准, 包括 IEEE 802 系列标准, 这些标准涵盖了从局域网(LAN) 到广域网(WAN)等多种网络技术.
ISO(国际标准化组织) : ISO 是由多个国家的标准化团体组成的国际组织, 它在开放系统互连(OSI) 模型方面的工作尤为著名。 OSI 模型定义了网络通信的七层协议结构, 尽管在实际应用中, TCP/IP 协议族更为普遍, 但 OSI 模型仍然在学术和理论研究中占有重要地位.
ITU(国际电信联盟) : ITU 是联合国下属的专门机构, 负责制定电信领域的国际标准。 ITU-T 制定的标准涵盖了电话和网络通信, 与 ISO 合作确保了通信技术的全球兼容性和互操作性.

区域标准化组织:

ETSI(欧洲电信标准学会) : 由欧洲共同体各国政府资助, 是一个由电信行业的厂商与研究机构参加并从事研究开发到标准制定的组织
ASTAP(亚洲与泛太平洋电信标准化协会) : 1998 年由日本与韩国发起成立的标准化组织, 旨在加强亚洲与太平洋地区各国信息通信基础设施及其相互连接的标准化工作的协作。

公司:

某些公司, 如泰凌微, 也自研各种标准的软件协议栈, 包括低功耗蓝牙、zigbee、 thread 及 Matter 等, 并可进行定制化改动, 这是其核心竞争力之一。 泰凌微还计划重点发展智能电子价签、 智能遥控、 智能家居等市场。

民间国际团体:

IETF(互联网工程师任务组) : 这是一个负责开发和推广互联网协议(特别是构成 TCP/IP 协议族的协议) 的志愿组织, 通过 RFC 发布新的或者取代老的协议标准.

官方机构:

FCC(联邦通信委员会) : 美国对通信技术的管理的官方机构, 主要职责是通过对无线电、 电视和有线通信的管理来保护公众利益。 也对包括标准化在内的通信产品技术特性进行审查和监督。

协议分层

OSI七层模型

  • OSI(Open System Interconnection, 开放系统互连) 七层网络模型称为开放式系统互联参考模型, 是一个逻辑上的定义和规范;
  • 把网络从逻辑上分为了 7 层. 每一层都有相关、 相对应的物理设备, 比如路由器、交换机;
  • OSI 七层模型是一种框架性的设计方法, 其最主要的功能使就是帮助不同类型的主机实现数据传输;
  • 它的最大优点是将服务、 接口和协议这三个概念明确地区分开来, 概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;

在网络角度, OSI 定的协议 7 层模型其实非常完善, 但是在实际操作的过程中, 会话层、 表示层是不可能接入到操作系统中的, 所以在工程实践中, 最终落地的是 5 层协议。

TCP/IP 五层(四层)模型

TCP/IP 是一组协议的代名词, 它还包括许多协议, 组成了 TCP/IP 协议簇.

TCP/IP 通讯协议采用了 5 层的层级结构, 每一层都呼叫它的下一层所提供的网络来完成自己的需求.

一般而言:

  • 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;
  • 对于一台路由器, 它实现了从网络层到物理层;
  • 对于一台交换机, 它实现了从数据链路层到物理层;
  • 对于集线器, 它只实现了物理层;

但其实交换机也实现了网络层的转发;路由器也实现了部分传输层的内容,甚至应用层.

再识协议

为什么要有TCP/IP协议

即便是单机, 你的计算机内部, 其实都是存在协议的, 比如: 其他设备和内存通信, 会有内存协议。 其他设备和磁盘通信, 会有磁盘相关的协议, 比如:计算机想把内存写到磁盘里,要和磁盘通信,传递二进制到磁盘,但磁盘怎么知道是读还是写?所以会有协议.

在没有网络的时候,计算机内部都有自己的协议 --> 而计算机内部走线都不会特别长(防止磁场干扰);

而网络通信的本质是距离变长了 --> 那么就会产生新的问题,就需要有新的解决方案 -->

TCP/IP的出现本质就是为了解决距离变长出现的各种新问题.

这样来看,OSI七层模型提供解决方案,而

TCP/IP的是一种解决网络通信的具体解决方案!

我要发数据给主机C,得先发到路由器R?怎么做呢?涉及到局域网通信问题.

数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、 帧同步(就是说从网线上检测到什么信号算作新帧的开始)、 冲突检测(如果检测到冲突就自动重发)、 数据差错校验等工作. 有以太网、 令牌环网, 无线 LAN 等标准. 交换机(Switch)工作在数据链路层.

网上这么多主机,怎么定位到主机C呢?怎么做?网络层ip协议问题

网络层: 负责地址管理和路由选择. 例如在 IP 协议中, 通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.

如果发出去的数据丢失了,怎么做?TCP/UDP问题

传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.

发数据不是目的,只是手段.用数据才是目的.主机C如何知道发出去的数据该怎么被处理,被使用呢?应用层解决

应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP) 、 文件传输协议(FTP) 、 网络远程访问协议(Telnet) 等. 我们的网络编程主要就是针对应用层.

这些问题本身是层状的,这也要求TCP/IP协议也是层状的!!!

TCP/IP协议与OS的宏观关系及实现

网络属于os的一部分,在内核需要,硬件需要.

什么是协议?

初识协议中谈到:协议本质是一种"约定"(这个概念太模糊了)

具体来说,协议本质是一个结构体!!!

我们的OS一般用什么语言来写呢?

C/C++语言,而结构体不就是用C语言定义的吗!

面向对象深刻认识本质是:我们所定义的结构体和类,本质是在和计算机做约定

这个结构体的定义是在协议栈内部的!对于不同操作系统都认识自己定义的结构体和类,OS之间约定数据结构达成共识!

所谓的协议就是双方的0S内部协议栈定义相同的结构体,这不就是约定吗

网络传输基本流程

局域网通信原理

  • 两台主机在同一个局域网, 是否能够直接通信? 是的
  • 所有主机,怎么知道发送数据不是发给自己?怎么知道发给自己?每个主机都要有"名字" -- MAC地址!

认识MAC地址

为了方便理解,这里讲个小故事:

在课堂中,你叫张三,你的数学老师李四在课上说:张三啊!上来回答下这个问题,此时整个班的人都听到了这个问题!但是他们都不是张三,只有你是.他们就把这个问题抛弃掉了,而你是张三,此时就站出来回答问题了!

在计算机中,主机A --> 主机E发数据流程:

主机A会将数据发送到局域网中,此时所有的主机都能收到!假设主机B收到了,它在数据链路层发现目的是MacE,直接丢弃了.而主机E发现这个目的是我啊,就没有抛弃.(以太网中, 任何时刻, 只允许一台机器向网络中发送数据)

多台主机都可以访问局域网中的这个数据?等等,这个不就是多线程并发访问同一个数据吗?那么这个局域网就是共享资源啊!如果不对它进行保护会造成数据不一致问题.因此,需要对这个共享资源进行保护.

  • 因此提出了碰撞检测和碰撞避免.

数据碰撞:如果有多台同时发送, 会发生数据干扰.

碰撞域(没有交换机,一个以太网就是一个碰撞域):基于碰撞检测和碰撞避免的通信方式 --> 应用最广泛的通信局域网协议之 --> 内置在数据链路层

这就是为什么在宿舍人一多,上网速度变慢了,因为碰撞概率增加了啊!

  • 令牌黄网

令牌黄网,每一台主机只有持有令牌才能发送消息,令牌不就是互斥锁当中的1吗?发完交给另一个人.

这里提出一个问题,当主机A把数据发送到局域网时,它自身会不会收到呢?

会的,自己的数据链路层也会检测到!

如果我能无限制地发送数据到局域网中,不就可以黑掉这个网络了?

首先这是可以的,但是我们自己的链路层也会检测到啊!那能不能绕过链路层呢?可以的.

  • MAC 地址用来识别数据链路层中相连的节点;
  • 长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(如08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址).

两台主机发送消息过程

实际上,链路层并不能主动给对方发送消息.那么链路层发送的数据,从哪里来?谁让发的?

本质是两个用户通信引起链路层通信

细节1:为什么叫TCP/IP协议栈呢?我们可以这样理解:

  • 报头部分, 就是对应协议层的结构体字段, 我们一般叫做报头
  • 除了报头, 剩下的叫做有效载荷
  • 报文 = 报头 + 有效载荷

不同层的完整报文叫法:

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).
  • 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理.

细节2:可是当我有效载荷在交给上层时就蒙圈了,应该给ip,icmp还是?

因此,任何协议(应用层除外)都要解决两个问题:

  1. 将报头和有效载荷进行分离
  2. 把数据交付给上层哪一种协议的问题

重谈局域网通信

跨网络传输

在局域网中进行通信,需要MAC地址解决,那么在广域网中进行通信就需要引入IP地址了!

认识IP地址

MAC vs IP

那MAC地址与IP又有什么爱恨情仇呢?这里讲个小故事,方便大家进行理解:

西游记中唐僧师徒四人要西天取经,其中需要经过多条路径才能取到真经.

唐僧师徒四人从长安到车迟国,车迟国大王问唐僧从哪里来?到哪里去?

唐僧答道:东土来,西天去

车迟国大王又问:上一站从哪里来?下一站要去哪里呢?

唐僧达到:上一站长安来,下一站去哪未知

于是车迟国大王告诉唐僧,你下一站要去女儿国,于是唐僧师徒四人就知道了.

当他们到了女儿国,女儿国的国王又问同样的问题:

东土来,西天去是一只不变的(源IP,目的IP)

长安来,下一站未知是一直会变化的(源MAC,目的MAC地址)

下一站去哪由大王给他们回答

并且可以发现,我要去的目的IP决定了我的目的MAC地址是去哪!即根据目的IP,动态选择出我要经历的mac地址(路由器或主机)

封装与解包

网络层:大家看到的数据报是一样!

网络层网上:都叫IP网络

网络层往下:数据帧都是不同的

我们的互联网,时间里在IP网络的基础上!

IP协议,虚拟化了底层局域网的差异!!!(IP+MAC)

宏观流程

IP 网络层存在的意义: 提供网络虚拟层, 让世界的所有网络都是 IP 网络, 屏蔽最底层网络的差异.

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐