图 新手入门:了解网络应用与网络协议( 四 )


实时性
诸如因特网电话、虚拟环境、远程电话会议、多方游戏等交互式实时应用要求数据的递送满足严格的定时限制,以此保证有效 。这些应用中有许多要求端到端的延迟在数百毫秒或以下的数量级 。例如,因特网电话中的长延迟往往导致交谈中不自然的停顿:在多方游戏或虚拟交互环境中,从采取行动到看见来自环境的响应之间的长延迟(譬如说在某个端到端连接结束时才看到来自另一个玩家的响应)将使得应用感觉起来不大现实 。对于非实时应用来说,低延迟总比高延迟可取,不过它们不会对端到端延迟施加任何严格的限制 。
下表汇总了一些流行的和新兴的因特网应用的可靠性、带宽和实时性需求 。这仅仅是一些较为流行的因特网应用的若干要害需求的概要 。我们的目的并不是提供网络应用需求的一个完整分类,而是简单地标识出可由此将网络应用需求归类的几个最重要的轴 。
 
表1:一些网络应用的服务需求
因特网(更一般地说,TCP网络)给应用程序提供两个传输协议:用户数据报协议(UserDatagram Protocol,UDP)和传输控制协议(Transaction Control Protocol,TCP) 。当开发人员创建一个新的因特网应用时,他必须选择UDP或TCP这两个协议之一用于该应用 。这两个协议给应用提供不同的服务模型 。
由因特网传输协议提供的服务
TCP服务
TCP服务模型包括面向连接的服务和可靠的数据传输服务 。调用TCP作为其传输协议的应用同时取得这两种服务 。
面向连接的服务指的是客户端和服务器端的TCP在开始传输应用层消息之前,先交换传输层控制信息 。这个所谓的握手过程警示客户和服务器,以便它们为来自对方的分组冲击做好预备 。握手阶段结束之后,我们说这两个进程的套接字之间存在一个TCP连接(TCP connection) 。这是一个全双工的连接,也就是说客户和服务器这两个进程可以同时通过该连接向对方发送消息 。完成消息的发送后,应用进程必须告知TCP拆除这个连接 。称这种服务为“面向连接”服务而不是“连接”服务(或者说“虚电路”服务)的理由在于,它两端的进程是以非常松散的方式连接的 。
可靠的传输服务指的是彼此通信的进程可以依靠TCP无错地顺序递送所有数据 。当其中任何一个应用进程把一个字节流传入套接字时,它可以指望TCP把同样的字节流递送到对方的套接字,中间不会有字节的丢失或重复 。
TCP还包含一个拥塞控制机制,它是因特网的一种公益服务,其目的不在于让彼此通信的进程直接受益 。TCP拥塞控制机制在网络变得拥塞时抑制发送进程(可以是客户,也可以是服务器) 。确切地说,TCP拥塞控制试图把每个TCP连接限定在它所公平共享的网络带宽内 。对于有最小带宽需求限制的实时音频和视频应用来说,抑制传输率会有很坏的后果 。此外,实时应用可容忍数据丢失,不需要完全可靠的传输服务 。由于这些原因,实时应用程序的开发人员通常设计成在UDP而不是TCP上运行他们的应用 。
概述完TCP提供的服务后,我们说一下TCP没有提供的服务 。首先,TCP不保证最小传输率 。具体地说,TCP不答应发送进程以想要的任意速率发送;相反,发送速率受到TCP拥塞控制的调节,发送进程有可能被迫以一个较低的平均速率发送 。其次,TCP不提供任何延迟保证 。具体地说,发送进程把数据传入自己的TCP套接字之后,这个数据将最终到达其接收套接字,然而就该数据花多长时间到达那儿来说,TCP绝对不作保证 。花几十秒甚至几分钟等待TCP从web服务器往Web浏览器递送一个消息(例如,其中含有一个HTML文件)也非罕见 。总之,TCP保证递送全部数据,但对递送速率和所经历的延迟不加保证 。