UDP 收包失序时如何判定有丢包

nvcmc 2013-10-10 04:11:17
RT
欢迎大家讨论这个问题:
UDP在收包时会失序也会丢包,发送时给每个包按顺序打上序号从一开始 收包可能的样本是 1 3 4 5 6 ...丢包; 也可能是 1 4 5 2 3 6 ... 乱序;
现假设是第二种情况,收包顺序是乱的。当收到包序号为5时,怎么样决定是否发生了丢包,还是说只能给出包丢失的概率(收包还在继续,无法确定将来是否能收到现在没有收到的包,收到包5时,没有收到包2,3,),有人说把包收完然后去数就行了,问题是在实时情况下不可能知道包是否已经发完。
我想请教各位,实际开发中这种问题是怎么处理的,仅仅只是做一个大的缓冲区吗。
...全文
707 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
last_fxlt 2015-12-31
  • 打赏
  • 举报
回复
不能回复了?问的和答得两码事嘛 我也有这个问题?楼主怎么处理的?
nvcmc 2013-10-16
  • 打赏
  • 举报
回复
感谢楼上的回答,看了你的评论,心里有谱了,结贴
UDX协议 2013-10-11
  • 打赏
  • 举报
回复
你这个属于UDP可靠传输范畴。 接收乱序完全是有可能的,乱序分两种情况,一种是不同序号的网络包,经过的路由路线不一样,导致最终的到太乱序。另外一种情况就是,重发,引起的乱序。 发生乱序后,怎么办泥? 在UDX协议中,我是这样处理的, 申请一个list用来保存收到的包,插入的时候,判断不要重复插入。 然后,提交给应用层时,按包序号一个个取,当发生乱序时,比如,现在list中是1,2,3,5,6,7.五个包。四号包丢失,我们取包时,从1开始while取,当取到4时发现包没有,就break。一直等到收到4号包,从复前面的过程。 udx协议也是用来传输实时,非实时数据的,在现有网络条件下,可靠UDP完全是有必要的。 有兴趣的,可以与我讨论。
nvcmc 2013-10-11
  • 打赏
  • 举报
回复
失序当丢包处理,请求重传,收包时过滤重复包
nvcmc 2013-10-10
  • 打赏
  • 举报
回复
没人认真看我的问题么
木头菇 2013-10-10
  • 打赏
  • 举报
回复
自己给包编号
modyaj 2013-10-10
  • 打赏
  • 举报
回复
问题是在实时情况下不可能知道包是否已经发完---在数据包中用某一位来标识是第一个 包 还是中间包 还是最后一个包 不就是了么

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