UDP:一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。可靠性由上层应用实现。
TCP:是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP如何保证了可靠传输?确认机制、重传机制、滑动窗口。
1 用户数据报协议UDP
UDP不保证UDP数据包会到达目的地,也不保证到达的先后顺序会不变,也不保证每个包只会到达一次。
1)缺乏可靠性:如果想保证UDP包能够顺利到达目的地,需要在应用程序中添加一些特性,来自对端的确认、本端的超时超时与重传。
2)每个UDP数据包都有一个长度,到达目的地后,长度也一起传递给接收端应用程序。TCP是一个字节流协议,没有边界记录,需要应用程序自己表示数据报文的开始、以及长度。
3)无连接。一个客户端可以使用一个UDP套接字发数据报给服务器A,之后又使用这个套接字发数据报给其他服务器。服务器也可以用同一个套接字接收不同客户端发来的UDP数据报。
常见的应用:
UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
音视频使用UDP时,对于缺数据的部分:
1)等待应用程序的措施,来自对端的确认、本端的超时超时与重传。
2)应用程序采取一些恢复措施,arq、fec。通过前后的几个包恢复出丢失的包。
3)确实的较多无法恢复时,会产生卡顿,以缓冲好的部分播放的慢一些,留出时间等待未到达的数据包到达。
2 TCP
1)TCP提供客户与服务器的连接。建立连接、传数据、终止连接。
2)TCP提供可靠性。确认、超时、重传、RTT估算、序号列。
确认:TCP向一端发数据,要求对端返回确认消息,如果没有收到确认,TCP自动重传并等待更长的时间。数次重传都失败后,才会放弃,所花总时间一般为4到10分钟。
在TCP传送一个数据包时,它会把这个数据包放入重发队列中,同时启动计时器,如果收到了关于这个包的确认信息,便将此数据包从队列中删除,如果在计时器超时的时候仍然没有收到确认信息,则需要重新发送该数据包。
RTT估算:TCP含有用于动态估算客户端与服务器之间往返时间的算法,以便知道要等待一个确认要多长时间。
序号列:TCP通过给每个字节关联一个序号列,对所发的数据进行排序。
序列号为当前端成功发送的数据位数,确认号为当前端成功接收的数据位数,SYN标志位和FIN标志位也要占1位。
MSL:最长分节生命期。
由于实现的不同,TIME_WAIT状态在1分钟到4分钟不等,存在该状态的两个原因:
1)可靠地实现TCP全双工连接的终止
2)允许老的重复分节在网络上消失