第二章 应用层(Application Layer)
首先在这里再次声明一下,本系列博客内容参考北京交通大学软件学院计算机网络课程的教学资料,参考教材为英文教材:《Computer Networking- A Top-Down Approach》。编者英文水平有限,如有部分翻译不准确的地方,还请大家帮忙指正。本系列博客仅供计算机爱好者学习交流使用,未经允许禁止任何形式二改二传及任何个人或商业用途。
本章将介绍应用层的内容,应用层主要是为了提供网络功能的一个层,网络应用是计算机网络存在的理由。本章中,我们会从定义关键的应用层概念开始,然后涉及开发运行在TCP,UDP上的网络应用程序。
2.1 应用层协议原理(Principles of network application)
2.1.1 网络应用程序体系结构(Application architectures)
应用程序体系结构由应用程序研发者设计,规定了如何在各种端系统上组织应用该程序。在选择应用程序体系结构一般会从以下几种体系结构中选择:
- 客户-服务器体系结构(Client-Server)
- 对等体系结构(Peer-to-peer,俗称P2P)
- 混合体系结构(Hybrid of Client-Server and P2P)
客户-服务器体系结构
在此体系结构中有以下几个不可或缺的元素:
元素 | 功能 | 注意 |
---|---|---|
一个总是打开的服务器 | 服务于来自许多其他称为客户的主机的请求 | 客户之间不直接通信 |
具有固定的,周知的地址(固定的IP地址) | 客户通过该地址发送分组(packet)与其联系 |
服务器:
一定是总是开着的(always on),并且有固定的IP地址(permanent IP address)
客户端:
与服务器通信,不一定总是开着的,可能会是一个动态IP,并且客户端与客户端之间并不直接通信
那么可想而知,这样的体系结构,如果客户多了,很有可能出现一台单独的服务器主机跟不上它所有的客户请求的情况,为此,配备大量主机的数据中心(DATA CENTER) 常被用于创建强大的虚拟服务器。
P2P体系结构
在这个体系结构中,应用程序在间断连接的主机之间使用直接通信,这些主机被称为对等方 。这个体系结构由于不需要服务器,所以并没有一个一直是开着的服务器,终端系统直接相互连接传输数据,并且间歇的出现IP地址更换。
P2P的优点就是它们的自扩展性(self-scalability) ,当一个新的人加入网络时,不会影响其他用户。但是它也有不足之处,就是不利于管理并且连接并不可靠。比如出现下载东西下载了一半,作为种子的那台机器下线了,那么你的下载自然就中断了
混合体系结构
就是P2P和C-S体系结构混用,比如QQ,Skype这类通信软件,人与人之间的网络视频,或者语音电话,都是建立的P2P连接,而类似于QQ群,它就是一个C-S的模型。
2.1.2 进程通信
在构建网络应用程序之前,需要对运行在多个端系统上的程序是如何互相通信的情况有一个基本的了解。进行通信的实际上是进程(process) 而不是程序。在两个不同的端系统上的进程,跨越计算机网络交换报文(message) 而相互通信。
客户和服务器进程
我们通常将两个通信的进程之一称为客户(client),另一个称为服务器(server) 。
客户 | 服务器 | |
---|---|---|
Web | 浏览器 | Web服务器 |
P2P | 下载文件的 | 上传文件的 |
进程与计算机网络之间的接口
进程通过套接字(socket) 接口向网络发送报文和从网络接收报文
为了方便理解,我们还是使用熟悉的寄信的例子来举例
将进程比作为一套房子,而他的套接字可以类比于它的门。发送报文时就像是把报文推出了门(也就是套接字)给到另一个邮政基础设施(比如邮箱)中,通过一通操作,另外一方接收到了,再从门外拿进来邮件。
由于套接字是建立网络应用程序的可编程接口,因此套接字称为应用程序和网络之间的应用程序编程接口(Application Programming Interface, API)
通过API,应用程序开发者对于运输层的控制仅限于
- 选择运输层协议
- 设定部分运输层参数
进程寻址
为了向特定目的主机发送报文,接收进程需要有一个地址。为了标识该接收进程,需要定义两种信息:①主机的地址;②在目的主机中指定接收进程的标识符
在因特网中,主机由其IP地址 标识,除了知道报文发送目的地的主机地址外,发送进程还必须指定运行在接收主机上的接收套接字。目的地端口号(port number) 用于这个目的。已经给流行的一些协议分配了特定的端口号,比如web是80,邮件服务为25
2.1.3 可供应用程序使用的运输服务(Application layer protocols)
开发一个应用时,必须选择一个可用的运输层协议。通过研究这些可用的运输层协议所提供的服务,选择一个最能为你的应用需求提供恰当服务的协议。就类似于,我们从一个城市到另外一个城市,是选择坐火车还是飞机。当然各有各的好处。或者类比于寄邮件,可以选择寄顺丰,也可以选择寄京东。
一个运输层协议能够为调用它的应用程序提供什么样的服务呢?从以下四个方面来分析:
- 可靠数据传输
- 吞吐量
- 定时
- 安全性
可靠数据传输
由于数据在传输过程中可能会出现丢失现象,所以,如果一个协议提供了一个可以完全确保数据交付服务,就认为提供了可靠数据传输(reliable data transfer) 。
当然有些数据丢失可能被某些应用程序所容忍,即就是容忍丢失的应用(loss-tolerant application), 它们可能会选择另外一些服务
吞吐量
带宽敏感的应用(bandwidth-sensitive application) 具有吞吐量的要求
弹性应用(elastic application) 能够利用当时可用的带宽资源
定时
顾名思义,有些服务可以在一定时间内完成传输,有些可能会随着网络情况而变化
安全性
运输协议能给应用程序提供一种或多种安全性服务
下图是一些常用软件对以上四种属性的要求:
2.1.4 因特网提供的运输服务(Internet transport protocols services)
因特网为应用程序提供两个运输层协议,TCP和UDP。在创建应用时,首先要决定是选择TCP还是选择UDP。
TCP服务
TCP服务模型包括面向连接的服务和可靠数据传输服务
- 面向连接的服务:必须在报文开始流动之前就建立TCP连接
- 可靠的数据传送服务
- 流量控制:当接收端无法接收更多数据时,发送端不会再进行发送
- 拥塞控制:当网络拥堵时,将会限制发送端进行发送
TCP不提供:定时、保证最小吞吐量、安全等服务
UDP服务
UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务
不需要一定建立连接
UDP不提供:连接设置,可靠性,流量控制,拥塞控制,定时,吞吐量保证,安全等服务
那么为什么UDP不提供这么多的东西,还有人用呢?
A:因为速率快
下图为部分应用使用的传输层服务:
2.2 Web和HTTP
Web页面包含许多对象,包括HTML文件,JPEG文件,JAVA文件等等
Web页面包含基于HTML-FILE的文件
每一个对象都会被一个URL地址所标识
比如下图这个URL,前半段是主机的域名(对应主机的IP地址),后面是位于主机上的文件的路径
2.2.1 HTTP概况
Web的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP) 。
持续更新中