18,358
社区成员
发帖
与我相关
我的任务
分享
目前是有这样情况,出图一半。谢谢指点。[/quote]
除了接收缓冲区,发送缓冲区也要设置的。
丢包是正常的,要传文件,丢包、乱序的处理是必需的,所以不建议全都自己做,可以从开源项目中拷贝一些代码过来。
处理丢包有三种方法,一种是每个包都要应答,这其实就和TCP差不多了;另一种是主动请求缺少的包;还有一种就是用纠错码,只要收到的包达到一定比例,就可以解出完整数据了。[/quote]
TCP之所以能检测到网络状态是拥塞的,就是发送一个包的数据,然后校验这个包的长度,如果长度和校验不对,说明包在传输过程中被插入了一些其他数据,也就是跟其他数据包冲突了,即拥塞了。丢包就是拥塞么?那断网不是要无限等。并且在一定间隔时间后,TCP同样会发送这样一个包,如果通不过就等待更长时间,直到通过检验再加快速度发包,主动被动什么的,我是不理解你想表达什么。同理在其他数据包拥塞时,UDP包会被插入其他数据,从而导致校验失败。是你自己提出UDP可以抢占TCP的带宽的,我并没有说哪个协议好坏,并且我是同意的,只是这是TCP的特性,UDP和其他数据没有这个机制,但UDP与其他数据拥塞时会造成带宽浪费而已。[/quote]
TCP/UDP层不存在插入其他数据的问题,也不存在长度和校验的问题。这些都是链路层的工作,其实链路层也不需要做多少工作,有线网络误码的概率几乎为零,是典型的二进制删除信道(Binary erase channel)。也就是说,发出的包要么由于中间设备处理不过来而丢弃了,要么就收到了,收到的都是可用的无错误数据。TCP判断拥塞的依据是没有收到应答,超时没应答就认为是丢了。如果网路过分拥塞,TCP会无法工作,因为即使接收端收到了,应答包也可能丢失,网络上会被无用的重传占满。UDP没有这个问题,丢包率99%一样可用,不存在浪费,我就模拟过丢包率50%以上的环境,跑我的程序完全没有问题。
目前是有这样情况,出图一半。谢谢指点。[/quote]
除了接收缓冲区,发送缓冲区也要设置的。
丢包是正常的,要传文件,丢包、乱序的处理是必需的,所以不建议全都自己做,可以从开源项目中拷贝一些代码过来。
处理丢包有三种方法,一种是每个包都要应答,这其实就和TCP差不多了;另一种是主动请求缺少的包;还有一种就是用纠错码,只要收到的包达到一定比例,就可以解出完整数据了。[/quote]
TCP之所以能检测到网络状态是拥塞的,就是发送一个包的数据,然后校验这个包的长度,如果长度和校验不对,说明包在传输过程中被插入了一些其他数据,也就是跟其他数据包冲突了,即拥塞了。丢包就是拥塞么?那断网不是要无限等。并且在一定间隔时间后,TCP同样会发送这样一个包,如果通不过就等待更长时间,直到通过检验再加快速度发包,主动被动什么的,我是不理解你想表达什么。同理在其他数据包拥塞时,UDP包会被插入其他数据,从而导致校验失败。是你自己提出UDP可以抢占TCP的带宽的,我并没有说哪个协议好坏,并且我是同意的,只是这是TCP的特性,UDP和其他数据没有这个机制,但UDP与其他数据拥塞时会造成带宽浪费而已。
目前是有这样情况,出图一半。谢谢指点。[/quote]
除了接收缓冲区,发送缓冲区也要设置的。
丢包是正常的,要传文件,丢包、乱序的处理是必需的,所以不建议全都自己做,可以从开源项目中拷贝一些代码过来。
处理丢包有三种方法,一种是每个包都要应答,这其实就和TCP差不多了;另一种是主动请求缺少的包;还有一种就是用纠错码,只要收到的包达到一定比例,就可以解出完整数据了。
目前是有这样情况,出图一半。谢谢指点。