我们知道套接字是应用进程和传输协议之间的接口。发送端的应用进程通过这扇门送出消息。在门的另一侧,传输协议负责把这些消息跨网络传送到接收进程的门口。包括因特网在内的许多网络体系结构提供不止一个传输协议。在开发应用程序时,必须选择一个可用的传输协议。如何进行选择呢?最可能的情形是,先研究一下由可用的传输协议提供的服务,再选出其服务与应用程序的需求最为匹配的协议。这种情形类似于在两个城市之间旅行时选择乘火车还是乘飞机。你只能选择其中一种运输方式,而每种方式提供的服务是不同的(例如火车提供市区载客服务.飞机提供更短的运输时间)。
网络应用可能要求传输协议提供什么样的服务呢?我们可以把网络应用的服务需求按以下3个尺度粗略地进行划分:可靠性、带宽、实时性。
可靠性
有些应用要求完全可靠地传送数据,也就是说不能有数据丢失,例如电子邮件、文件传送、远程主机访问、Web文档传送、财务应用等。丢失文件数据或财务交易数据的灾难性后果是可想而知的。另有一些丢失容忍应用(lose-tolerant application)可以容忍一定数量的数据丢失,例如实时音频/视频或仓储音频/视频等多媒体应用。在丢失容忍的多媒体应用中,数据的丢失可能会在播放出的音频/视频中引入短时脉冲干扰,不过不是至关紧要的损伤。数据丢失对于应用质量的影响以及实际可容忍的分组丢失量强烈依赖于应用本身及所用的编码方案。
带宽
有些应用必须以特定的持续速率传送数据才会有效。例如,如果某个因特网电话应用32Kbps的速率编码语音,那么它必须能够以同样的速率把数据发送到网络,再由网络递送到接收应用。如果得不到这个数量的带宽,应用就得以一个较低的速率编码,还得获取足以维持这个编码速率的带宽,否则只能放弃,因为对于这样的带宽敏感应用(bandwidth-sensitive application)来说,仅仅得到所需带宽的一半是没有用的。许多当前的多媒体应用对带宽敏感,不过将来的多媒体应用可能用上自适应编码技术,能够以与当前的可用带宽相匹配的速率编码。带宽敏感应用需要一个给定数量的带宽,而与之相对的是,弹性应用(elastic application)却可以根据临时可用量随多随少地使用带宽。电子邮件、文件传送、远程访问、web传送等都是弹性应用。当然带宽肯定越高越好。
实时性
诸如因特网电话、虚拟环境、远程电话会议、多方游戏等交互式实时应用要求数据的递送满足严格的定时限制,以此保证有效。这些应用中有许多要求端到端的延迟在数百毫秒或以下的数量级。例如,因特网电话中的长延迟往往导致交谈中不自然的停顿:在多方游戏或虚拟交互环境中,从采取行动到看见来自环境的响应之间的长延迟(譬如说在某个端到端连接结束时才看到来自另一个玩家的响应)将使得应用感觉起来不大现实。对于非实时应用来说,低延迟总比高延迟可取,不过它们不会对端到端延迟施加任何严格的限制。
下表汇总了一些流行的和新兴的因特网应用的可靠性、带宽和实时性需求。这仅仅是一些较为流行的因特网应用的若干关键需求的概要。我们的目的并不是提供网络应用需求的一个完整分类,而是简单地标识出可由此将网络应用需求归类的几个最重要的轴。
表1:一些网络应用的服务需求
因特网(更一般地说,TCP网络)给应用程序提供两个传输协议:用户数据报协议(UserDatagram Protocol,UDP)和传输控制协议(Transaction Control Protocol,TCP)。当开发人员创建一个新的因特网应用时,他必须选择UDP或TCP这两个协议之一用于该应用。这两个协议给应用提供不同的服务模型。