互联网层次
- 应用层:在传输层的基础上,实现不同应用
- 传输层:在网络层的基础上,提供通信安全的一系列协议服务
- 网络层:扩展了链路层的服务,邻居之间的通信泰国局限了,网络层实现了端对端、进程对进程的服务,即目标主机和源主机之间的通信,但通信之间是不安全的,只能说尽力而为
- 链路层:使用物理层的服务,实现点到点,两个平行节点之间的通信,比如说邻居之间的通信
- 物理层:实现数据流传输
Internet
什么是网络、计算机网络、互联网
网络是由节点和边组成的,节点代表各种物质,边代表就是关系,比如人与人之间的朋友关系,神经元之间的神经元关系
计算机网络是由联网的计算机构成的系统,也是由节点、链路与协议组成,只不过节点是一系列联网的东西,主机节点(手机、电脑)、数据交换节点(中继器、交换机、路由器、负载均衡的高层设备,数据交换节点相当于一个中转节点,既不是源节点又不是目标节点,作用就是转发),链路也有区分,主机与交换机之间称为接入链路,交换机与交换机之间称为骨干链路,不同设备之间使用相同的协议才可以实现通信,也就是对等层的实体之间必须都遵守的规范,比如传输层之间、应用层之间,让不同厂家的软件设备可以进行通信
互联网是以TCP和IP协议簇为主支撑工作的计算机网络群通过网络互联设备形成的巨型网络,本质上是基础设施(应用层下面提供端口通信的协议)和分布式应用(应用层的端口服务)一般采用两种连接服务
互联网整体的架构分为3部分
- 网络边缘:目标主机和源主机的应用
- 网络核心:网络系统之间的交换机形成交换核心,作用就是数据交换
- 接入系统:网络边缘使用接入系统来接入网络核心
什么是协议
前面已经提到过,协议是对等层实体之间的规范,比如报文格式、报文语义、报文含义、次序(收到请求后才发送报文,接收到什么动作才做什么响应)
网络的边缘
网络的边缘就是主机与源主机,用于联网的设备,其中里面有网络应用,网络应用就是网络存在的理由,当然也存在基础设施,用于为分布式应用提供通信服务
通信模式
- C/S模式:Client/Server,客户端与服务器,客户端发请求给服务器,服务器处理请求并响应给客户端,典型的主从模式,主为服务器,从为客户端,所有的资源都在服务器,客户端只有请求服务器才能获取资源
- 缺点是可扩展性比较差,客户端增多是由客户那边流量决定的,随着客户端越来越多,服务器会顶不住压力响应客户端越来越慢,当然可以通过增加服务器来解决问题,但增加服务器往往都是被动的,扛不住压力才意识到要增加服务器
- P2P模式:peer-peer模式,对等体模式,节点既是客户端同时也是服务器,比如客户端在获取了资源之后,可以将这些资源进行共享给其他客户端,相当于自己就是一个服务器,比如迅雷,自己去下载了一些资源之后,同时也可能自己本地的资源被其他客户端进行下载,这样就很好地解决了C\S模式的问题,不用主动地去管服务器的数量,随着客户端的增加、服务器的数量也会增加
通信服务
通信服务常用有两种方式
- 面向连接:两边应用进程做好准备才进行通信,比如缓冲区、超时策略,但这里仅仅只是源主机与目标主机做好准备,可靠,保证信息完整
- 无连接:不管对方是否做好了准备,不可靠,只保证报文符合规范即可
不可靠数据传输
UDP协议提供的服务就是不可靠性,不能保证接收的信息是否完整、顺序是否正确,但不需要付出时间代价来保证可靠
可靠数据传输
TCP协议提供的服务就是可靠性,保证了接收的信息是完整且正确的,但缺点是需要付出时间代价来保证可靠
流量控制和拥塞控制
流量控制是用来处理发送方速度太快,超过了接收方的处理能力,导致信息丢失,或者发送方太慢,而接收方处理快,导致效率慢的问题,总的来说就是控制**发送方速度的,接收方处理能力好,就提高发送方速度,提高效率;接收方处理能力弱,就降低发送方速度;****
而拥塞控制是会考虑经过网络核心的路径是否堵塞、拥塞,从而控制发送方的速度,虽然接收方接收能力好,但传输的路径堵塞了,此时就i要降低发送方的速度
网络的核心
网络的核心就是交换机之间形成的链路
电路交换
这种方式是预留端-端资源的
在通信之前,目标主机与源主机需要进行建立固定的连接线路,然后对于这个连接线路就会固定使用,但也会产生一个很明显的问题,就是固定使用了这条线路,会产生一个效率低下的问题,无论目标主机与源主机之间是否通信,都一直会占用这条链路
为了解决链路的低效使用的问题,电路交换又提出了两个概念
FDM(频分)
根据链路的带宽来进行划分,比如将链路分为4部分,这样就可以让4个人去使用了
TDM(时分)
根据时间去对链路进行划分,比如将一天分时间分为24个时间槽,那这条链路就供24个人使用,每个人有一个时间槽的带宽
但电路交换并不适合计算机之间的通信
- 连接建立的时间长
- 线路独享,保证了通信的性能,但计算机之间的通信有突发性,并不会一直通信,会浪费性能
分组交换
源主机与目标主机之间不再限制带宽的使用,也就是不做电路交换的什么时分、频分、波分,而是使用全部链路的全部带宽,而且之间的通信被分成一个个单位,分成一个个包(package),这就叫做分组,每个包的传输都用全部带宽,并且经过每一个交换机都要做存储与转发!!!
这种方式就称为分组交换,总共有三个特点
- 不再对链路的带宽进行拆分,来供多人使用,而是传输过程中会使用整一条链路,共享链路
- 传输的文件会进行划分,划分成一个个包
- 传输的文件每经过一个交换机,交换机自身都会进行存储(完全存下来)与转发(通过另一条链路给另一个交换机)
这样做的好处就可以减少网络资源的调用,你有数据的时候才进行转发,没有数据的时候就不占用资源进行转发,但缺点也很明显,交换机需要耗费额外的时间去存储接收到的包,也就是会产生排队问题(缓存完一个包才能去接收另一个包,就会产生一个排队延迟,甚至会产生丢包的问题),利用存储的延时换取链路的高效使用
但分组交换本质上还是一个对链路划分片的思想,只不过不是固定的划分
排队延迟和丢失
关键功能
关键功能有两个
- 路由:路由其实就是分组如何从源到达目标的路径,相当于就是导航,决定了分组怎么走
- 转发:分组从路由器的输入链路转移到输出链路
存储转发方式
- 数据报网络:分组记录着交换机的真实地址,使用真实地址进行存储转发,但是无连接的,不会保证源与目标主机的通信,有数据就进行传输,每传到一个交换机就匹配路由表去选择线路,所以源、目标地址一样的分组,不一定会走相同的路径
- 虚电路网络:分组记录着交换机的虚电路号,使用虚电路后来进行存储转发,但是面向连接的,保证源与目标主机的通信,要维护通信状态
互联网网络结构
- 端系统通过接入ISP来进入到互联网(Internet Service Provider)
- 接入ISP的端,相应的必须是互联的
- 为了减少端与端之间的连接,使用global ISP来接入端,这就减少了端之间互联的
分组丢失、延时和吞吐量
分组延时
前面提到过,现在互联网通信采用的是分组交换,每个路由器都要做缓存、转发这两个动作
路由器会使用一个队列去接收链路发送来的分组,当分组到达链路的速率大于路由器接收链路输出分组速率,就需要进行排队,就会产生一个排队延时
当然还会有其他延时,比如路由器对分组进行纠错、检错、传输都会产生一个分组延时
有4种延时
- 处理延时:路由器处理分组
- 排队延时:分组在排队被路由器接收
- 传输延时:传输距离太远,分组全部发送了,但都还没传输到路由器
- 传播延时:与传输延时类似,只不过是核心路由器之间的传播
ICMP协议
ICMP协议为互联网控制包协议,用来通知可能存在的路由错误的
IP的报文分为两个部分
- IP头:目标地址、TTL(生存时间)
- IP体:信息载体
当TTL减为0的时候,路由器就会将该分组抛弃掉,并会发送一个ICMP报文给源目标地址,告知目标源地址,可能出现路由错误,分组已经被抛弃掉了
分组丢失
- 当路由器的链路队列是有限的
- 当路由器的链路队列满了之后,就会丢弃分组
- 分组丢失了之后,就要看链路的情况了,是可靠服务还是不可靠服务
- 如果是可靠服务,那就由前一个路由器负责重传
- 如果是不可靠服务,丢弃就丢弃了,那么前一个路由器不会进行重传,可能会由上上层进行重传,也可能不会进行重传
吞吐量
吞吐量是指源端和目标端之间传输的速率
协议层次以及服务模型
计算机网络通过分层来解决通信问题,对等层之间才可以进行通信
举个栗子
就好像不同语言的人进行交流一样,交流的过程中需要进行翻译,这样就可以设置出两层架构,底层为翻译层,上层为交流层,交流层调用翻译层的服务将言语传递给对方的交流层,而对方的交流层也是通过翻译成的服务解析接收来的言语,而本质上看,这其实只是对等层之间的通信,翻译层之间通信,交流层之间通信(调用翻译层去解析、获取、交换信息,对等层之间使用规定好的协议来进行通信)
而解析、传输信息之间的问题主要交由协议进行解决
使用层次化的好处就是
- 提高解决效率问题,每一层都只需专注自己的问题即可
- 可以基于下面底层的功能来向上扩展新的功能
- 但由于分层了之后,效率会比较低,考虑层间通信成本
在对等层之间的连接方式为面向连接和无连接服务
- 面向连接就是在两个对等层之间进行通信前要建立连接,需要做好准备,比如TCP的握手
- 无连接就是在两个对等层之间进行通信前不需要建立连接,不需要做好准备
服务与协议的关系
服务是指上层调用下层提供的服务,在整体架构上是一个垂直关系,而协议是对等层之间的关系,在整体架构上是一个水平关系,也就是对等层之间的通信
之间的关系为:协议要通过下层的服务才能实现(接收对等层传来的信息),而协议的实现就变成了了该层给上层调用的服务
协议栈
整体架构
- 应用层:完成应用报文之间的交互,比如QQ邮箱应用接收来自对方QQ邮箱的报文,来解析响应(同时在这层的协议是最多的)
- 传输层:端对端之间进行连接还不够,需要进行主机的进程之间的连接,也就是端口,即在端对端的连接上,扩展端的进程之间的连接,同时将网络层不可靠的服务变成可靠服务
- 网络层:相邻两节点不够,需要进行端对端的连接,也就是源、目标主机进行连接,并且以分组为单位进行连接(基于链路层的点对点的连接基础上),其实是起到路由的作用,为数据报从源到目的地址选择路径
- 链路层:传输以帧为单位之间的数据,接收方的链路层会将物理层的数据变为帧(在物理层提供的基础上),而且是在相邻两节点之间,比如自己与邻居进行连接
- 物理层:把数据转化为物理信号,承载在媒体上,对方的物理层就将物理信号转化为数据
ISO/OSI参考模型
这个参考模型其实就是在互联网协议栈的基础上多了两层
这两层其实在互联网协议栈上是交由应用层去做了
总结
其实从发送一个请求开始,本质上就是经过五层架构的
举个栗子
比如一个HTTP请求,先经过应用层使用HTTP协议的服务,然后调用传输层的服务,而传输层的服务又调用网络层,一直到物理层,而经过每一层其实就是将数据加一层协议封装,最后发送到接收方,接收方就会进行解封装,从底向上进行解封装,物理层解开自己的协议,链路层解开自己协议
下面总结一下各层次的协议数据单元,也就是传输的数据
- 应用层:报文,message,比如HTTP报文
- 传输层:报文段,segement,比如TCP端、UDP端
- 网络层:分组,package
- 数据链路层:帧,frame
- 物理层:比特,bit
|