关于数据传输丢失重传的机制
最近在写无线传输程序涉及到丢包的算法。我们在写程序的时候为了让数据包传输更加可靠,也会用到像TCP这样的协议来传输东西。这里有几个问题,第一个问题:TCP协议里有每法送一个数据包后开启定时器,如果定时间到了发送方没有接到接收方的回应,此时重发数据包,,这里有点疑问,比如发送了123后当你的超时时间到了没有接到对方的回应,此时又发送了456,程序相当于又循环执行了一遍,把456给发送出去了,此时才判断出超时,此时应该把123456一起发送出去,如果一起发送出去那下次接收到的回应是456的应答还是123456的应答,,一直没有明白这个过程!! 第二个问题:会不是是发送123然后等着什么都不干让对时间超时 再次重发123,直到发送了123收到应答之后再发456吗 这样是不是太浪费资源了。希望大神们帮我答疑解惑。先谢谢贴友们啦怎么没有人解答一下我的疑惑呢 求助 发送123和456收到的回复信息应该是不一样的
这是两个循环,不论是在逻辑上还是程序实现上都应该是分开的 另外这种代码要上多任务内核 裸机效率太低 TCP每个包都有序列号,通过滑动窗口接收,如果收到123,只会回复3,如果收到123456,只会回应6,默认表示前面的12345都成功收到。 皈依 发表于 2016-11-26 08:48
发送123和456收到的回复信息应该是不一样的
这是两个循环,不论是在逻辑上还是程序实现上都应该是分开的 ...
发送了123 在设定的时间内没有回应可以继续发送456,对方收到后回复过来有序列号,可以根据序列号判断具体是那一包。如果设定超过了设定的时间正好接受了数据456那么应该是把123456一起发送出去这样理解对不对。 嘉辉先生 发表于 2016-12-7 09:54
发送了123 在设定的时间内没有回应可以继续发送456,对方收到后回复过来有序列号,可以根据序列号判断具 ...
回复有序列号一一对应这个理解是对的,但是如果123 456都没收到应该分开重发,不然123456就是一个包了,而不是123一个包 456一个包 QuakeGod 发表于 2016-11-26 17:40
TCP每个包都有序列号,通过滑动窗口接收,如果收到123,只会回复3,如果收到123456,只会回应6,默认表示前 ...
看了资料才明白通过对方回复的信息来确认具体发送的那一包。我还有个问题 数据包发送过去了对方接收到如果顺序乱了,怎么处理呢没有想到合适的办法 求指导 本帖最后由 嘉辉先生 于 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这样的顺序,怎么确认顺序号然后再按照正确的顺序转发出去,这个困扰了我好几天了 嘉辉先生 发表于 2016-12-7 10:14
我是这样想的刚才表述不清,123是一包发送了没有超时此时456来了 把456打包发送,这个时候123这一包超时 ...
第一个问题,123 456打成一个包发过去还要解析,速度和分别发送123 456速度相比的话不一定有优势,解析也需要占用一定的资源,建议各发各的,做的工作少,不易出错。
第二个问题,发送包的时候加一个时序位,比如第一个包时序是1 第二个包是2,按照你的说法,虽然受到的是2,3,1但是解析时序位之后能确定顺序是1,2,3 皈依 发表于 2016-12-7 10:51
第一个问题,123 456打成一个包发过去还要解析,速度和分别发送123 456速度相比的话不一定有优势,解析也 ...
您说的时序位,根据什么来判断这个时序位呢,没太懂您的意思 嘉辉先生 发表于 2016-12-7 11:30
您说的时序位,根据什么来判断这个时序位呢,没太懂您的意思
就是在这个包的某几个固定数据位固定他们为时序位就可以了 嘉辉先生 发表于 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
页:
[1]