今天我突然在思考一个TCP的问题:
如果TCP丢包,那么recv能不能收到失去那个包的数据流.
比如发送端发送A,B,C,D四个包,协议栈可能会发送A,BC,D,也就是把BC合成一个包发出去
如果BC包丢失,那么接收端调用recv的时候会怎么样?
我原本以为会收到A,D包,因为TCP貌似无法知道A和D包之间有没有别的包存在
然后查阅网上资料得知TCP协议栈在收到一个包的时候会同时计算下一个包的sequenceID,nextSequenceID = sequenceID + sizeof(currentPackage);
如果TCP丢包,那么recv能不能收到失去那个包的数据流.
比如发送端发送A,B,C,D四个包,协议栈可能会发送A,BC,D,也就是把BC合成一个包发出去
如果BC包丢失,那么接收端调用recv的时候会怎么样?
我原本以为会收到A,D包,因为TCP貌似无法知道A和D包之间有没有别的包存在
然后查阅网上资料得知TCP协议栈在收到一个包的时候会同时计算下一个包的sequenceID,nextSequenceID = sequenceID + sizeof(currentPackage);
TCP接收端它是知道A,D包之间丢失了一个包的情况的.
http://www.csna.cn/archiver/tid-2218.html