2011年3月10日星期四

为什么RTP往往是使用UDP,而不是使用TCP封装

继续完成“流媒体技术系列”,接上一篇提出的问题:为什么RTP往往是使用UDP,而不是使用TCP封装,接下来简单的解释一下,先摘录一些基本概念,然后使用一个表格进行对比,进一步探讨这个问题。

计算机网络OSI模型中,TCP和UDP为第四层传输层的功能。

简单的说:TCP传输控制协议(Transmission Control Protocol)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。

必须要经过三次“对话”才能建立。
第1次对话
A-->    发连接请求数据包                       -->B

第2次对话
A<--    发送同意连接和要求同步          <--B

第3次对话
A-->    发数据包确认B的要求的同步    -->B

UDP用户数据报协议(User Data Protocol)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。
UDP例子:“ping”命令测试两台主机之间TCP/IP通信是否正常,就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

几个使用TCP重要的优点
1.TCP速率控(TCP rate control)制有经过证明是具有的稳定性和可扩展性。
2.TCP提供保证delivery, deleting the packet loss efficiently。
3.TCP是可以助于的越过防火墙。
4.流量控制(The flow control)。
5.The transmission windows system有助于优化网络资源的使用。

从网上摘抄一段关于TCP协议的主要功能
TCP协议的主要功能是完成对数据报的确认、流量控制和网络拥塞;自动检测数据报,并提供错误重发的功能;将多条路径传送的数据报按照原来的顺序进行排列,并对重复数据进行择取;控制超时重发,自动调整超时值;提供自动恢复丢失数据的功能。

相对TCP,UDP显然更好地使用于实时应用,原因如下:
1.最低开销(Minimum overhead)。
2.在最大数据从传输速率开始发送。
3.不重复请求,所以就没有重传(一个单一的数据包丢失在一个的实时应用中并不重要)。
4.低处理时间(low processing time)。不需要缓冲(No buffers)。

与TCP不同,UDP并不提供对IP协议的可靠机制、流控制以及错误恢复功能等。由于UDP 比较简单,UDP头包含很少的字节,比TCP负载消耗少。下图为TCP的头和UDP的头的格式:

TCP-Header 

UDP-Header

TCP协议和UDP协议的差别(以表格的形式):

 

  TCP UDP 和流媒体的关系
Header 20 Byte 8 Bytes UDP更好,少overhead
Connection Connection Oriented,在数据传输前需要建立connection。 Connectionless,没有connection需要被建立。 对于Multicast,Connection Oriented是不适合
Reliability 可靠 ACK 不可靠 可靠性比时间延迟(time delay)不重要。TCP会增加延迟
Communication Two-way双向 One way单向

In UDP, RTCP implements the feedback

Errors Error Correction FEC在整个packet Error Correction只在Header Checksum UDP使用较少处理Errors时间
Data flow 控制data flow用于管理下载速度 没有控制

UDP sends to the same data flow as is encoded the media.

Re-transmit 需要Repeat 不需要Repeat Repeat也会产生延迟,不适合实时应用
Delivery Rate 没有预设。TCP将一直增加直到数据丢失或发现堵塞 传输速度和流的编码率相吻合

UDP适应性更好

Client Buffer

Receive buffer
overflow: 如果数据到得太快,receiver发送一个信息给server,使其减慢传输

没有local caching,packet到了媒体播放器直接被处理。

Client Buffers也产生延迟

 

参考:
深入浅出讲解TCP/UDP协议:http://tech.163.com/05/0913/11/1THDB8DO00091589.html
http://zh.wikipedia.org/zh-cn/传输控制协议
http://zh.wikipedia.org/zh-cn/用户数据报协议

没有评论: