应用层
应用层
应用层体系结构目前有两种
- 客户-服务器体系
在客户-服务器体系里面,一直打开的主机被称为服务器,请求服务的主机为客户。在这个体系里面只能由客户向发起请求。但在这个体系里面两个客户之间不能直接通信。
- P2P体系
在P2P体系里面,所有的主机都可以相互发起请求,并且两个主机之间是直接通信的,不需要经过服务器
在现在的网络体系中,应用层这两种体系一般是混合使用。
进程通信
在应用层实现通信不是两个主机上的应用程序,而是一个
进程
,进程
是在主机上运行的程序,实现通信的是两个主机上的进程,同时主机上运行着多个进程。两个主机上的进程互相交换报文的过程就是网络通信。
不管是客户-服务器体系还是P2P体系,在两个进程进行通信的过程中总会存在一个客户端和一个服务器端。客户端就是发起通信请求的主机,服务器等待请求的主机。在客户-服务器体系中客户一直都是客户端,而服务器一直是服务器端。但在P2P体系中,因为每个主机相互之间都可以发起通信,因此主机既可以是客户端也可以是服务器端。
在进程之间进行通信时,因为进程只存在与应用层,当报文从应用层传输到网络的其他层时就需要一个接口。这个接口就是套接字(socket)。网络应用程序将报文传输给套接字接口,套接字接口在将报文传输给网络,当报文传输到另一个主机的进程时,就需要套接字接口把报文从网络传输给网络应用程序。
通过使用套接字接口,网络应用程序就只需要关注报文在应用层的活动,而不需要关注它在网络中是如何传输的,这些都是运输层所要完成的工作,这样网络应用程序就不会干预到运输层,实现应用层和运输层的隔离。
虽然网络应用程序不会干预到运输层,但通过选择不同的套接字接口,网络应用程序可以选择采用何种协议以及完成怎样的传输要求。
下图就是进程如何使用套接字接口的
进程在传输的报文中要包含两个信息,才能保证报文能被传输到正确的进程
- 目的主机的IP地址
- 目的主机目的进程的标识符
使用的套接字接口需要包含的服务
- 可靠的数据传输
可靠的数据传输服务是保证传输的报文能够被目的进程接收到,不可靠的数据传输就不能保证目的进程能够接收到传输的报文。对于web服务和文件传输这种应用需求,他就要求能够实现可靠的数据传输。对于视频通信就对数据的可靠传输具有一定的容忍性,它允许丢失一部分数据而不影响服务
- 吞吐量
吞吐量是运输层协议是否能够保证一个最低的传输速率,保证使用的服务的传输速率有传输速率要求,对于文件上传这类服务,对吞吐量就没有要求。
- 定时服务
定时要求就是报文的端到端时延要低于一定的时间,这种要求一般存在于对于实时性有要求服务
- 安全性
安全性就是要求报文在传输时能够进行加密,保证报文被他人获取后不能被直接使用
对于目前的运输层协议,主要有两种
- TCP
TCP协议主要有两个特点
- 面向连接的服务
TCP协议在传输报文之前会进行握手操作,建立两个进程之间的TCP连接。这条连接时一个全双工的连接,在连接被拆除之前,双方都可以进行报文传输。当报文传输完之后,连接必须被拆除。
- 提供可靠传输的服务
这个特点表明,TCP能保证可靠的数据传输。
但TCP协议是没有进行加密,即报文通过套接字接口后,它的报文信息是没有改变的。针对这一点,后面提出了基于加密的TCP连接,即SSH。即报文到达SSH接口后,接口对报文进行加密。然后把加密后的报文传输给TCP接口,在传输到运输层。
同时TCP还具有拥塞控制机制,发送和接收主机之间的网络出现拥塞时,TCP会抑制发送进程。这种机制对进程之间的通信没有好处,但对整个网络会有好处。
- UDP
UDP协议不提供可靠的数据传输服务,同时也没用拥塞控制机制,当UDP接收到流量后,他就会向网络进行传输。
从上述描述来开TCP和UDP只关注安全性和可靠的数据传输这两部分的服务。而没有提供吞吐量和定时这两项服务。但是现在的网络应用在设计时就考虑这两方面的需求,从而保证应用尽可能的不受到这两个因素的影响。
应用层协议虽然不关注报文是如何传输的,但它会规定报文的格式,报文的每个字段的含义,报文之间的语法以及报文发送的时间和发送方式。
应用层协议只是网络应用的一部分,而不是网络应用的全部。网络应用包括网络应用程序(客户),服务器以及应用层协议。