计算机网络原理 - 应用层
应用层
应用层是主机上进程之间的交互,不同的进程内可以有多个线程,多线程处理数据
2.1 应用层协议原理
研发网络应用的核心是写出能够运行在不同端系统和通过网络彼此通信的程序;
值得注意的是,我们不需要写在网络核心设备如路由器或者链路层交换机上运行的软件。这种设计方式即将应用程序限制在端系统的方法,促进了大量网络应用程序的迅速研发和部署
2.2.1 网络应用程序体系结构
应用程序的体系结构不同于网络的体系结构。从应用程序开发者的角度来看,网络体系结构是固定的,并为应用程序提供特定的服务集合;
换言之,应用程序体系结构使用应用程序开发设计的,它规定了在端系统上如何组织应用程序。两种常见的现代网络应用程序所采用的体系结构为:客户-服务器体系、结果和对等体系结构
-
客户-服务器体系结构
在该体系结构中,有一个总是打开的主机,即服务器,它接收和服务来自其他许多被称为客户的主机请求;
值得注意的是,在该体系结构中,客户之间是不直接通信的;该服务器具有固定的、周知的地址
客户-服务器体系结构的著名应用有:Web、FTP、Telnet和电子邮件。
通常,如果仅有一台服务器处理所有的请求,那么服务器系统将很快变得不堪重负,为此,配备大量主机的数据中心常被用于创建强大的虚拟的服务器,一个数据中心可以有数十万台服务器,它们需要供电和维护,同时服务提供商还需要支付不断出现的互联和带宽费用,以及发送和接收到达/来自数据中心的数据;
-
P2P体系结构(Peer)
在P2P体系结构中,对位于数据中心的专用服务器有着最小(或者没有)依赖。应用程序在间断连接的主机对之间使用直接通信,这些主机被称为对等方。
对等方并不为服务提供商所拥有,因为这种对等方通信不需要通过专门的服务器,所以该体系结构也被称为对等方到对等方结构
目前,流量密集型应用都是P2P体系结构的。这些应用包括文件共享(例如BitTorrent)、协助下载(例如迅雷)、因特网电话(例如Skype)和IPTV(例如迅雷看看)
值得注意的是,某些应用具有混合的体系结构,它们结合了客户-服务器和P2P这两种体系结果,比如许多的即时通讯工具,服务器用来跟踪用户IP地址,但是用户之间的通信则使用直接发送
P2P体系结构最引人入胜的特性之一就是它们的自扩展性。比如在文件共享应用中,对等方可能通过向文件的原始拥有者发出请求而产生工作量,但是对等方也有可能通过为其他对等方传送文件而为原始拥有者分担压力;P2P体系结构也是成本有效的,因为他通常不需要庞大的服务器基础设施和服务带宽。
但是P2P也面临着以下三个问题
-
ISP友好。大多数住宅ISP受制于非对称带宽应用,也就是下载比上传要多得多。但是P2P视频和文件分发应用改变了从服务器到住宅ISP的上载流量,因而给ISP带来压力;
-
安全性。因为其高度的分布和开放式,P2P应用也可能给安全带来挑战;
-
激励。如何说服用户资源向应用提供带宽、存储和计算资源?这是一个问题,使用和提供资源
-
2.1.2 进程通信
**在操作系统中,实际进行通信的是进程而不是应用程序;**当进程运行在同一个端系统上时,它们使用进程间通信机制相互通信;而进程间通信的规则是由端系统上的操作系统确定的。当进程运行在不同的端系统上时,它们通过跨越计算机网络的报文相互通信;发送进程产生报文并且向网络中发送,接收进程接收报文并对此作出响应(不响应也是一种响应)。
-
客户进程和服务器进程
对于每对通信进程,我们通常将这两个进程之一标识为客户,而另一个进程标识为服务器。
需要注意的是,在某些P2P应用中,一个进程可能既是客户也是服务器,因为在一个文件共享应用中,一个进程的确既能请求文件也能发送文件。所以从进程所扮演的角色来区分是客户进程还是服务器进程不够精确,所以我们从发起通信的顺序来定义它们:在给定的一对进城之间,首先发起通信的进程被标记为客户进程,在会话开始时等待联系的进程被称为服务器进程。
-
进程与计算机网络之间的接口
多数应用程序是由通信进程对组成的,运行在不同端系统上的进程对之间通过计算机网络来实现通信。所以,在应用程序进程和计算机网络之间存在一个接口,该接口被称为套接字(socket)。更为准确的说,套接字是同一台主机内应用层和运输层之间的接口。由于该套接字是建立网络应用程序的可编程接口,因此套接字也被称为应用程序和网络之间的应用编程接口(Application Programming Interface)。
应用程序开发者可以控制套接字在应用层的一切内容,但是对于运输层的相关部分,几乎没有控制权,可以做的有:
-
选择传输层协议和设定几个传输层参数,比如最大缓存和最长传输层报文长度
-
进程寻址
为了向特定目的进程发送报文,发送机进程需要知道接收进程(更为准确的说是,接收进程对应的套接字)的标记。该标记由两部分组成:接收进程所在的主机地址和接收进程在该主机中的标记;
在因特网中,主机由IP地址标记,其中IP地址是一个32位(IPV4)标记;而接收进程(或者说是其对应的套接字)使用端口号标记;一些常用的应用程序有着固定的端口号,比如Web服务器使用80端口、邮件服务器(运行SMTP协议)使用25端口等
-
2.1.3 可供应用程序使用的运输服务
传输层协议的特点大致可以从以下这四个方面考量:可靠数据传输、吞吐量、定时和安全性
-
可靠数据传输
如同在第一章中介绍的,分组在传输过程中可能会丢失。比如,分组因为路由器中的缓存溢出而被丢弃或者分组在传输的过程中发生了损坏等情况;有些应用是不允许数据发生丢失的,比如电子邮件、文件传输、远程主机访问、Web文档传输以及金融应用等。
为了支持这些应用,必须做一些工作以确保应用程序一段发送的数据正确、完全地交付给接收数据的进程。如果一个协议提供了这样能确保数据交付的服务,就认为该协提供了可靠数据传输。
当应用程序使用可靠数据传输的传输层协议时,只要将要发送的数据传输进套接字就可以完全相信该数据可以完整无差错地到达接收方;
当一个运输层协议不提供可靠数据传输时,由发送方发送的数据就可能不能够到达接收进程。有些应用是允许这样的情况发生的,这些应用被称为丢失允许的应用。
这类应用常见的有:交谈式音频和视频。它们能够承担丢失一定量的数据损失,在这些应用中,如果丢失少量数据将出现小干扰,但是不会出现致命的损伤,这些应用为容忍丢失的应用。
-
吞吐量
在一条网络路径上的两个进程之间的通信会话中,可用吞吐量就是指能够向接收进程交付比特的速率。因为会有其他会话共享该网络的路径的带宽,并且因为这些会话的到来和离开,可用吞吐量将发生变化;
这就导致另一种自然的服务,即运输层协议能够提供确切的可用吞吐量。使用这种服务时,应用程序就能以明确的速度接收数据,并且运输层应当保证可用吞吐量必须总是至少为该速度;
对吞吐量有明确要求的应用程序被称为带宽敏感的应用。许多多媒体应用是带宽敏感的(尽管某些多媒体应用程序可能采用自适应编码技术对数字视频和音频以与当前可用带宽相匹配的速度加解码。),比如因特网电话。
而弹性应用则对吞吐量没有严格的要求。这类应用包括:电子邮件、文件传输以及web传送等。值得注意的是,吞吐量当然是越多越好了。
-
定时
定时和吞吐量都是关于速度的。一个提供定时服务的例子是:发送方注入套接字中的每个比特到达接收方的套接字不迟于100ms。也就是说,定时是对数据从发送到到达所需时间的要求,而吞吐量是对数据交付速度的要求。
打个比方,吞吐量是指一个小时内经过某个收费站的汽车数目,而定时则是第一辆车从出发到进入下一个收费站的时间。有些应用