一、首先先要搞清楚TCP如何实现可靠性传输!
1.确认应答(ACK)机制
- 针对发送端发出的数据包的确认应答信号ACK
- TCP将每个字节的数据都进行了编号,即为序列号。确认序号=序号+1
- 针对数据包到达接收端主机顺序乱掉的顺序控制
2.超时重传机制
- 针对数据包丢失或者出现定时器超时的重发机制
- 针对高效传输数据包的流动窗口控制
4.流量控制机制
所谓流量控制,就是让发送方的发送速率不要太快,要让对方来得及接受,
5.拥塞控制
- 针对避免网络拥堵时候的流量控制
- 针对刚开始启动的时候避免一下子发送大量数据包而导致网络瘫痪的慢启动算法和拥塞控制。
而这些在UDP中都是没有的!此外,TCP作为一种面向有连接的控制传输协议,只有在确认对端主机存在时才会发送数据,从而可以控制通信流量的浪费。
总结下:TCP通过序列号、检验和、确认应答信号、重发控制、连接管理、窗口控制、流量控制、拥塞控制实现可靠性。
二、UDP构建可靠数据传输
简单来讲,要使用UDP来构建可靠的面向连接的数据传输,就要实现类似于TCP协议的超时重传,有序接受,应答确认,滑动窗口流量控制等机制,等于说要在传输层的上一层(或者直接在应用层)实现TCP协议的可靠数据传输机制,比如使用UDP数据包+序列号,UDP数据包+时间戳等方法,在服务器端进行应答确认机制,这样就会保证不可靠的UDP协议进行可靠的数据传输,不过这好像也是一个难题!
已经有类似可靠的UDP协议