1. 首页 > 笙耀百科 >

udp转发未通过 sstap开启udp转发

关于udp转发未通过,sstap开启udp转发这个很多人还不知道,今天小天来为大家解答以上的问题,现在让我们一起来看看吧!

udp转发未通过 sstap开启udp转发udp转发未通过 sstap开启udp转发


1、既然已经有TCP了,为什么还需要UDP可靠?TCP是强制的可靠性传输,其在IP协议的基础上,发送端对所有的数据进行定时重传,接受端对所有的数据进行排序,以此(当然还有很多其他的机制)来实现发送端是什么样子的,接受端就能接受到什么样子的数据。

2、但是现实中有一些场景,我们并不需要如此固执的可靠性。

3、对于FPS游戏这种时效性要求非常高的游戏中,玩家最关心的是自己的射击结果和角色的存活与否,当有一个手雷扔过来时,对于被炸死的玩家而言,这颗手雷是必须要接收到的消息,而其他没有被炸到的玩家,仅需要看到手雷的爆炸动画或者是声音,其更关心的是自己现在的子弹,有没有将敌人爆头。

4、我们不希望因为手雷的消息重传排队,而把射击玩家的结果确认消息延后,这对于TCP而言就力所不逮了。

5、我们看一张图:在传输效率,传输代价和可靠性三个维度上,TCP在最左侧的这条线上,可靠性最高,但传输代价也很大,效率上不及UDP。

6、UDP则在最右侧,只有传输效率,不保证可靠,传输代价也较低。

7、我们如果需要在大约六角形的位置,选择一个折中的方案,那就是UDP可靠传输,即RUDP登场的时刻了。

8、如何实现?首先,为了保证可靠性,我们需要在发送数据的时候添加 重传定时器 ,来保证丢失的数据会被重传。

9、重传的定时器可以定时回调发送重传的数据,也支持将接收到ACK的数据从定时器中取出。

10、现在有了重传定时器,那每次发送数据的时候,应该给定时器设置多长的超时时间呢?最简单的可以设定一个固定的重传时间,最合理的应该针对每条传输链路的不同设置每个连接的合理时间--rto。

11、为了找到rto时间,我们需要获取到每个数据包发送确认时间,即rtt时间,即数据从发送到接收到ACK确认之间的时间间隔。

12、我们参照TCP的实现策略,可以给每个消息记录一个发送时间,当接收到ACK确认时,将此时的时间减去记录的发送时间就获取到了rtt时间。

13、但这样有一个问题,当发生数据重传时接收到ACK,无法判断这个ACK是对初次发送数据的确认还是对重传数据的确认,此时只能将发生重传数据测量到的rtt时间丢弃。

14、所以又有第二种rtt计算策略,我们可以将发送时间记录在数据头中发送出去,接受端在发送确认ACK时,将这个时间戳抄下来顺着ACK返回,这样发送端接收到ACK确认时,就能准确的知道要确认数据的发送时间,由此来计算rtt时间。

15、有了rtt时间,我们按照TCP的标准方法《CP/TPxian详解卷一, P465》,计算rto时间。

16、当接受到ACK确认时,我们需要将确认的数据从定时器中移除。

本文到这结束,希望上面文章对大家有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息