介绍
应用层包含了能进行人机交互并且产生网络流量的程序
经典的基于文本的几种应用:电子邮件、计算机远程访问、文件传输、新闻组、文本聊天等,后来又出现了万维网(包含web冲浪、搜索、电商),即时通讯等
应用层的程序是数之不尽的,对应用层的学习主要集中于原理和实现
协议原理
研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。如web应用程序、p2p文件共享系统等。
应用程序体系
在编写应用程序之前需要有一个宽泛的体系结构计划。应用程序体系不同于网络结构体系(五层、七层模型等)那么固定,应用程序体系由程序研发者设计。目前有两种主流体系结构:
- 客户机/服务器体系结构
- 将多个计算机分为客户机和服务器两种
- 服务器接收来自客户机的请求并处理
- 客户机之间一般不相互通信
- 将多个计算机分为客户机和服务器两种
- 对等(P2P)体系结构
- 任意两台计算机彼此依赖,直接相互通信,不需要通过专门的服务器。
- 任意间断连接的主机对——称为对等方
进程通信
在操作系统的术语中,进行通信的实际上是进程( process)而不是程序。进程可以被认为是运行在端系统中的程序。当进程运行在相同的端系统上的时候,它们使用进程间通信机制相互通信。进程间通信的规则由端系统上的操作系统确定。
不同端系统,进程间的通信通过跨越计算机网络交换报文而进行。发送进程创建报文并向网络中发送,接收进程接收这些报文并可能负责回送报文。
套接字
一个进程向另一个进程发送报文必须通过网络。进程通过一个称为“套接字”的软件接口向网络发送报文和从网络接收报文。
- 进程可类比于一座房子,而它的套接字可以类比于它的门。当一个进程想向位于另外一台主机上的另一个进程发送报文时,它把报文推出该门(套接字)该发送进程假定该门到另外一侧之间有运输的基础设施 , 该设施将把报文传送到目的进程的门口。一旦该报文抵达目的主机,它通过接收进程的门(套接字)传递,然后接收进程对该报文进行处理
套接字是同一台主机内应用层与运输层之间的接口
进程寻址
在一台主机上运行的进程为了向在另一台主机上运行的进程发送分组,接收进程需要有一个地址。
为了标识目的接收进程,需要定义两种信息:
- 主机的地址
- 网络中,主机地址由IP地址标识
- 定义在目的主机中的接收进程的标识符
- 也就是接收进程在目的主机中的端口号。
可供应用程序使用的运输服务
应用程序将报文推进套接字(Soceket)后,套接字另一侧,运输层协议负责将此报文传输到目的主机接收进程的套接字。
开发应用程序必须选择一种可用的运输层协议,它能提供服务:
- 可靠数据传输
- 当数据在传输中丢失能得到处理,确保了数据一定能交付
- 吞吐量
- 沿着一条网络路径上的两个进程之间的通信会话场景中,可用吞吐量就是发送进程能够向接收进程交付比特的速率
- 运输层协议能够以某种特定的速率提供确保的可用吞吐量
- 定时
- 保证数据交付有严格的时间限制
- 安全性
- 可以加密传输的数据,防止数据泄露
因特网提供的运输服务
因特网(准确说是TCP/IP网络)为应用程序提供两个运输层协议,即UDP和TCP
TCP服务
TCP服务模型包括面向连接服务和可靠数据传输服务。当某个应用程序调用TCP作为其运输协议时,该应用程序就能获得来自TCP的这两种服务。
- 面向连接服务:在数据传输之前,两个主机进行三次握手过程从而建立连接
- 这条连接是全双工的,双方可以同时进行报文收发。
- 当应用程序结束报文发送时,必须拆除该连接
- 可靠的数据传送服务:通信进程可以依靠TCP,无差错,按适当顺序交付所有发送的数据,
- TCP进行了额外的一些操作如差错重传,保证了所传输数据的完整,可靠性。
注意:TCP协议还拥有拥塞控制机制,并且无论是TCP或者UDP都没有提供任何加密机制。
- 因此出现了TCP的加强版:安全套接字层SSL,用SSL加强后的TCP不仅能做到之前的一切,还提供了关键的进程到进程的安全性服务,如加密,数据完整性,端点鉴别。
UDP服务
UDP是一种不提供非必要服务的轻量级运输协议,仅提供最小服务,是无连接的。
- 两个进程通信前没有握手过程
- 提供的是不可靠数据传送服务
- 没有拥塞控制机制。
常见因特网应用及其应用程序协议和支撑的运输协议
应用 | 应用层协议 | 支撑的运输协议 |
---|---|---|
电子邮件 | SMTP | TCP |
远程终端访问 | Telnet | TCP |
Web | Http | TCP |
文件传输 | FTP | TCP |
流式多媒体 | HTTP | TCP |
因特网电话 | SIP | TCP或UDP |
应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文,定义了:
- 交换的报文类型,例如请求报文和响应报文
- 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的
- 字段的语义,即这些字段中包含的信息的含义
- 一个进程何时以及如何发送报文,对报文进行相应的规则
应用层协议只是网络应用的一个部分,并不是整个应用
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/22/computerscience/2020-03-22-applicationLayerProtocolPrinciple/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!