计算机速成课Crash Course - 28. 计算机网络

news2024/11/24 3:19:11

今天继续计算机速成课Crash Course的系列讲解。

更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

计算机速成课Crash Course - 28. 计算机网络 (qq.com)

28. 计算机网络

互联网太棒啦,键盘敲几下就能在 Youtube 直播--哈喽!在维基百科上阅读文章,在亚马逊买东西和朋友视频,发一条天气推特。

毫无疑问,用户在全球网络中发送和接收信息的能力,永远改变了这个世界。

150年前 发一封信件从伦敦到加州要花2~3周,而且还是特快邮件,如今电子邮件只要几分之一秒。

图片

"时延"改善了上百万倍(时延指传播一条信息所需的时间),振兴了全球经济,帮助现代世界在遍布全球的光纤中快速发展。

图片

你可能觉得计算机和网络密切相关,但事实上,1970年以前大多数计算机是独立运行的。

然而,因为大型计算机开始随处可见,廉价机器开始出现在书桌上,分享数据和资源渐渐变得有用起来。

首个计算机网络出现了,今天起,我们花3集视频讲网络是如何发展成现在的样子,以及支撑它们的基础原理和技术。

第一个计算机网络出现在1950~1960年代,通常在公司或研究室内部使用,为了方便信息交换。

比把纸卡或磁带送到另一栋楼里更快速可靠,这叫"球鞋网络"。

图片

第二个好处是能共享物理资源。举个例子,与其每台电脑配一台打印机,大家可以共享一台联网的打印机。

早期网络也会共享存储空间,因为每台电脑都配存储器太贵了。

计算机近距离构成的小型网络,叫局域网, 简称LAN,局域网能小到是同一个房间里的两台机器,或大到校园里的上千台机器。

图片

尽管开发和部署了很多不同 LAN 技术,其中最著名和成功的是"以太网",开发于1970年代,在施乐的"帕洛阿尔托研究中心"诞生, 今日仍被广泛使用。

以太网的最简单形式是:一条以太网电线连接数台计算机,当一台计算机要传数据给另一台计算机时,它以电信号形式,将数据传入电缆。

当然 因为电缆是共享的,连在同一个网络里的其他计算机也看得到数据,但不知道数据是给它们的,还是给其他计算机的。

为了解决这个问题 以太网需要每台计算机有唯一的媒体访问控制地址,简称 MAC地址,这个唯一的地址放在头部,作为数据的前缀发送到网络中。

图片

所以,计算机只需要监听以太网电缆,只有看到自己的 MAC 地址,才处理数据,这运作得很好,现在制造的每台计算机都自带唯一的MAC地址,用于以太网和无线网络。

多台电脑共享一个传输媒介,这种方法叫 "载波侦听多路访问",简称"CSMA"。

载体(carrier)指运输数据的共享媒介,以太网的"载体"是铜线,WiFi 的"载体"是传播无线电波的空气。

很多计算机同时侦听载体,所以叫"侦听"和"多路访问",而载体传输数据的速度叫"带宽"

不幸的是,使用共享载体有个很大的弊端,当网络流量较小时 计算机可以等待载体清空,然后传送数据。

但随着网络流量上升,两台计算机想同时写入数据的概率也会上升,这叫冲突,数据全都乱套了。

图片

就像两个人同时在电话里讲话,幸运的是,计算机能够通过监听电线中的信号检测这些冲突,最明显的解决办法是停止传输,等待网络空闲, 然后再试一遍。

问题是 其他计算机也打算这样做,其他等着的计算机可能在任何停顿间隙闯入,导致越来越多冲突。

很快,每个人都一个接一个地讲话,而且有一堆事要说,就像在家庭聚餐中和男朋友分手一样。

以太网有个超简单有效的解决方法,当计算机检测到冲突,就会在重传之前等待一小段时间。

因为要举例,假设是 1 秒好了,当然,如果所有计算机用同样的等待时间,是不行的,它们会在一秒后再次冲突。

所以加入一个随机时间,一台计算机可能等1.3秒,另一台计算机等待1.5秒,要是运气好,等1.3秒的计算机会醒来,发现载体是空闲的,然后开始传输。

当1.5秒的计算机醒来后,会发现载体被占用,会等待其他计算机完成,这有用,但不能完全解决问题,所以要用另一个小技巧。

正如我刚才说的,如果一台计算机在传输数据期间检测到冲突,会等一秒+随机时间,然而,如果再次发生冲突,表明有网络拥塞。

