网络的目的是把不同的计算机连接在一起,互联网的目标是把不同的网络连接在一起,因特网是最大的互联网。下面是计算机网络的基本功能。
其实记住前三个就行,主要只需要学会前两个。
一个计算机可以通过计算机网络把一个数据(比如一个word文件)发送给另一台计算机。
几台计算机,可以通过计算机网络方便的共同使用硬件(比如把一台可联网打印机的ip地址设置位静态,之后就可以让其他电脑通过其ip对其进行连接),软件和数据(比如一台电脑开启向日葵,可以使用另一台电脑的一切,但是这要求两者先联网)。
分布式就是多个计算机共同完成同一个工作的不同部分。 该功能其实是在前两个功能的前提下实现的,通过数据的通信和资源的共享,多个电脑可以一起完成一个计算程序。
因为一个服务器挂了,可以让另一个上,同时可以保证没有电脑过载,这其实是分布式的衍生。
阿帕网是在美苏冷战期间,美国为了防止作战指挥部被苏联捣毁而设计的,美国把指挥中心分散到了四个位置,这四个位置通过卫星信号进行通信,其中一个挂了,其他的还能继续跟上工作(这其实也是最早的分布系统)。之后进一步发展,阿帕网为了扩大用处脱离地区限制,发展成了internet(也就是互联网,注意这里是小写),采用了TCP/IP协议,最后发展成了Internet(因特网,注意这个是大写)。
第一级是校园网和企业网,同一个地区的校园网和企业网连接形成了地区网,多个地区的地区网连接形成主干网。
因为由国家来负担主干网,消耗太大,所以现在各国的主干网都由某个公司负责(比如中国移动,中国联通等,它们可以收取ISP管理费),这些公司负责在各个地方建立连接的ISP中转站(基站),这样个人电脑可以不加入校园网或者企业网,直接通过本地的ISP加入到地区ISP,直到主干ISP,原本校园网和企业网也是先连接本地ISP再逐层向上(本地ISP会给用户分配IP地址,下载时会显示黑龙江,云南等,这是在说明下载时要交互的主机或者服务器所在的地方,你选择的地方离你越近,下载越快),同时,IXP的概念允许两个地区ISP直接连接。
(1)从软硬件上看:计算机网络由硬件、软件和协议(一系列的规则和约定的集合)。
(2)从功能上看:分为通信子网(实现通信)和资源子网(实现数据共享)。
(1)边缘方式:其实就是用户间进程的通信,它分为:C/S关系(服务和被服务的关系,服务器处理用户请求并且执行任务,缺点是人越多就会越卡)、B/S关系(只是把客户端换成了浏览器,由浏览器向服务器发请求),P2P对等连接关系(每一个端系统即是服务器又是客户端,也就是几个电脑直接互联)。
(2)核心部分:包括路由等,主要功能就是给边缘部分提供服务。
(1)按照范围分类:广域网(WAN),局域网(MAN),城域网(LAN),个人区域网(PAN)。(从小到大)。局域网使用广播技术,广域网使用交换技术。
(2)按照使用者分:专用网和公用网。
(3)按照交换技术分:电路交换,报文交换,分组交换。
(4)按照拓扑结构可以分为:网状,星型等,总线,环型等结构。
广播式网络和点对点网络。
广播式:用总线的形式来共享信道。
点对点:分组存储转发和路由选择。
具体知识后面会一一细说。
性能指标就是衡量一个计算机网络好坏的标准,计网的性能指标一共有7个,前三个是一样的,但是讲每秒传输多少数据,只是对象和概念不一样:
速率既叫数据率也叫数据传输率,还叫比特率。它其实就是数字信号在计算机之间的传输速度,我们知道其实计算机之间传输信号是不存在真正的数据线的,是靠电磁波传输,但是两个电脑之间就好像无形中有一根线,这根线我们称之为数据通路。速率代表的就是在数据通路上,每秒能传输多少位的数据。它的单位有b/s,kb/s,Mb/s,Gb/s,Tb/s。其关系如下:
需要注意的是,只有形容内存或者其他表示数据的大小的时候,这些数据的底数是2,也就是1B= 2 3 2^3 23bit,1KB= 2 10 2^{10} 210B。但是计网这里都是以10为底,且单位都是bit,一定要注意。这其实是为了数据好看,好用做商业化,所以人为规定的,记住就行。
带宽在以前用模拟信号表示的时候,其实是一个模拟信号的频带宽度(最高频减去最低频),现在用于表示一个数据通路上的最高速率。也就是说,带宽就是速率,只不过是速率的最大值。当然,有的人肯定会迷惑,这就好比一个高速公路的限速是120km/h,那么这个120就是它的带宽,然后一张车的速率可以是100km/h,也可以是110km/h,但是最高不能超过120。带宽单位和速率是一样的。
这里把速率和带宽换个说法,速率就是你的电脑每秒能从网络上接收多少bit的数据,带宽就是你的电脑每秒最多能从网络的数据通路上接收多少的数据。
吞吐量其实是一个更小的速率概念,速率是相对于你整个计算机而言的,但是吞吐量是针对某一个接口而言的。比如说你现在正在通过QQ把手机上的一个视频传给电脑,那么你的手机的最大发送速率是1Mb,电脑的接收速率是10Mb,那么显然,网络的带宽可以说是1Mb(你接再快也要看我发多快),然后电脑的接收不是一个单一网卡在接收,而是好几张网卡,那么第一张网卡每秒接收1Kb的数据,那么就可以说它的吞吐量就是1kb/s。同理,最大吞吐量就是说它每秒最多接收多少,这是它的一个固有属性,但是当前吞吐量则受到网络的速率制约,不会更大。
后面四个都和时间相关:
它指的是数据从一个设备传输到另一个设备所需要的时间,单位是s。时延还分为四类:
发送数据的第一个bit算起,到整个数据发送完毕所需要的数据。比如我的计算机要发送一张图片到手机上,那么从我把图片的第一个bit放到网络的数据通路上开始,到整个图片都传到了数据通路上为止,所需要的时间就是发送时延。显然,发送时延和我计算机的速率还有图片的大小有关:
发送时延 = 图片大小 速率 发送时延=\frac{图片大小}{速率} 发送时延=速率图片大小
一般而言,如果图片大小大于带宽,那么这里的速率就是带宽。
传播时延,就是数据通路上的数据在数据通路上需要跑多少时间,更准确的说是数据通路上的第一位数据从源端口传递出到最后一位数据传递到目的端口所花费的时间。它的计算是:
传播时延 = 数据通路的物理长度 电磁波的传播速度 传播时延=\frac{数据通路的物理长度}{电磁波的传播速度} 传播时延=电磁波的传播速度数据通路的物理长度
电磁波的传播速度不用记,因为题目会给你,不同环境下的电磁波速度都是不一样的,注意审题即可。
数据传递到目标设备以后,其实是被存到了I/O接口的缓存里面(看计组的知识即可),所以如果当前CPU正在忙碌,需要等待一段时间,这就是排队时延。这个不需要计算,题目会直接给出。
CPU会对数据进行一些列的检错,还有传送到主存等操作,这段时间是处理时延。题目也会直接给你。
四个时延加起来就是总时延。
时延带宽积= 带宽 × 传播时延 带宽\times传播时延 带宽×传播时延,单位是bit。其实就是代表这么一段数据通路上最多会有多少位数据。要注意的是,传播时延是难以控制的,因为电磁波的速度和主机之间的距离都是一样的,所以想要更高的时延带宽积就只能提高带宽,提高带宽需要提高发送数据的发送数率,同时接收设备的接收速率也要提高。
这个如果玩王者荣耀的人肯定都见过:
往返时延,简称RTT,是指发送数据的机器发送数据开始,到这个发送数据的机器收到接收方传过来的确认收到的数据的时间。就拿王者荣耀举例,你当前的游戏画面其实腾讯的服务器实时向你发送的,当你收到数据以后你的手机也会给腾讯服务器发送一个收到的信号,然后这段时间就是往返时延。所以:
往返时延 = 发送的总时延 + 末端处理时间 + 接收的总时延 往返时延=发送的总时延+末端处理时间+接收的总时延 往返时延=发送的总时延+末端处理时间+接收的总时延
这里的处理时间其实就是你的手机需要把这个数据赶紧拿去用,等用完再发,当然考试会直接给你。显然,RTT越小就越流畅。具体是怎么互相发的,后面会细讲。
利用率又被分成两种,这里先说一下什么是信道,信道其实就是数据通路的一部分,一个数据通路由多个信道组成,就好比公路有三车道,四车道等。
信道利用率就是指一个信道上,一段时间内有数据的时间的占比。题目首先会和你说传输一个数据用了多少时间,然后和你说在数据通路的某个信道上有多少的时间有数据,然后又你用有数据的时间去除以总的时间即可。
网络利用率其实就是某段时间内整个网络的数据通路上各个信道的利用率加起来除以信道的总数。
利用率其实不是越高越好,因为数据越多,那么排队的就越多,处理起来就越费时间,所以利用率越高,网络越卡:
这里的几个性能指标都常考,但是不会直接这样考,而是配合着后面的知识一起考,在这里一些我们觉得没有用或者难以理解的点在学习了后面的知识以后就可以逐渐明朗了。
分层结构就是计算机之间进行通信的时候,要经过哪些步骤,我们把它一步步地分好,这样就便于我们管理和实现计算机之间的通信。具体怎么分的后面会说。
协议和我们日常生活中的协议是一个意思。就是在每一步骤当中(也就是每一层中),两个计算机之间进行通信的一些规则,这些规则都是人为规定的,所以很多时候不用纠结这是为什么这么规定。就比如信息的发出方的速率不能超过接收方的接收带宽等等。协议有三要素:
(1)语法:规定传输的数据格式(是12位一组,还是8位一组,有符号还是无符号等等)
(2)语义:规定要完成的功能(传过来是数字还是字符串还是指令等等)。
(3)同步:规定操作的顺序。
接口就是上一步是怎么过度到下一步的,就像坐电梯从一层到另一层的这个电梯,所以就叫做层与层之间的接口。一般而言,下层为上层提供服务,也就是接口是由下层来启动的,不经过下层,上层无法到达。
服务就是下面给上面提供的功能。比如下层准备好了数字,提交给上层计算。这里简单说一下层与层之间的数据传递是什么样子的,首先要了解三个概念:
(1)服务数据单元,简称SDU:它就是要发送到对面的数据。
(2)控制协议,简称PCI:它是根据当前层的协议而附加的一些信息,比如当前协议要求加一个校验码,计算机就把校验码给加进去。
(3)控制协议单元,简称PDU:PDU其实=PCI+SDU,当计算机打包好一个PDU以后就进入下一层。
当上一层的PUD传递到下一层之后,就变成了SDU,然后这层也根据协议给它加上PCI变成PDU传给再下一层,以此类推。
1.各层独立,互不影响。
2.分层的界面要清晰。
3.每层的协议要明朗且可以实现。
4.下层单向地向上层提供服务。
5.每一层的规定要能让标准化易于实现。(标准化就是大家一起遵守的约定,具体可以看看计组的接口标准化)。
实现是靠软硬件一起实现的,不同的设备实现分层和协议都是随意的,只需要能根据标准实现对应的功能即可。
OSI是分层中的一种,它一共分成了七层。这个标准是法定的。但是目前更常用的是大家约定好的TCP/IP标准(马上讲解)。因为OSI也在考点中,所以我们也需要进行学习。
IBM发布了第一个网络体系结构SNA,之后许多公司都各自发布了自己的网络体系结构,为了让大家统一,国际标准化组织ISO,综合所有的体系结构提出了OSI模型,希望大家共同遵守。它的优点是理论很完美,但是实际上在市场上无法流通,因为太复杂了,并且没有及时进入市场,反而被美国国防部的TCP/IP占了。但是因为它是人类理论的结晶,所以还有学习的价值(因为很久以后或许会用)。 OSI模型如图:
前三层是通信子网,用来传输数据,最上面三层是资源子网,用于处理数据。中间的传输层承上启下。
这个了解即可,后面会考的我们再在后面章节里面详细学习。如图:
先介绍一下图中的名词:
(1)中间系统:其实我们都知道现在信息的传输不是直接从一台电脑到达另一个电脑,而是需要多个基站,也就是路由器或者交换机进行中转,这个中转的过程需要核验一下信息是否正常,甚至可以根据协议尝试修复损坏的信息(后面会学习)。
(2)端到端:从发出到被接收,相关的信息没有被查看过。
(3)点到点:从发出到被接收,其中每经过一个中间节点都要被查看。
现在说一下过程,从应用层到数据链路层都是由计算机软硬件对信息进行各种编辑,让它能在传输中保证不出错,物理层则负责通过硬件传递数据,就不编辑了。当中间节点收到数据以后会根据数据链路层和网络层检查一下是否出现数据丢失错误,以及决定它下一步发到哪去,再往上传输层等四层的信息只有被接收方有资格查看(所以别人中途拦截了你QQ的消息,没有腾讯QQ这个软件的编译和破解是看不了的,而且破解码对你而言是唯一的)。可以比喻成一个送信的过程,你在纸上写信的过程就是前面三层,然后第四层装入信封,后面的网络层和数据链路层再各套一个信封进行保护,物理层是邮差,根据你信封上的地址送给下一个邮差,下一个邮差接到信以后打开前两个信封,看看最里面的信封有没有破损,完好的话就再套回去,然后写上新的邮差地址…这样依次传递,直到送到目的人手里,目的人就会拆开全部的信封查看里面的消息。
它就是我们手里们的应用程序,比如QQ,微信等需要联网的程序。常用的协议有文件传输FTP,电子邮件SMTP,万维网HTTP等。
相当于一个编译器,把应用层的数据编译成目标机器上能识别的数据(比如苹果系统上的消息转成安卓系统能识别的),同时还对数据进行加密,让别人抓包也无法破解。这个过程其实也是由应用程序来干的,比如QQ之间能识别QQ传递的图片,不管是什么系统,但是抖音就有可能识别不了。它还有一个功能就是对数据进行压缩和解压。表示层没有协议。
会话层负责和用户进程建立连接,并且在连接上有序传输数据。简单来说,就是建立一个专门用来传输这段数据的进程,这样就可以保证数据完整地被传输,不会被电脑的其他进程影响。这一步其实也是应用程序去请求操作系统来完成的。相当于是应用程序告诉操作系统,它准备使用网络传输数据了,于是操作系统就帮它搞一个环境,让它随时可以把上面两步准备好的数据丢给操作系统。它还可以在会话被中断的时候恢复传递,不需要重新从头传递。协议有ADSP和ASP等。在对面电脑的时候它的作用也是告诉操作系统,它需要网络,所以一来一回就形成了两边的一个对话。
它是承上启下的一层。在发送端是由操作系统决定的,它编辑好了这个信息是被接收方哪个应用使用的。一般而言,一个计算机的网卡上有很多的寄存器,各代表一个端口,每一个进程用一个端口,所以接收方在传输层找到端口号以后就可以知道要把信息丢给哪一个应用去处理。它负责的重要功能是:
(1)可靠传输、不可靠传输:对于重要不能错的信息,需要接收方的反馈才继续传输。对于可以出点错但要求快的信息,直接传过去就行,不用连接。
(2)差错控制:可以查看是否有错,并且修改(后面说)。
(3)流量控制:其实就是防止发送方的速率超过接收方的最大速率。
(4)复用和分用:如果目的的地址是一样的,操作系统把多个不同应用的要传递的数据混一起发,提高效率,但是会给每一个都分好端口号,传递到位了对面的操作系统会根据端口号把它们分开。
传输层会把数据一份份的打包,称之为分组。每一个分组就是一个包含端口号的,打包好的数据。
网络层也是操作系统负责的,它会在分组上添加目的机器的具体位置,这个时候分组就变成了数据报。它的功能有:
(1)路由选择:选择要依次经过哪些中间节点才能最快到达目的位置。
(2)流量控制:和传输层的功能是一样的。(这其实也是OSI没有被采用的原因之一:有些层的功能和协议重复了)
(3)差错控制:和传输层是一样的,但是这个查的错是传递的信息等。
(4)拥塞控制:网卡的时候怎么办。
具体内容和协议后面会细细的学习。
把数据报组装成数据帧。也就是它是一次把多个数据报一起传递的,数据链路层会把目的相同的数据报给打包起来(比如你要给同一个位置的两个人发消息,那么完全可以先一起传输,传输到最后一个基站,再被分开发送)。它的功能有:
(1)定义帧的开始和结束。这样目的操作系统才能把数据报又提取出来。
(2)也有差错控制,只不过这里的检测帧是不是有错。
(3)流量控制:和前面一样。
(4)对信道访问的控制。
这里大致了解即可,不懂的后面章节都会讲。
就是把比特率传输出去。包括了:
(1)定义接口的特性(这里和计组的知识是重合的)。
(2)定义传输模式。
(3)定义传输速率。
(4)比特同步。
(5)比特编码。
具体内容下一章就讲。
其实OSI和TCP/IP不是对立的,很多内容其实是重复的,只不过TCP/IP只有四层,省去了OSI的一些冗余而已,它是目前我们一直在用的真正的模型,所以需要好好学习。
如图就是TCP/IP模型:
右边是其重要的协议,我们都将认真学习。
我个人也认为TCP/IP更加合理,因为应用层表示层和会话层(也就是资源子网),都是用应用程序来干的,我们写程序的时候是一起处理的,根本不需要分成三层,所以直接用应用层来代表即可。传输层的功能和网际层的功能和OSI的网络层以及数据链路层基本一样。最后的网络接口层则是规定了一些硬件规范,大致和物理层也是一致的。这就是为什么要学习一下OSI的原因,因为OSI就相当于把TCP/IP进一步细化了,两者其实是一致的。
这个模型之所以叫TCP/IP,是因为随着发展,应用层和网络接口层一直在变,但是中间两层的TCP和IP协议几乎不怎么变化,所以就叫TCP/IP。
这边的面向连接和无连接说的很复杂,其实就是前面OSI传输层里面说的可靠传输和不可靠传输的概念。
其实应用层,传输层和网络层都是TCP/IP的,最后数据链路层和物理层是OSI的,但是前面也说过,OSI的网络接口层其实就是把它两合并了。所以综合下来,都是我们目前生活中正在使用的,大家放心学就可以了,不会出现学了以后没有用的,没有用的都已经被过滤了。说白了,我们就是在学习TCP/IP,里面再混杂一些目前在使用的OSI知识(因为目前OSI也不是完全不用)。
本课程将会根据上面这个图从下往上依次学习。
最后说一句,我本科是计算机的,但是之前我大学本科学习计网的时候总觉得这个科目不重要,总认为这是通信的学科,但是后面实际开始工作,写了一些程序才发现,其实通信的同学们只需要学习物理层即可,其他的所有功能其实都是要靠我们计算机的同学通过软硬件实现的,甚至你写一个能联网的程序,如果你不清楚资源子网是怎么工作的,你会学得一脸懵逼,所以计网对于计算机的学生其实更加重要了。