关于开发网络应用程序时,传输层协议的选择

1 相关介绍

应用程序开发者可以控制套接字在应用层端的一切,但是对该套接字的传输层端几乎没有控制权。应用程序开发者对于传输层的控制仅限于:选择传输层协议、也许能设定几个传输层参数,如最大缓存和最大报文段长度。一旦应用程序开发者选择了一个传输层协议,则应用程序就建立在由该协议提供的传输层服务之上。

2 问题描述

套接字是应用程序集成与传输层协议之间的接口。在发送端的应用程序将报文推进该套接字,在该套接字的另一侧,传输层协议负责使该报文进入接收进程的套接字。
包括因特网在内的很多网络提供了不止一种传输层协议,当开发一个新的网络应用程序时,如何选择其传输层协议了(TCP/UDP)?

3 解决办法

通过研究可用的传输层协议所提供的服务,选择一个最能为你的应用需求提供恰当服务的协议。大体上能够从四个方面对应用程序服务要求进行分类:可靠数据传输、吞吐量、定时、安全性。

3.1 可靠数据传输

传输层协议能够潜在地向应用程序提供一个重要服务是进程到进程的可靠数据传输,当传输层协议提供这种服务时,发送进程只要将其数据传递进套接字,就可以确定该数据可无差错地到达接收进程。电子邮件、文件传输、远程主机访问、Web文档传输以及金融应用等,数据丢失可能造成灾难性后果,对可靠数据传输需求较大;多媒体应用,如音频、视频流,可承受一定量的数据丢失,对可靠数据传输需求不大。

3.2 吞吐量

传输层协议能够以某种特定的速率提供确保的可用吞吐量(至少为r比特/秒)。具有吞吐量要求的应用程序被称为带宽敏感的应用,许多当前的多媒体应用是带宽敏感的,尽管某些多媒体应用程序可能采用自适应编码技术对数字语音或视频以与当前可用带宽相匹配的速率进行编码。
而弹性应用,能够根据情况或多或少地利用可供使用的吞吐量。电子邮件、文件传输以及Web传送都属于弹性应用。

3.3 定时

传输层协议也能提供定时保证。例如:发送方注入进套接字中的每个比特到达接收方的套接字不少于100ms。这种服务对交互式实时应用程序很有吸引力,如因特网电话、虚拟环境、电话会议和多方游戏。

3.4 安全性

传输协议能够为应用程序提供一种或多种安全性服务。在发送主机中,传输协议能够加密由发送进程传输的所有数据,在接收主机中,传输层协议能够在将数据交付给接收进程之间解密这些数据。传输协议除了能提供机密性安全服务外,还能提供完整性和端点鉴别。

4 某些应用程序服务要求

关于开发网络应用程序时,传输层协议的选择

5 TCP/UDP提供服务对比

5.1 TCP

TCP服务模型包括面向连接服务和可靠数据传输服务。
面向连接服务。在应用层数据报文开始流动之前,客户端和服务端建立一个全双工的TCP连接(连接双方的进程可以在此连接上同时进行报文收发),当应用程序结束报文发送时,必须拆除该连接。
可靠的数据传送服务。通信进程能够依靠TCP,无差错、按适当顺序交付所有发送的数据,当应用程序一端将字节流传进套接字时,它能够依靠TCP将相同的字节流交付给接收方的套接字,而没有字节的丢失和冗余。
TCP协议还具有拥塞控制机制。当发送方和接收方之间的网络出现拥塞时,TCP的拥塞控制机制会抑制发送进程。

5.2 UDP

UDP是一种不提供不必要服务的轻量级传输协议,它仅提供最小服务。(无连接、不可靠数据传送)(当进程将一个报文发送进UDP套接字时,UDP协议不保证该报文将到达接收进程,且到达接收进程的报文也可能是乱序的)。
UDP也无拥塞控制机制。

5.3 关于TCP与UDP的安全性

TCP与UDP均没有提供任何加密机制,也即均采用明文传输。(如果某发送进程以明文方式发送一个口令进入它的套接字,该明文口令将经过发送方和接收方之间的所有链路,这就可能在任何中间链路被嗅探和发现。)
SSL是基于TCP的安全版传输层协议,它不仅能够完成传统TCP所能完成的,还能提供关键的进程到进程的安全型服务,包括加密、数据完整性和端点鉴别。SSL是一种对TCP的加强,这种强化是在应用层上实现的。(如果一个应用程序需要使用SSL服务,它需要在该应用程序的客户端和服务器端包括SSL代码)(SSL有它自己的套接字API,当一个应用使用SSL时,发送进程向SSL套接字传递明文数据,发送主机中的SSL则加密该数据并将加密的数据传递给TCP套接字)。

5.4 关于TCP与UDP的定时与带宽

尽管今天的因特网通常能够为时间敏感应用提供满意的服务,但TCP与UDP不能提供任何定时或带宽保证,它们被设计成尽最大可能对付这种保证的缺乏。

6 一些网络应用程序使用的传输层协议

关于开发网络应用程序时,传输层协议的选择

7 参考资料

参考《计算机网络-自顶向下方法》,可从此链接下载本书。