这次不等1秒,而是等2秒,如果再次发生冲突等4秒,然后8秒、16秒等等,直到成功传输。

因为计算机的退避,冲突次数降低了,数据再次开始流动起来网络变得顺畅,家庭晚餐有救啦!

这种指数级增长等待时间的方法叫:指数退避,以太网和WiFi都用这种方法,很多其他传输协议也用。

但即便有了"指数退避"这种技巧,想用一根网线链接整个大学的计算机还是不可能的,为了减少冲突+提升效率,我们需要减少同一载体中设备的数量,载体和其中的设备总称 "冲突域"。

让我们回到之前以太网的例子,一根电缆连6台计算机,也叫一个冲突域,为了减少冲突,我们可以用交换机把它拆成两个冲突域。

图片

交换机位于两个更小的网络之间,必要时才在两个网络间传数据,交换机会记录一个列表,写着哪个 MAC 地址在哪边网络。

如果A想传数据给C,交换机不会把数据转发给另一边的网络,没必要。

如果E想同一时间传数据给F,网络仍然是空的,两个传输可以同时发生,但如果F想发数据给A,数据会通过交换机,两个网络都会被短暂占用。

大的计算机网络也是这样构建的,包括最大的网络 - 互联网,也是多个连在一起的稍小一点网络,使不同网络间可以传递信息。

这些大型网络有趣之处是,从一个地点到另一个地点通常有多条路线,这就带出了另一个话题 路由。

图片

连接两台相隔遥远的计算机或网路,最简单的办法,是分配一条专用的通信线路,早期电话系统就是这样运作的。

假设"印第安纳波利斯"和"米苏拉"之间,有五条电话线,如果在1910年代,John 想打电话给 Hank,John要告诉操作员他想打到什么地方,然后工作人员手动将 John 的电话连到通往米苏拉的未使用线路。

图片

通话期间这条线就被占用了,如果五条线都被占用了,John 要等待某条线空出来,这叫 "电路交换",因为是把电路连接到正确目的地。

能用倒是能用,但不灵活而且价格昂贵 因为总有闲置的线路,好处是 如果有一条专属于自己的线路,你可以最大限度地随意使用,无需共享。

因此军队, 银行和其他一些机构,依然会购买专用线路来连接数据中心。

传输数据的另一个方法是 "报文交换","报文交换" 就像邮政系统一样,不像之前A和B有一条专有线路,消息会经过好几个站点。

如果 John 写一封信给 Hank,信件可能从"印第安纳波利斯"到"芝加哥",然后"明尼阿波利斯" 然后"比林斯" 最后到"米苏拉"。

图片

每个站点都知道下一站发哪里,因为站点有表格,记录到各个目的地,信件该怎么传。报文交换的好处是,可以用不同路由,使通信更可靠更能容错。

回到邮件的例子,如果"明尼阿波利斯"有暴风雪中断了通信,"芝加哥"可以传给"奥马哈"。

图片

在这个例子里,城市就像路由器一样,消息沿着路由跳转的次数,叫"跳数"(hop count)。记录跳数很有用,因为可以分辨出路由问题。

举例,假设芝加哥认为,去米苏拉的最快路线是奥马哈,但奥马哈认为去米苏拉的最快路线是 芝加哥。

这就糟糕了,因为2个城市看到目的地是米苏拉,结果报文会在2个城市之间不停传来传去,不仅浪费带宽,而且这个路由错误需要修复!

这种错误会被检测到,因为跳数记录在消息中,而且传输时会更新跳数,如果看到某条消息的跳数很高,就知道路由肯定哪里错了,这叫"跳数限制"。

报文交换的缺点之一是有时候报文比较大,会堵塞网络 因为要把整个报文从一站传到下一站后,才能继续传递其他报文。

传输一个大文件时,整条路都阻塞了,即便你只有一个1KB的电子邮件要传输,也只能等大文件传完,或是选另一条效率稍低的路线。

这就糟了。

解决方法是将大报文分成很多小块,叫"数据包",就像报文交换,每个数据包都有目标地址,因此路由器知道发到哪里,就像报文交换 每个数据包都有目标地址,因此路由器知道发到哪里。

报文具体格式由"互联网协议"定义,简称 IP,这个标准创建于 1970 年代,每台联网的计算机都需要一个IP地址,你可能见过,以点分隔的4组数字。

例如 172.217.7.238 是 Google 其中一个服务器的IP地址。

图片

