传输层重要的几个协议是:
- TCP: Transmission Control Protocol
- UDP: User Datagram Protocol
- SCTP: Stream Control Transmission Protocol
- DCCP: Datagram Congestion Control Protocol
TCP 算是最常用的传输协议了,HTTP 和 FTP 都是基于它的。这个协议的特点是集成了拥塞控制,提供了丢包检测及重传、重复报文检测,保证发出去的数据有序到达接收方。可以说,这个协议对于使用者而言是最为“傻瓜”的,连接只有“成功”和“断开”两种状态。不过 TCP 由于在建立连接的时候要互相发送3个报文进行握手,之后才开始传输用户数据,所以会带来一定的额外开销。对于 HTTP 以及 FTP 协议而言,由于用户数据量比较大,所以对于这部分开销并不关心,此外 TCP 提供的拥塞控制也很有帮助。但是对于 RPC 这样的小数据量传输,TCP的开销就显得比较大了。另外对于一些实时性要求比较高的应用,比如网络游戏、网络电视、网络电话等,TCP 提供的丢包重传并不是十分有意义,因为丢了的包并不重要,而新的包才是更需要发送到接收方的。
UDP 则是一个很简单的传输协议,它几乎什么控制都不提供。它不保证发出的包能到达接收方,不保证报文到达接收方的顺序有序,而且同一个报文接收方可能会接收到多次,这套协议还不关心拥塞控制。TCP 协议提供的高级控制功能,UDP 都没有考虑。UDP 协议期望用户自己在应用中提供控制,或者用户不关心这些控制措施。虽然 UDP 看起来比较简陋,但是对于 RPC 和实时性要求高的应用而言,是最为高效的传输协议。此外,UDP 还能够直接支持多播和组播(这部分知识我现在还不是太清楚)。
UDP 的一个问题在于没有拥塞控制,这在安全上有一定的缺陷,于是 DCCP 被提出来解决这个问题。DCCP 在 RFC 4340 中提出,目前处于 proposed standard 状态。这个协议免去了在应用层实现拥塞控制的工作,并且已经在 Linux 2.6.14 内核中得到了支持。按照 wikipedia 给出的信息,这个协议类似于 TCP,但是却和 UDP 一样不对数据报文的重传、有序到达、唯一到达进行保证。个人感觉这套协议可能还是会有一定的建立连接时的开销,类似 TCP 建立连接时的握手过程。如果真是这样的话,这套协议还是不太适合 RPC,但是对于网络电视、网络电话这样的应用应该是很好的,因为这些应用的建立和用户数据传输的过程相比可以忽略。
SCTP 同样也是集成了 UDP 和 TCP 的特点,而且貌似更早于 DCCP ?它是在2000年就被提出来的。它的实现方式是将用户数据看做是消息,把它们拆分成小块进行发送。它可以看作是 Transaction-Oriented,接收方拿到的数据包和发送方发送的数据包是一样的(TCP会将发送的数据自动拆分到小包中),这一点类似于 UDP 的“确定边界”特性。
啊,困死了,回去睡觉吧。最后把 wikipedia 上的一个图表摘过来吧:
| Feature Name | UDP | TCP | SCTP | DCCP |
|---|---|---|---|---|
| Connection oriented | No | Yes | Yes | Yes |
| Reliable transport | No | Yes | Yes | No |
| Unreliable transport | Yes | No | Yes | Yes |
| Preserve message boundary | Yes | No | Yes | Yes |
| Ordered delivery | No | Yes | Yes | No |
| Unordered delivery | Yes | No | Yes | Yes |
| Data checksum | Yes | Yes | Yes | Unsure |
| Checksum size (bits) | 16 | 16 | 32 | Unsure |
| Path MTU | No | Yes | Yes | Yes |
| Congestion control | No | Yes | Yes | Yes |
| Multiple streams | No | No | Yes | No |
| Multi-homing support | No | No | Yes | Unsure |
| Bundling / Nagle | No | Yes | Yes | No |
from Wikipedia, original page to be found at here

0 comments:
Post a Comment