我所热衷的编程生涯 连载(6)

来源:互联网 发布:linux怎么安装软件命令 编辑:程序博客网 时间:2024/04/19 00:21

    关于UDP数据丢包的问题, 其实第4章已经提及, 就是重发数据和确认数据包达到. 但是当实际应用中才会发现, 很多原理很简单的东西, 实现起来会遇到各种各样的疑难杂症, 不过话说回来也是欠考虑分析的原因. 什么问题呢, 那就是数据包重复接收的问题...
    我们来具体分析下吧,  接收端为什么会重复接收数据呢? 首先说下数据包发送和接收的过程, 发送端将数据发送过去后, 接收端收到数据, 进行确认包的回复. 这样发送端在收到接收端回发的确认包后就可认定, 本次数据包的发送成功到达接收端. 如果超时没有收到的话就会进行数据重发, 这就是主动重发模式, 当然还有一种是索取模式. 那么现在问题就来了, 假设网络状况不太好的时候, 在发送端判断超时后进行数据重发, 而这个时候接收端收到了正确的数据, 那么后续接收的重发数据不就重复了? 所以这个问题也是需要去解决的. 不像TCP那样协议内部已经将这个重复包的问题处理了, 外部使用者根本就不用操心.

    另外重发的次数过多必然会加重网络带宽的负担, 而且会降低整个通讯组件的效率. 所以寻找一种合理的重发机制也是需要考虑的.

    
    从图中可以看出, 如果网络状态不好, 数据丢包, 这样的话就会导致重发数据加重正常数据的发送的负担, 也会导致发送数据的延后, 所以控制好滑动窗口协议中的窗口大小是很有必要的. 而且这种控制也是需要动态调整的.
    那么这个时候为了很好的控制重发数据, 以及控制正常数据发送的速率, 就需要采取某些策略对网络状态进行监控并及时作出调整. 这样才会有很好的通讯表现. 网络状态瞬息万变, 所以监控也必须是实时的, 高效的, 一旦发现网络异常不仅要调整当前网络通讯效率同时还要对本次网络波动进行记录, 这样可以作为后续的参考. 当然, 还有更灵活的方式, 可以在检测的同时进行预感, 根据网络波动的经验进行预先的部署, 这样可以避免突如其来的网络波动对数据通讯的影响, 使危害降到最低. 
    其实仅仅是数据重发和监控策略就是很大的一个话题, 应对网络波动和异常是需要很灵活的手段, 而这种手段需要就要考虑很多突然情况的产生, 才能让实时策略能发挥出最大的作用.
    未完待续...(后续讨论P2P的应用和实际问题, 原理就不讲太多了 网上一大把~)

   

原创粉丝点击