数百万台计算机在网络上不断交换数据,瓶颈的出现和消失是毫秒级的,路由器会平衡与其他路由器之间的负载,以确保传输可以快速可靠,这叫"阻塞控制"。

有时,同一个报文的多个数据包,会经过不同线路,到达顺序可能会不一样,这对一些软件是个问题。

图片

幸运的是,在 IP 之上还有其他协议,比如 TCP/IP, 可以解决乱序问题,我们下节课会讲。

将数据拆分成多个小数据包,然后通过灵活的路由传递,非常高效且可容错,如今互联网就是这么运行的,这叫"分组交换"。

有个好处是 它是去中心化的,没有中心权威机构,没有单点失败问题。

事实上,因为冷战期间有核攻击的威胁,所以创造了分组交换。

如今,全球的路由器协同工作,找出最高效的线路,用各种标准协议运输数据,比如 "因特网控制消息协议"(ICMP)和 "边界网关协议"(BGP)。

世界上第一个分组交换网络,以及现代互联网的祖先是 ARPANET,名字来源于赞助这个项目的机构,美国高级研究计划局,这是 1974 年整个 ARPANET 的样子。

图片

每个小圆表示一个地点,比如大学或实验室,那里运行着一个路由器,并且有一台或多台计算机,能看到 "PDP-1" 和"IBM 360系统"。

甚至还有一个伦敦的 ATLAS,是通过卫星连到网络里的。

显然,互联网在这几十年间发展迅速,如今不再只有几十台计算机联网,据估计,有接近100亿台联网设备,而且互联网会继续快速发展。

特别是如今各种智能设备层出不,比如联网冰箱,恒温器以及其他智能家电,它们组成了"物联网"。

图片

第一部分到此结束,我们对计算机网络进行了概览,网络是一堆管子组成的吗?算是吧。

下节课我们会讨论一些高级传输协议,然后讲万维网。


以上内容就是 28. 计算机网络 的内容,感兴趣的同学记得点赞、关注、转发、收藏哦!

我会不定期发布课程的讲解!

更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1431808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java05 数组

一 概念介绍 指的是一种容器,可以同来存储同种数据类型的多个值。 但是数组容器在存储数据的时候,需要结合隐式转换考虑。 比如: 定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的, 但是byte类…

Linux文本三剑客-sed

一、sed介绍: sed(Stream Editor)是一种流编辑器,用于对文本进行处理和转换。它可以从输入流中读取文本,并根据指定的规则进行编辑和替换。sed通常用于在命令行中进行文本处理,可以实现搜索、替换、删除、…

Python对日期的一些操作

1. 把这种日期 Mon Jan 29 11:10:49 0800 2024 转换成 ‘2024/2/1 10:50:38’ 这里定义一个func 传入英文日期,返回标准日期格式 def time_formater(input_time_str): input_format %a %b %d %H:%M:%S %z %Y output_format %Y-%m-%d %H:%M:%S return dat…

springboot154基于Spring Boot智能无人仓库管理

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【Win10下实现开机Jar启动的CICD自动化流程】

目录 在Win10下实现开机Jar启动的CICD自动化流程,可以按照以下步骤进行操作:在Win10下实现开机Jar启动的CICD自动化流程,可以按照以下步骤进行操作: 安装Java环境:确保你的计算机上已经安装Java环境,可以通过命令行运行java -version来验证Java环境是否已安装。 编写启动…

操作符重点

简介 移位操作符 <<:左移操作符 移动的是二进制的数&#xff0c;即存储在计算机内部的数的补码 移动之后再右边补零 >>:右移操作符 同左移操作符 移动之后补的数分两种情况: (1).逻辑右移:移动后左边补1 (2).算术右移:移动后左边补原符号位 位操作符: (1).&a…

嵌入式基础知识-逻辑覆盖测试用例设计

1 基础示例 1.1 例题一 有如下程序&#xff0c;设计分别满足语句覆盖和分支覆盖的最有效力的测试用例。 int x 0; int y 0;if (x > 0 && y > 0) {y y/x; }if (x > 1 || y > 1) {y y 1; }x x y;分析&#xff1a; 语句覆盖只需要所有的语句都被执…

【JavaEE spring】SpringBoot 统一功能处理

SpringBoot 统一功能处理 1. 拦截器1.1 拦截器快速⼊⻔1.2 拦截器详解1.2.1 拦截路径1.2.2 拦截器执⾏流程 1.3 登录校验1.3.1 定义拦截器1.3.2 注册配置拦截器 2. 统⼀数据返回格式2.1 快速⼊⻔2.2 存在问题2.3 案例代码修改2.4 优点 3. 统⼀异常处理 1. 拦截器 后端程序根据…

