为什么RTP往往是使用UDP,而不是使用TCP封装
2014-08-24 22:05
281 查看
继续完成“流媒体技术系列”,接上一篇提出的问题:为什么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协议和UDP协议的差别(以表格的形式):
参考:
深入浅出讲解TCP/UDP协议:http://tech.163.com/05/0913/11/1THDB8DO00091589.html
http://zh.wikipedia.org/zh-cn/传输控制协议
http://zh.wikipedia.org/zh-cn/用户数据报协议
(hanyionet)
计算机网络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协议和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/用户数据报协议
(hanyionet)
相关文章推荐
- 为什么RTP往往是使用UDP,而不是使用TCP封装
- 为什么RTP往往是使用UDP,而不是使用TCP封装
- connect()函数不是TCP的专用,UDP中同样可以使用
- QQ使用了什么通讯协议?为什么要这样做?为什么采用 UDP 协议,而不采用 TCP 协议实现?
- 为什么只开放TCP 5631(没开放UDP 5632 )就能使用PCAnyWhere?
- 为什么只开放TCP 5631(没开放UDP 5632 )就能使用PCAnyWhere?
- 视频监听安防平台-libuv库通信协议封装-支持udp和tcpserver同时使用
- SNMP使用UDP传送报文。为什么不使用TCP?
- QQ使用了什么通讯协议?为什么要这样做?为什么采用 UDP 协议,而不采用 TCP 协议实现?
- 描述应用程序开发者为什么可能选择在UDP上运行应用程序而不是在TCP上运行的原因
- 在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)
- 为什么只开放TCP 5631(没开放UDP 5632 )就能使用PCAnyWhere?
- TCP与UDP使用的指导方针
- TCP为什么要三次握手,不是两次四次
- tcp和udp在nio中使用的区别
- TCP为什么要三次握手,不是两次四次
- 在android中如何使用UDP和TCP传输
- 在android中如何使用UDP和TCP传输
- 为什么Microsoft code sample倾向使用ZeroMemory而不是{0}?
- 一起谈.NET技术,.NET框架:为什么我们要尽量使用框架内建的功能,而不是重新发明