Jump to Navigation

toxnet rUDP协议,重点

toxnet rUDP协议,重点,
三次握手
四次挥手

丢包检测,
丢包重传

RUDP的模块中最为重要的是其收发缓冲控制和CCC发送窗口控制、CCC发送慢启动控制、CCC快恢复控制等

设计:
现有的rudp实现,大都还处于socket层之上,也许更有前途的要基于任意tranport层上。
双层设计,控制层和传输层,
rudcp rilable USER DATA control protocol layer
rudtp rilable USER DATA transport protocol layer

生成ISN(initial sequence no)算法:防止被猜到,使用32位随机整数。
理论上对于长连接来说有可能超过32位,所以最好找一个稍微小点的值,尽量防止超过之后返0处理。

### 接收端
查找可进入读取窗口的所有收到的包,
从rcvseq开始,遍历接收缓冲区,如果与rcvseq相等,则该包可进入调用端读取窗口。
遍历不能超过当前收到的最大包序列。
相关函数:
recv_find_readyread_packets()
recv_check_readyread_packet(pkt)

检测是否有丢失包,
从rcvseq开始,遍历接收缓冲区,如果与rcvseq不等,则该包为丢失的包。
对于丢失的包,触发retran事件,让transport层发送重传请求。
盯着函数:
recv_find_loss_packets()
recv_check_loss_packet(pkt)

重复包处理,
如果包序号小于rcvseq,则定义为重复包,但要回发确认包。
盯着函数:
recv_find_duplicate_packets()
recv_check_duplicate_packet(pkt)

### 发送端

丢失重传机制,
如果在发送窗口内的包,超时未收到确认ack包,则认为丢失,调度进入重传。
定时check发送窗口内的包。
losspkt_check_timeout()

简单发送窗口控制:
如果发送窗口包个数小于某个值,则新发送请求放入窗口,否则放入缓冲区。
默认4096字节,最大值要还大些。
attem_send()
flush_send()
cleanup_win() 把收到data_ack的包从win窗口清出。
readySend() 事件,用于驱动后续数据入队。

慢启动控制(拥塞窗口)算法:

Nagle算法,

### 连接的关闭
这里涉及到transport层的关闭,还有ctrl层的关闭,需要一个逻辑来优雅的关闭整个连接。
传输层设置关闭标记,ctrl层发送完数据后根据标识确定是否关闭连接。
对于toxtun来说,后端socket作为传输层角色来设置标记。

对于主动发起关闭的一端来说,将顺序经历,FIN_WAIT_1 => FIN_WAIT_2 => TIME_WAIT => CLOSED这4种状态。
对于被动关闭的一端来说,将顺序经历,CLOSE_WAIT => LAST_ACK => CLOSED 这3种状态。
状态机的实现很重要,定时器也需要,感觉很重,难道tcp实现的时候,也用了定时器检测超时吗?
原来TCP协议实现中,一般用到4个计时器,和这个rUDP类似,
重传定时器,
坚持定时器/persist定时器, 使窗口大小保持不断流动???
保活定时器,
TIME_WAIT超时定时器。

### 传输速度的考虑
这种方式下,传输速度与什么有关呢?
传输速度相关因素分析:
do_iterate的调用步骤。应该以默认频率可能是比较好的。
发送缓存大小。不能太大,防止网络拥塞。
发送窗口大小。(该值应该大于发送缓存一个数量级,因为这是发送到网络上的数据,只是在等待确认)
每次发送的包大小。(应该尽量接近一条消息的大小,即1371字节)
ACK确认包回复频率。(实际的TCP实现,有可能一个ACK包确认两个及以数据包,确认最迟200ms)

参考:
http://blog.csdn.net/whuslei/article/details/6667471
http://blog.csdn.net/sjin_1314/article/details/10254779

Category:

添加新评论

Plain text

  • 不允许HTML标记。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.


Main menu 2

Story | by Dr. Radut