浅谈——开源软件的影响力

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

立式台灯什么牌子好?立式护眼台灯品牌推荐

经常关灯看小说、凌晨加班的朋友都知道&#xff0c;眼睛很容易出现红血丝酸痛的症状&#xff0c;也有一些学生朋友夜间学习导致眼睛视力模糊。 这一系列的情况归根到底都来源于光线&#xff0c;不良的光线会不断给眼睛造成压力&#xff0c;久而久之出现用眼疲劳引起近视的风险…

C#入门详解_01_课程简介、C#语言简介、开发环境和学习资料的准备

文章目录 1. 课程简介2. C#语言简介3.开发环境与学习资料 1. 课程简介 开设本课程的目的 传播C#开发的知识&#xff0c;让更多的人有机会接触到软件开发行业引导有兴趣或者想转行的朋友进入软件开发行业 课程内容 完整讲述C#语言在实际软件开发中的应用采用知识讲述加实例程序…

Easy Excel导出一个表格多个Sheet

步骤&#xff1a; 1.查找官方API文档理解实现 2.实现融入到代码里面 一&#xff1a;Easy Excel重复多次写入(写到单个或者多个Sheet) 重复多次写入(写到单个或者多个Sheet) 理解重点&#xff1a; // 每次都要创建writeSheet 这里注意必须指定sheetNo 第几个sheetNo 而且sh…

WPF图表库LiveChart异常问题处理-System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围

问题&#xff1a; 在使用liveChart处理一个以时间为X轴的曲线时&#xff0c;遇到一个报错&#xff1a;指定的参数超出了有效值的范围System.ArgumentOutOfRangeException:“Specified argument was out of the range of valid values. Arg_ParamName_Name” 指定的参数超出了有…

PAT-Apat甲级题1007(python和c++实现)

PTA | 1007 Maximum Subsequence Sum 1007 Maximum Subsequence Sum 作者 CHEN, Yue 单位 浙江大学 Given a sequence of K integers { N1​, N2​, ..., NK​ }. A continuous subsequence is defined to be { Ni​, Ni1​, ..., Nj​ } where 1≤i≤j≤K. The Maximum Su…

Empowering Multimodal LLMs with Foresight Minds(Merlin)论文精读

paper&#xff1a;https://arxiv.org/pdf/2312.00589.pdfcode&#xff1a;https://ahnsun.github.io/merlin/ 0 Abstract 根据观测预测未知是人类的一个能力&#xff0c;对MLLM进行“future modeling”可以更好地激发其潜能&#xff1b;物体轨迹是一种连续帧间高度结构化的表…

计算机毕业设计 | vue+springboot 教务管理系统(附源码)

1&#xff0c;项目背景 随着我国高等教育的发展&#xff0c;数字化校园将成为一种必然的趋势&#xff0c;国内高校迫切需要提高教育工作的质量与效率&#xff0c;学生成绩管理工作是高校信息管理工作的重要组成部分&#xff0c;与国外高校不同&#xff0c;他们一般具有较大规模…

c#矩阵行列式计算//线程同步

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 实现矩阵行列式计算 {internal class Program{static void Main(string[] args){//定义矩阵Console.WriteLine("矩阵是&#xff1a;&quo…

ICV报告:最新排名!北京下降至第三位

2日&#xff0c;面向前沿科技领域的全球咨询机构ICV发布了《GFII-2023 报告》&#xff0c;其中在“2023年全球产业未来评估:未来20个城市”排名中显示&#xff0c;北京排名居世界第三。进入前十名的其他未来产业城市分别是旧金山-圣何塞、伦敦、慕尼黑、波士顿、纽约、东京横滨…

自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人

如今&#xff0c;大模型层出不穷&#xff0c;这为自然语言处理、计算机视觉、语音识别和其他领域的人工智能任务带来了重大的突破和进展。大模型通常指那些参数量庞大、层数深、拥有巨大的计算能力和数据训练集的模型。 但不能不承认的是&#xff0c;普通人使用大模型还是有一定…

前端工程化之:webpack2-2(内置插件)

目录 一、内置插件 1.DefinePlugin 2.BannerPlugin 3.ProvidePlugin 一、内置插件 所有的 webpack 内置插件都作为 webpack 的静态属性存在的&#xff0c;使用下面的方式即可创建一个插件对象&#xff1a; const webpack require("webpack")new webpack.插件…