diff --git a/README.md b/README.md index 735da5f..105e784 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,10 @@ AQS剩余部分,以及阻塞队列源码暂时先搁置一下。 +[计算机网络-概述](docs/Computer_NetWork/计算机网络-概述.md) + + + # Apollo [Apollo简单入门](docs/Apollo/Apollo简单入门.md) diff --git a/docs/Computer_NetWork/计算机网络-概述.md b/docs/Computer_NetWork/计算机网络-概述.md new file mode 100644 index 0000000..0d17d5a --- /dev/null +++ b/docs/Computer_NetWork/计算机网络-概述.md @@ -0,0 +1,688 @@ +--- +title: 计算机网络-概述 +tags: + - 计算机网络 +categories: + - 计算机网络 +keywords: 计算机网络,计网 +description: 计算机网络-概述篇。 +cover: 'https://cdn.jsdelivr.net/gh/youthlql/lqlp@v1.0.0/computer_network/logo.jpg' +abbrlink: be54bfd5 +date: 2021-04-03 14:21:58 +--- + + + +# 概述 + +## 计算机网络在信息时代的作用 + +* 计算机网络已由一种**通信基础设施**发展成为一种重要的**信息服务基础设施** +* 计算机网络已经像水,电,煤气这些基础设施一样,成为我们生活中不可或缺的一部分 + + + +> 我国互联网发展状况:http://www.cnnic.net.cn + +## 因特网概述 + +### 网络、互连网(互联网)和因特网 + +网络:网络(Network)由若干**结点(Node)**和连接这些结点的**链路(Link)**组成。 + + + +互联网(或互连网):多个网络通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互连网(互联网)。因此,互联网又称为“网络的网络(Network of Networks)”。 + + + +因特网:因特网(Internet)是世界上最大的互连网络(用户数以亿计,互连的网络数以百万计)。 + + + + + +> **internet与Internet的区别** +> +> * internet(互联网或互连网)是一个通用名词,它泛指多个计算机网络互连而成的网络。在这些网络之间的通信协议可以是任意的。 +> * Internet(因特网)则是一个专用名词,它指当前全球最大的、开放的、由众多网络互连而成的特定计算机网络,它采用TCP/IP协议族作为通信的规则,其前身是美国的ARPANET。 +> + + + +### 因特网发展的三个阶段 + + + + + +**因特网服务提供者`ISP`(`I`nternet `S`ervice `P`rovider)** + + + +> Q:普通用户是如何接入到因特网的呢? +> +> A:通过ISP接入因特网 +> +> ISP可以从因特网管理机构申请到成块的IP地址,同时拥有通信线路以及路由器等联网设备。任何机构和个人只需缴纳费用,就可从ISP的得到所需要的IP地址。这一点很重要。因为因特网上的主机都必须有IP地址才能进行通信,这样就可以通过该ISP接入到因特网 +> + + + +**中国的三大`ISP`:中国电信,中国联通,中国移动** + + + + + +**基于ISP的三层结构的因特网** + + + +1、图中红线部分是两个私人用户进行通信的大致链路,可以看到需要经过多个ISP层级 + +2、一旦某个用户能够接入到因特网,那么他也可以成为一个ISP,所需要做的就是购买一些如调制解调器或路由器这样的设备,让其他用户可以和他相连。 + +3、第一层ISP可以直接互联,第二层ISP和一些大公司都是第一层ISP的用户。 + + + + + +### 因特网的标准化工作 + +* 因特网的标准化工作对因特网的发展起到了非常重要的作用。 +* 因特网在指定其标准上的一个很大的特点是**面向公众。** + * 因特网所有的**RFC**(Request For Comments)技术文档都可从因特网上免费下载; + * 任何人都可以随时用电子邮件发表对某个文档的意见或建议。 +* **因特网协会ISOC**是一个国际性组织,它负责对因特网进行全面管理,以及在世界范围内促进其发展和使用。 + * 因特网体系结构委员会IAB,负责管理因特网有关协议的开发; + * 因特网工程部IETF,负责研究中短期工程问题,主要针对协议的开发和标准化; + * 因特网研究部IRTF,从事理论方面的研究和开发一些需要长期考虑的问题。 + + + +* 制订因特网的正式标准要经过一下**4个阶段**: + + 1、因特网草案(在这个阶段还不是RFC文档) + + 2、建议标准(从这个阶段开始就成为RFC文档) + + 3、草案标准 + + 4、因特网标准 + + + +### 因特网的组成 + +* 边缘部分 + + 由所有连接在因特网上的**主机**组成(台式电脑,大型服务器,笔记本电脑,平板,智能手机,智能手表,以及物联网智能硬件等)。这部分是**用户直接使用**的,用来进行**通信**(传送数据、音频或视频)和**资源共享**。 + +* 核心部分 + + 由**大量网络**和连接这些网络的**路由器**组成。这部分是**为边缘部分提供服务**的(提供连通性和交换)。 + + + +1. 路由器是一种专用计算机,但我们不称它为主机,路由器是实现分组交换的关键构建,其任务是转发收到的分组,这是网络核心最重要的部分。 + + + +## 三种交换方式 + +网络核心部分是互联网中最复杂的部分。 + +网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其他主机通信(即传送或接收各种形式的数据)。 + +在网络核心部分起特殊作用的是**路由器**(router)。 + +**路由器**是实现**分组交换** (packet switching) 的关键构件,其任务是转发收到的分组,这是网络核心部分最重要的功能。 + +### 电路交换 + + + +1. 传统两两相连的方式,当电话数量很多时,电话线也很多,就很不方便 +2. 所以要使得每一部电话能够很方便地和另一部电话进行通信,就应该使用一个**中间设备**将这些电话连接起来,这个中间设备就是**电话交换机** + + + +* 电话交换机接通电话线的方式称为电路交换; + +* 从通信资源的分配角度来看,交换(Switching)就是按照某种方式动态地分配传输线路的资源; + +* 电路交换的三个步骤: + + 1、建立连接(分配通信资源) + + 2、通话(一直占用通信资源) + + 3、释放连接(归还通信资源) + + + +1. 当使用电路交换来传送计算机数据时,其线路的传输效率往往很低。这是因为计算机数据是突发式地出现在传输线路上的,而不是像打电话一样一直占用着通信资源。 +2. 试想一下这种情况,当用户正在输入和编辑一份待传输的文件时,用户所占用的通信资源暂时未被利用,该通信资源也不能被其它用户利用,宝贵的通信线路资源白白被浪费了 +3. 因此计算机通常采用的是**分组交换**,而不是线路交换 + +### 分组交换 + + + +1. 通常我们把表示该消息的整块数据成为一个**报文**。 +2. 在发送报文之前,先把较长的报文划分成一个个更小的等长数据段,在每一个数据段前面。加上一些由必要的控制信息组成的首部后,就构成一个分组,也可简称为“包”,相应地,首部也可称为“包头”。首部起到了很大的作用,首先首部中肯定包含了分组的目的地址,否则分组传输路径中的各分组交换机(也就是个路由器)就不知道如何转发分组了 +3. 分组从源主机到目的主机,可走不同的路径(也就是不同的路由)。 +4. 分组乱序:也就是分组到达目的站的顺序不一定与分组在源站的发送顺序相同。 +5. 分组也可能出现丢失,误码,重复等问题(后面介绍) + + + +**分组交换过程中各角色的功能** + +1、发送方 + +* 构造分组 +* 发送分组 + +2、路由器 + +* 缓存分组 +* 转发分组 + + + +路由器处理分组的过程是:分组交换机收到一个分组后,先将分组暂存下来,按照首部中的目的地址进行查表转发,找到合适的转发接口,通过该接口将分组转发给下一个分组交换机 + +3、接收方 + +* 接收分组 +* 还原报文 + + + +### 报文交换 + +报文交换中的交换结点也采用存储转发方式,但报文交换对报文的大小没有限制,这就要求交换结点需要较大的缓存空间。报文交换主要用于早期的电报通信网,现在较少使用,通常被较先进的分组交换方式所取代。因此,不再详细介绍报文交换。 + + + +### 三种交换方式的对比 + +假设A,B,C,D是分组传输路径所要经过的4个结点交换机,纵坐标为时间 + + + + + +电路交换: + +* 通信之前首先要建立连接;连接建立好之后,就可以使用已建立好的连接进行数据传送;数据传送后,需释放连接,以归还之前建立连接所占用的通信线路资源。 + +* 一旦建立连接,中间的各结点交换机就是直通形式的,比特流可以直达终点; + +报文交换: + +* 可以随时发送报文,而不需要事先建立连接;整个报文先传送到相邻结点交换机,**全部存储**下来后进行查表转发,转发到下一个结点交换机。 +* **整个报文**需要在各结点交换机上进行存储转发,由于不限制报文大小,因此需要各结点交换机都具有较大的缓存空间。 + +分组交换: + +* 可以随时发送分组,而不需要事先建立连接。构成原始报文的**一个个分组**,**依次**在各结点交换机上存储转发。各结点交换机在发送分组的同时,还缓存接收到的分组。 +* **构成原始报文的一个个分组**,在各结点交换机上进行存储转发,相比报文交换,减少了转发时延,还可以避免过长的报文长时间占用链路,同时也有利于进行差错控制。 + + + + + +## 计算机网络的定义和分类 + +### 定义 + +* 计算机网络的精确定义并未统一,随着网络的发展,给出了不同的定义,这些定义反映了当时网络技术发展的水平 +* 计算机网络的最简单的定义是:一些互相连接的、自治的计算机的集合。 + * 互连:是指计算机之间可以通过有线或无线的方式进行数据通信; + * 自治:是指独立的计算机,他有自己的硬件和软件,可以单独运行使用; + * 集合:是指至少需要两台计算机; +* 计算机网络的较好的定义是:计算机网络主要是由一些通用的,可编程的硬件(一定包含有中央处理机CPU)互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。 + * 计算机网络所连接的硬件,并不限于一般的计算机,而是包括了智能手机等智能硬件。 + * 计算机网络并非专门用来传送数据,而是能够支持很多种的应用(包括今后可能出现的各种应用)。 + + + +上图所示的各终端机只是具有显示和输入设备的终端,而并不是自治的计算机,所以上图并不是计算机网络,只是一个运行分时系统的大型机系统。 + +### 分类 + +**按交换技术分类:** + +* 电路交换网络 +* 报文交换网络 +* 分组交换网络 + +**按使用者分类:** + +* 公用网,公用是指电信公司出资建造的大型网络,公用的意思是所有愿意按电信公司规定交纳费用的人都可以使用这种网络 +* 专用网,是指某个单位为单位内部建立的网络,不对本单位意外提供服务,例如军队,铁路,电力等系统均有本系统的专用网 + +**按传输介质分类:** + +* 有线网络,包括双绞线网络,光纤网络等 +* 无线网络,比如wifi + +**按覆盖范围分类:** + +* 广域网WAN(Wide Area Network) + +作用范围通常为几十到几千公里,因而有时也称为远程网。广域网是互联网的核心部分,其任务是通过长距离(例如,跨越不同的国家)运送主机所发送的数据。 + +* 城域网MAN + +作用范围一般是一个城市,可跨越几个街区甚至整个城市,作用距离通常为5-50公里 + +* 局域网LAN + +一般用微型计算机或工作站通过高速通信线路相连(速率通常在 10 Mbit/s 以上),但地理上范围较小(1 km 左右),比如一栋实验楼,一个校园等 + +* 个域网PAN + +就是在个人工作的地方把个人使用的电子设备用无线技术连接起来的网络。(比如笔记本,耳机,键盘等),覆盖范围大约为10米 + +**按拓扑结构分类:** + +* 总线型网络 + + + +优点:建网容易,增减节点方便,节省线路 + +缺点:重负载是通信效率不高,总线任意一处出现故障,则全网瘫痪。 + +* 星型网络 + + + +星型网络图中的中央设备现在一般是交换机或路由器, + +优点:这种网络拓扑便于网络的集中控制和管理,因为端用户都要通过中央设备 + +缺点:成本高,中央设备对故障敏感 + + + +* 环形网络 + + + +环中信号是单向传输的 + +* 网状型网络 + + + +一般情况下,每个节点至少由两条路径与其他节点相连,多用在广域网中 + +优点:可靠性高 + +缺点:控制复杂,线路成本高 + + + +## 计算机网络的性能指标 + +### 速率 + + + +### 带宽 + + + +### 吞吐量 + + + +带宽1 Gb/s的以太网,代表其额定速率是1 Gb/s,这个数值也是该以太网的吞吐量的上限值。实际上,对于带宽1 Gb/s的以太网,可能实际吞吐量只有 700 Mb/s,甚至更低。 + +### 时延 + +时延时指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。 + +我们来看看分组从源主机传送给目的主机的过程中,都会在哪些地方产生时延 + +* 发送时延:源主机将分组发往传输线路所需的时间。 + +* 传播时延:代表分组的电信号在链路上传输所需的时间。 + +* 处理时延:路由器在收到分组后,对其进行存储转发所花费的时间 + +> 有的教材中还有一个排队时延,本课程将排队时延与处理时延合并称为处理时延 + +网卡的发送速率,信道带宽,交换机的接口速率,它们共同决定着主机的发送速率。 + + + +当处理时延忽略不计时,发送时延和传播时延谁占主导,要具体情况具体分析 + + + +### 时延带宽积 + + + + + +### 往返时间 + + + + + +### 利用率 + + + + + +### 丢包率 + + + + + + + +## 计算机网络体系结构 + +### 常见的计算机网络体系结构 + + + +1、如今用的最多的是TCP/IP体系结构,现今规模最大的、覆盖全球的、基于TCP/IP的互联网并未使用OSI标准。TCP/IP体系结构相当于将OSI体系结构的物理层和数据链路层合并为了网络接口层,并去掉了会话层和表示层。 + +2、TCP/IP在网络层使用的协议是IP协议,IP协议的意思是网际协议,因此TCP/IP体系结构的网络层称为网际层 + + + + + +1、在用户主机的操作系统中,通常都带有符合TCP/IP体系结构标准的TCP/IP协议族。而用于网络互连的路由器中,也带有符合TCP/IP体系结构标准的TCP/IP协议族。只不过路由器一般只包含网络接口层和网际层。 + +2、 + +**网络接口层**:并没有规定具体内容,这样做的目的是可以互连全世界各种不同的网络接口,例如:有线的以太网接口,无线局域网的WIFI接口等。因此本质上TCP/IP协议体系结构只有上面的三层。 + +**网际层**:核心协议是IP协议。 + +**运输层**:TCP和UDP是这层的两个重要协议。 + +**应用层**: 包含了大量的应用层协议,如 HTTP , DNS 等。 + + + +3、IP协议可以将不同的网络接口(网络接口层)进行互连,并向其上的TCP协议和UDP协议提供网络互连服务。 + +- 而TCP协议在享受IP协议提供的网络互连服务的基础上,可向应用层的相应协议提供可靠的传输服务。 + +- UDP协议在享受IP协议提供的网络互连服务的基础上,可向应用层的相应协议提供不可靠的传输服务。 + + + +4、TCP/IP体系结构中最重要的是**IP协议**和**TCP协议**,因此用TCP和IP来表示整个协议大家族。 + + + + + + + + + +由于TCP/IP体系结构为了将不同的网络接口进行互连,因此它的网络接口层并没有规定什么具体的内容。然而,这对于我们学习计算机网络的完整体系而言就会缺少一部分内容,因此学习计算机体系结构时往往采取折中的办法。也就是综合OSI和TCP/IP的优点,采用一种5层体系的原理结构。 + +### 分层的必要性 + + + +**物理层问题** + + + + + +严格来说,传输媒体并不属于物理层。计算机传输的信号,并不是图示的方波信号,这样举例只是让初学者容易理解 + +**数据链路层问题** + + + +1、如图所示,主机A要给主机C发送数据。 + +2、但是表示数据的信号会通过总线传播到总线上的每一个主机 + +3、那么问题来了,主机C是如何知道该数据是发送给自己的,自己要接受?而主机B,D,E又如何知道该数据不删发送给自己的,自己应该拒绝呢? + +4、这就很自然的引出了下面几个问题 + +Q:如何标识网络中的各主机(也就是主机编址问题,例如MAC地址)? + +A:主机在发送数据时,应该给数据附加上目的地址,当其他主机收到后,根据目的地址和自身地址来决定是否接受数据。 + + + +Q:目的主机如何从信号所表示的一连串比特流中区分出地址和数据? + +A:也就是需要解决分组的封装格式问题 + + + +Q:另外对于总线型的网络,还会出现下面这种典型的问题 + + + + + +某个时刻,总线是空闲的。 片刻之后,主机B和D同时向总线发送数据,这必然造成信号碰撞。不过这种总线型的网络早已淘汰,现在常用的是使用以太网交换机将多台主机互连形成的交换式以太网。那么,以太网交换机又是如何实现的呢? + + + +**网络层问题** + +> 到这里可能会发现,只要解决了物理层和数据链路层各自所面临的问题,我们就可以实现分组在**一个网络**上传输了。但是,我们每天都会使用的因特网是由**非常多的网络**和路由器互连起来的,仅解决物理层和数据链路层的问题还是不能正常工作。 + + + + + + + +**运输层问题** + +1、假设这台主机中运行着两个与网络通信有关的应用进程(QQ和谷歌浏览器),这台服务器中运行着与网络通信相关的服务器进程。某个时刻,主机收到了来自服务器的分组,那么这些分组应该交给浏览器进程处理呢,还是应该交给QQ进程处理? + +- 引出了我们如何标识与网络通信相关的引用进程,进而解决进程之间基于网络通信的问题。 + + + + + +**应用层问题** + + + + + +**总结** + + + + + +### 分层思想举例 + +> 此例子只是简单的例子,后续可能会写一篇详细的。 + +假设网络拓扑如下所示 + + + + + +**解析:** + +主机和Web服务器之间基于网络的通信,实际上是主机中的浏览器应用进程与Web服务器中的Web服务器应用进程之间基于网络的通信 + + + + + +**各层在整个过程中起到怎样的作用?** + +**1、应用层** + +- 应用层按照HTTP协议的规定构建一个HTTP请求报文 + +- 应用层将HTTP请求报文交付给运输层处理 + + + + + + + +**2、运输层** + +- 运输层给HTTP请求报文添加一个TCP首部,使之成为TCP报文段 + +- TCP报文段的首部格式作用是区分应用进程以及实现可靠传输 + +- 运输层将TCP报文段交付给网络层处理 + + + + + +**3、网络层** + +- 网络层给TCP报文段添加一个IP首部,使之成为IP数据报 + +- IP数据报的首部格式作用是使IP数据报可以在互联网传输,也就是被路由器转发 + +- 网络层将IP数据报交付给数据链路层处理 + + + + + +**4、数据链路层** + + + +- 数据链路层给IP数据报添加一个首部和一个尾部,使之成为帧 (图示右边为首部,左边为尾部) + +- 该首部的作用主要是为了让帧能够在一段链路上或一个网络上传输,能够被相应的目的主机接收 + +- 该尾部的作用是让目的主机检查所接收到的帧是否有误码 + +- 数据链路层将帧交付给物理层 + + + + + + + +**5、物理层** + +* 物理层先将帧看做是比特流,这里的网络N1假设是以太网,所以物理层还会给该比特流前面添加前导码 +* 前导码的作用是为了让目的主机做好接收帧的准备 +* 物理层将装有前导码的比特流变换成相应的信号发送给传输媒体 + + + + + +**6、路由器** + +- 信号通过传输媒体到达路由器 + + + + + +7、**路由器转发** + + + +在路由器中 + +* 物理层将信号变为比特流,然后去掉前导码后,将其交付给数据链路层 +* 数据链路层将帧的首部和尾部去掉后,将其交付给网络层,这实际交付的是IP数据报 +* 网络层解析IP数据报的首部,从中提取目的网络地址 + +* 提取目的网络地址后查找自身路由表。确定转发端口, 以便进行转发 +* 网络层将IP数据报交付给数据链路层 +* 数据链路层给IP数据报添加一个首部和一个尾部,使之成为帧 +* 数据链路层将帧交付给物理层 +* 物理层先将帧看成比特流,这里的网络N2假设是以太网,所以物理层还会给该比特流前面添加前导码 +* 物理层将装有前导码的比特流变换成相应的信号发送给传输媒体,信号通过传输媒体到达Web服务器 + + + + + + + +**8、接收方接收** + +在Web 服务器上 + +* 物理层将信号变换为比特流,然后去掉前导码后成为帧,交付给数据链路层 +* 数据链路层将帧的首部和尾部去掉后成为IP数据报,将其交付给网络层 +* 网络层将IP数据报的首部去掉后成为TCP报文段,将其交付给运输层 +* 运输层将TCP报文段的首部去掉后成为HTTP请求报文,将其交付给应用层 +* 应用层对HTTP请求报文进行解析,然后给主机发回响应报文 + +**发回响应报文的步骤和之前过程类似** + + + +### 专用术语 + +以下介绍的专用术语来源于OSI的七层协议体系结构,但也适用于TCP/IP的四层体系结构和五层协议体系结构 + +**实体** + + + + + +**协议** + + + +1、协议:控制两个对等实体进行逻辑通信的规则的集合 + +2、之所以称为逻辑通信,是因为这种通信其实并不存在,它只是我们假设出来的一种通信,目的在于方便我们单独研究体系结构某一层时而不用考虑其它层 + +3、协议三要素: + +* 语法:定义所交换信息的格式 +* 语义:定义收发双方所要完成的操作 +* 同步:定义收发双发的时序关系 + + + +**服务** + + + + + + + + + + + diff --git a/docs/Java/JVM/JVM系列-第4章-虚拟机栈.md b/docs/Java/JVM/JVM系列-第4章-虚拟机栈.md index 8dfab92..b5d148e 100644 --- a/docs/Java/JVM/JVM系列-第4章-虚拟机栈.md +++ b/docs/Java/JVM/JVM系列-第4章-虚拟机栈.md @@ -363,7 +363,7 @@ Java代码的行号和字节码指令行号的对应关系 1. 参数值的存放总是从局部变量数组索引 0 的位置开始,到数组长度-1的索引结束。 2. 局部变量表,**最基本的存储单元是Slot(变量槽)**,局部变量表中存放编译期可知的各种基本数据类型(8种),引用类型(reference),returnAddress类型的变量。 3. 在局部变量表里,**32位以内的类型只占用一个slot**(包括returnAddress类型),**64位的类型占用两个slot**(1ong和double)。 - - byte、short、char在储存前辈转换为int,boolean也被转换为int,0表示false,非0表示true + - byte、short、char在储存前被转换为int,boolean也被转换为int,0表示false,非0表示true - long和double则占据两个slot 4. JVM会为局部变量表中的每一个Slot都分配一个访问索引,通过这个索引即可成功访问到局部变量表中指定的局部变量值 5. 当一个实例方法被调用的时候,它的方法参数和方法体内部定义的局部变量将会**按照顺序被复制**到局部变量表中的每一个slot上 diff --git a/docs/Java/concurrency/Java并发体系-第二阶段-锁与同步-[1].md b/docs/Java/concurrency/Java并发体系-第二阶段-锁与同步-[1].md index 69a4a5f..9bba188 100644 --- a/docs/Java/concurrency/Java并发体系-第二阶段-锁与同步-[1].md +++ b/docs/Java/concurrency/Java并发体系-第二阶段-锁与同步-[1].md @@ -30,7 +30,7 @@ date: 2020-10-06 22:09:58 ### 可见性概念 -可见性(Visibility):是指一个线程对共享变量进行修改,另一个先立即得到修改后的新值。 +可见性(Visibility):是指一个线程对共享变量进行修改,另一个线程立即得到修改后的新值。 ### 可见性演示 @@ -38,7 +38,7 @@ date: 2020-10-06 22:09:58 /* 笔记 * 1.当没有加Volatile的时候,while循环会一直在里面循环转圈 * 2.当加了之后Volatile,由于可见性,一旦num改了之后,就会通知其他线程 - * 3.还有注意的时候不能用if,if不会重新拉回来再判断一次。(也叫做虚假唤醒) + * 3.还有注意不能用if,if不会重新拉回来再判断一次。(也叫做虚假唤醒) * 4.案例演示:一个线程对共享变量的修改,另一个线程不能立即得到新值 * */ public class Video04_01 {