打印
[无线通信]

关于数据传输丢失重传的机制

[复制链接]
2059|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
嘉辉先生|  楼主 | 2016-11-25 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在写无线传输程序涉及到丢包的算法。我们在写程序的时候为了让数据包传输更加可靠,也会用到像TCP这样的协议来传输东西。这里有几个问题,第一个问题:TCP协议里有每法送一个数据包后开启定时器,如果定时间到了发送方没有接到接收方的回应,此时重发数据包,,这里有点疑问,比如发送了123后  当你的超时时间到了没有接到对方的回应,此时又发送了456,程序相当于又循环执行了一遍,把456给发送出去了,此时才判断出超时,此时应该把123456一起发送出去,如果一起发送出去那下次接收到的回应是456的应答还是123456的应答,,一直没有明白这个过程!! 第二个问题:会不是是发送123然后等着什么都不干让对时间超时 再次重发123,直到发送了123收到应答之后再发456吗   这样是不是太浪费资源了。希望大神们帮我答疑解惑。先谢谢贴友们啦           

相关帖子

沙发
嘉辉先生|  楼主 | 2016-11-25 15:13 | 只看该作者
怎么没有人解答一下我的疑惑呢   求助

使用特权

评论回复
板凳
皈依| | 2016-11-26 08:48 | 只看该作者
发送123和456收到的回复信息应该是不一样的
这是两个循环,不论是在逻辑上还是程序实现上都应该是分开的

使用特权

评论回复
地板
皈依| | 2016-11-26 08:50 | 只看该作者
另外这种代码要上多任务内核 裸机效率太低

使用特权

评论回复
5
QuakeGod| | 2016-11-26 17:40 | 只看该作者
TCP每个包都有序列号,通过滑动窗口接收,如果收到123,只会回复3,如果收到123456,只会回应6,默认表示前面的12345都成功收到。

使用特权

评论回复
6
嘉辉先生|  楼主 | 2016-12-7 09:54 | 只看该作者
皈依 发表于 2016-11-26 08:48
发送123和456收到的回复信息应该是不一样的
这是两个循环,不论是在逻辑上还是程序实现上都应该是分开的 ...

发送了123 在设定的时间内没有回应可以继续发送456,对方收到后回复过来有序列号,可以根据序列号判断具体是那一包。如果设定超过了设定的时间正好接受了数据456那么应该是把123456一起发送出去  这样理解对不对。

使用特权

评论回复
7
皈依| | 2016-12-7 09:58 | 只看该作者
嘉辉先生 发表于 2016-12-7 09:54
发送了123 在设定的时间内没有回应可以继续发送456,对方收到后回复过来有序列号,可以根据序列号判断具 ...

回复有序列号一一对应这个理解是对的,但是如果123 456都没收到应该分开重发,不然123456就是一个包了,而不是123一个包 456一个包

使用特权

评论回复
8
嘉辉先生|  楼主 | 2016-12-7 09:58 | 只看该作者
QuakeGod 发表于 2016-11-26 17:40
TCP每个包都有序列号,通过滑动窗口接收,如果收到123,只会回复3,如果收到123456,只会回应6,默认表示前 ...

看了资料才明白  通过对方回复的信息来确认具体发送的那一包。  我还有个问题 数据包发送过去了对方接收到如果顺序乱了,怎么处理呢  没有想到合适的办法   求指导

使用特权

评论回复
9
嘉辉先生|  楼主 | 2016-12-7 10:14 | 只看该作者
本帖最后由 嘉辉先生 于 2016-12-7 10:40 编辑
皈依 发表于 2016-12-7 09:58
回复有序列号一一对应这个理解是对的,但是如果123 456都没收到应该分开重发,不然123456就是一个包了, ...

我是这样想的  刚才表述不清,123是一包发送了没有超时此时456来了 把456打包发送,这个时候123这一包超时了没有回应,而且456也没有回应,那么是不是就可以把 123 456 这两包打包成一包发送了,(接收端解析完知道是两包) 如果456这一包回应了,123这一包才超时没回应,此时只发送123这一包。这样合理吗?        还有一个问题,在接受的时候如果出现失序,比如发送了3包  分别是1,2,3 接收到的是2,3,1这样的顺序,怎么确认顺序号然后再按照正确的顺序转发出去,这个困扰了我好几天了

使用特权

评论回复
10
皈依| | 2016-12-7 10:51 | 只看该作者
嘉辉先生 发表于 2016-12-7 10:14
我是这样想的  刚才表述不清,123是一包发送了没有超时此时456来了 把456打包发送,这个时候123这一包超时 ...

第一个问题,123 456打成一个包发过去还要解析,速度和分别发送123 456速度相比的话不一定有优势,解析也需要占用一定的资源,建议各发各的,做的工作少,不易出错。
第二个问题,发送包的时候加一个时序位,比如第一个包时序是1 第二个包是2,按照你的说法,虽然受到的是2,3,1但是解析时序位之后能确定顺序是1,2,3

使用特权

评论回复
11
嘉辉先生|  楼主 | 2016-12-7 11:30 | 只看该作者
皈依 发表于 2016-12-7 10:51
第一个问题,123 456打成一个包发过去还要解析,速度和分别发送123 456速度相比的话不一定有优势,解析也 ...

您说的时序位,根据什么来判断这个时序位呢,没太懂您的意思

使用特权

评论回复
12
皈依| | 2016-12-7 12:00 | 只看该作者
嘉辉先生 发表于 2016-12-7 11:30
您说的时序位,根据什么来判断这个时序位呢,没太懂您的意思

就是在这个包的某几个固定数据位固定他们为时序位就可以了

使用特权

评论回复
13
QuakeGod| | 2016-12-7 22:14 | 只看该作者
嘉辉先生 发表于 2016-12-7 10:14
我是这样想的  刚才表述不清,123是一包发送了没有超时此时456来了 把456打包发送,这个时候123这一包超时 ...

你举的例子不恰当。前后矛盾,你刚说了123是一个包,又说顺序变成2,3,1.

现在统一按照我说的,123456是分开的独立包。
发送1,对方收到回1,
发送2,3对方收到回3.
发送4,对方没收到。不回应。
发送5,对方收到,回应3.
发送6,对方收到,回应3,这样发送方就知道接收方没收到4了。准备4的重发。
重新发送4,对方收到,回应6;
继续发送7


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

29

帖子

1

粉丝