参考视频教程:计算机网络微课堂.
•计算机网络已由一种通信基础设施发展成为一种重要的信息服务基础设施。
•计算机网络已经像水、电、煤气这些基础设施一样,成为我们生活中不可或缺的一部分。
网络(Network)由若干 结点(Node) 和连接这些结点的 链路(Link) 组成。
多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。
因此,互联网是“网络的网络(Network of Networks)”
因特网(Internet) 是世界上最大的互连网络(用户数以亿计,互连的网络数以百万计)。
internet与Internet的区别:
我们的普通用户是通过ISP接入了因特网。ISP可以从互联网管理机构申请到成块的ip地址,同时拥有通信线路以及路由器等连网设备。任何机构或者个人,只要向ISP缴纳一定费用,就可以得到ip地址,因为因特网上的主机必须有ip地址才可以通信。
我国的主要ISP是移动,电信和联通:
根据提供服务的覆盖面积大小及所拥有的P地址数量的不同,ISP也分为不同的层次。
由上图可知,一旦某个用户能够接入到因特网。那么他也可以成为一个ISP。所需要做的就是购买些如调制解调器或路盘器这样的设备,让其他用户可以和他相连。一个ISP可以很方便地在因特网拓扑上增添新的层次和分支。
边缘部分:
由所有连接在因特网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。
核心部分:
由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)。
我们打电话,两个电话机之间通过一条线路连接,五个电话机就需要10条线路才可以达到两两互连,当有成千上万乃至更多电话机时,我们就不能再通过简单的两两搭线的形式进行连接了,这个时候,我们需要的就是一个电话交换机,很多电话机可以链接到上面,它可以帮助我们实现两两电话机相互连接。我们的电话交换机与电话交换机之间也是可以相互连接的,所以就达到了全球互联的效果。
电话交换机接通电话线的方式称为电路交换
从通信资源的分配角度来看,交换(Switching) 就是按照某种方式动态地分配传输线路的资源
假设下图是因特网的一部分,在因特网中,最重要的分组交换机就是路由器,它负责将各种网络互连起来,并对接受到的分组进行转发,也就是进行分组交换。
下面有这样一个例子:
假设主机H6的用户要给主机H2的用户发送一条消息,通常我们把表示该消息的整块数据称为一个报文,在发送报文之前,先把较长的报文划分成为一个个更小的等长数据段。
然后在数据段前面加上一些由必要的控制信息组成的首部后,就构成了一个分组,通常简称为“包”,相应的,首部也可以称为“包头”。分组交换机收到一个分组后,先将分组暂时存储下来,再检查其首部,按照首部中的目的地址进行查表转发,找到合适的转发接口,通过该接口将分组转发给下一个分组交换机。
在上图的主机H2收到各分组后,将各分组首部去掉,将各数据段组合还原出原始报文。
发送方:构造分组,发送分组
路由器:缓存分组,转发分组
接收方:接受分组,还原报文
报文交换中的交换结点也采用存储转发方式,但报文交换对报文的大小没有限制,这就要求交换结点需要有较大的缓存空间,报文交换主要用于军期的电报通信网,现在较少使用,通常被较先进的分组交换方式所取代。此处不再详细介绍。
下图,假设A,B,C,D是分组传输路径上要经过的4个结点交换机,纵坐标为时间。
对于电路交换,通信之前首先要建立连接,连接建立好之后,就可以使用已建立好的连接进行数据传送,数据传送结束后,需要释放连接,以归还之前建立连接所占用的通信线路资源。
对于报文交换,可以随时发送报文。而不需要事先建立连接,整个报文先传送到相邻结点交换机,全部存储下来后进行查表转发,转发到下一个节点交换机。
对于分组交换,可以随时发送分组。而不需要事先建立连接,构成原始报文的一个个分组。依次在各结点交换机上存储转发,各个结点变换机在发送分组的同时,还缓存接收到的分组。
由上图可知,当使用电路交换的时候,一旦我们建立了连接,中间的各结点变换机就是直通的形式,比特流可以直达终点。
当使用报文交换的时候,整个报文需要在各结点交换机上进行存储转发,由于不限制报文的大小,因此需要各结点交换机都具有较大的缓存空间。
当使用分组交换的时候,构成原始报文的一个个分组。在各结点交换机上进行存储转发。比较于报文交换,减少了转发时延,还可以避免过长的报文长时间占用链路。同时也有利于进行差错控制。
三种交换方式的优缺点:
互连:是指计算机之间可以通过有线或无线的方式进行数据通信。
自治:是指独立的计算机,它有自己的硬件和软件,可以单独运行使用。
集合:是指至少需要两台计算机。
计算机网络的较好的定义是:计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。
计算机网络所连接的硬件,并不限于一般的计算机,而是包括了智能手机等智能硬件。
计算机网络并非专门用来传送数据,而是能够支持很多种的应用(包括今后可能出现的各种应用)。
各个时延的计算方式:
我们通过两个栗子来看那个时延占据主导地位:
时延带宽积 = 传播时延 * 带宽
我们可以把传输链路看成是个管道,其长度是传播时延,横截面积是带宽,那么时延带宽积就是管道的体积,可以想象成管道里面充满了比特。
若发送端连续发送数据,则在所发送的第一个比特即将到达终点时, 发送端就已经发送了时延带宽积个比特。
链路的时延带宽积又称为以比特为单位的链路长度。
在许多情况下,因特网上的信息不仅仅单方向传输,而是双向交互。我们有时很需要知道双向交互一次所需的时间。因此,往返时间RTT(Round-Trip Time)也是一个重要的性能指标。
我们看下面的这个示意图:以太网上的一个主机想向无线局域网中的主机进行信息交互。RTT是指,从源主机发送分组开始,直到源主机收到来自目的主机的确认分组为止,所需要消耗的时间。
在卫星链路上所消耗的时间比较多,由于卫星链路较远,所带来的传播时延也就会比较大。
也不能使信道利用率太低,这会使宝贵的通信资源被白白浪费。应该使用一些机制,可以根据情况动态调整输入到网络中的通信量,使网络利用率保持在一个合理的范围内。
1.丢包率即分组丢失率,是指在一定的时间范围内,传输过程中丢失的分组数量与总分组数量的比率。
2.丢包率具体可分为接口丢包率、结点丢包率、链路丢包率、路径丢包率、网络丢包率等。
3.丢包率是网络运维人员非常关心的一个网络性能指标,但对于普通用户来说往往并不关心这个指标,因为他们通常意识不到网络丢包(就比如你的网课老师,他的网很卡,但是他并不是很在意,因为你看他放的视频的时候,他可能在睡觉,有可能你会听到他美妙的呼噜声(bushi))。
分组丢失主要有两种情况:
丢包率显示了网络拥塞情况:
- 无拥塞时路径丢包率为0
- 轻度拥塞时路径丢包率为1%~4%
- 严重拥塞时路径丢包率为5%~15%
IP协议可以将不同的网络接口进行互连,并向其上的TCP协议和UDP协议提供网络互连服务,而TCP协议在享受IP协议提供的网络互连服务的基础上,可向应用层的相应协议提供可靠传输的服务。
UDP协议在享受IP协议提供的网络互连服务的基础上,可向应用层的相应协议提供不可靠传输的服务。
IP协议作为TCP/IP体系结构中的核心协议,一方面负责互连不同的网络接口(IP over everything),另一方面,为各种网络应用提供服务(Everthing over IP)。
在TCP/IP协议体系中包含有大量的协议,IP协议和TCP协议是相当重要的两个协议。
由于TCP/IP体系结构为了将不同的网络接口进行互连。因此它的网络接口层并没有规定什么具体的内容。
计算机网络是个非常复杂的系统。早在最初的ARPANET设计时就提出了分层的设计理念。
“分层”可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。
我们举一个栗子:
主机A,B,C,D通过总线互连,构成了一个总线型网络。假设我们已经解决了物理层的问题,也就是说主机间可以发送信导来传输比特0或1了,我们看一下它会面临什么样子的问题:
上图中,主机A要给主机C发送数据,但是,表示数据的信号会通过总线传播到总线上的每一个主机。那么此时主机C如何知道该数据是发给自己的,自己需要接受呢?同理主机B,C,D又是如何知道数据不是传给自己的,自己需要拒绝呢?
如果需要回答上面的问题,我们就需要知道如何标识网络中的各主机(主机编址问题,例如MAC地址)。当主机发送信息时,应当给数据附加上目的地址,当其他主机接收到后,根据目的地址和自身地址,来判断自己是否需要接受。
在上面答案的基础之上,我们又会面对一个新的问题,那就是:目的主机如何从信号所表示的一连串比特流中区分出地址和数据。也就是需要解决分组的封装格式问题。同时,还会出现某个时刻总线是空闲的,也就是没有主机使用总线来发送数据,如果此时下图的B和D同时发送数据,就会造成碰撞,所以如何协调各主机争用总线?
我们需要注意的是,上面的这种总线型网络已经被淘汰,现在常用的是使用以太网交换机将多台主机互连形成的交换式以太网。在以太网交换机中,我们只需要解决数据链路层的问题就可以了,关于数据链路层,笔者在之后的博客中详细展开,此处只是概述。
我们再举一个例子:如下图所示,这是由4个网络和3个路由器构成的小型互联网,我们可以看作为因特网中很小的一部分,所以我们就面临了我们如何标识各网络以及网络中的各主机(网络和主机共同编址的问题,例如IP地址),还有各个主机之间的通信线路往往不止一条,于是乎,又会涉及到了路由器如何转发分组,以及路由器如何选择的问题。 上述的问题,笔者在之后的网络层会进行详细解释,此处只是概述。
我们在看一个栗子:如下图所示,当我们主机上有不同的进程时,比如QQ和浏览器,当我们主机接收到了信息后,是交给那个进程处理呢?所以就涉及了如何解决进程之间基于网络的通信问题。以及传输线路上出现了问题,又应该如何解决呢? 上述的问题,笔者在之后的运输层会进行详细解释,此处只是概述。
我们再看一个栗子,如下图所示,关于各个进程应用之间的协议,我们又该如何处理呢?这就涉及了如何通过应用进程间的交互来完成特定的网络应用。上述的问题,笔者在之后的应用层会进行详细解释,此处只是概述。
首先是应用层按照http协议规定,构建一个http请求报文,然后交给运输层去处理。
当运输层得到了报文之后,给报文添加一个TCP首部,该首部的作用主要是用来区分应用进程,以及实现可靠传输。然后运输层将TCP报文段交给网络层处理。
然后网络层给TCP报文段增加一个IP首部,称为IP数据报,该首部的作用,是方便IP数据报在网络上传输,也就是被路由器的转发。然后将IP数据报交付给数据链路层。
数据链路层给IP数据报增添一个首部,一个尾部,使之成为帧。首部的作用是为了让帧能在一段链路上进行传输,能够被相应的主机接受。尾部的作用是为了让目的主机检查所接受到的帧是否有误码。然后数据链路层将帧交给物理层。
物理层接收到帧以后,将帧看作为比特流,并在比特流前面增加前导码,为了让目的主机做好接受帧的准备。然后物理层将处理好的比特流转换为传输信号发送到传输媒体,紧接着到达路由器。
路由器的物理层将信号变换为比特流,然后去掉前导码,交给数据链路层,也就是交付的帧。
数据链路层将帧的首部和尾部去掉后,交付给网络层,也就是交付的IP数据报。
网络层解析IP首部,得到目的地址,然后查找自身路由表,确定转发端口。
然后下面的过程和上面的处理方式一样,我们直接上图片演示(不会做gif~~~OAO)
然后web服务器端形成http响应报文,然后层层封装,通过物理层变换为相应的信号,传输到路由器,路由器将响应报文给主机,主机通过逐层解析,得到http响应报文。
三大类:实体、协议、服务