UDT的Sender和Receiver

来源:互联网 发布:mac双系统win10黑屏 编辑:程序博客网 时间:2024/05/20 23:07

Sender算法

数据结构和变量:

  1. Sender’s Loss List:发送方的loss list用来存储丢失包的序列号,序列号来自于两个地方,一是receiver通过NAK包反馈回来,二是超时事件发生时插入到列表里。序列号在loss list中是按序存储的。

数据发送算法:

  1. 如果sender的loss list不为空,那么重发loss list中的第一个包并且从list中删除它,然后转到<5>
  2. 在messaging模式中,如果数据包在Losslist中已经超过了应用指定的TTL时间,那么就发送message drop请求,并且将所有相关的数据包从loss list中清除,然后转到<1>
  3. 等待直到有应用数据可以发送
  4. 两种情况
    • 如果未应答的包总量达到了 flow/congestion 窗口大小,那么等待直到收到任何一个ack,然后转到<1>
    • 否则包装一个新的数据包然后发送。
  5. 如果当前数据包的序号是16N,即16的倍数,转到<2>
  6. 等待(SND-t)时间,SND是数据包发送间隔,通过拥塞控制更新,t是步骤1-5消耗的总时间,然后转到<1>

Receiver算法

数据结构和变量

  1. Receiver的Loss List:是一个数据元列表,数据元包含:已检测到丢失的数据包的序号,数据元最近一次NAK反馈的时间,已经被NAK反馈的次数K。数据元按照数据包序号升序排列。
  2. ACK History Window:一个循环数组,包含了每个送出的ACK和其出发的时间,如果数组中没有足够的空间,新数据会覆盖老数据。
  3. PKT History Window:一个循环数组记录了每个数据包到达的时间
  4. Packet Pair Window: 一个循环数组记录了每个对包内部的间隔时间
  5. LRSN:该变量记录收到的最大数据包序号,LRSN被初始化为(初始序号 -1)
  6. ExpCount:该变量记录EXP time-out事件发生的数量

数据接收算法:

  1. 查询系统时间,检查ACK,NAK,EXP定时器是否过期,如果任何一个定时器过期,则处理对应的事件,然后重置定时器对应的时间。对于ACK定时器,需要同时检查ACK包的间隔时间。
  2. 开始有超时的UDP报文接收,如果没有任何报文到达,转到<1>
  3. 重置ExpCount=1,如果全部数据已经ACK(loss list 为空?)或者收到ACK,NAK控制包,重置EXP定时器
  4. 检查包头的标志位,如果是控制包,根据其类型进行处理,然后转到<1>
  5. 如果当前数据包的序号是16N+1,在Packet Pair Window中记录当前数据包跟上一个数据包的时间间隔。
  6. 在PKT History Window中记录包到达时间
  7. 两种情况
    • 如果当前数据包的序号A比LRSN+1大,将A和LRSN+1之间(不含)的所有序号放到loss list中,然后用NAK包发送回sender。
    • 如果序号比LRSN小,将其从loss list中移除。
  8. 更新LRSN,转到<1>
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 异世豆兵 兵部尚书 兵部 兵部京介 兵部京介第一季在线播放 the unlimited兵部京介 兵锋天下 兵锋无双 兵锋 浴血兵锋 都市兵锋 兵锋王座 铁血兵锋 绝世兵锋 龙牙兵锋 终级兵锋 无敌兵锋 兵锋秦风 兵锋所指 兵锋天下 林 兵锋天下林义沈傲雪 兵锋天下林义 兵锋天下林义全文免费阅读 兵锋天下林义沈傲雪免费阅读 兵锋天下林义免费阅读 都市兵锋林少峰 网游之兵锋三国 兵锋天下第十章 兵锋天下免费阅读 兵锋天下林义 林义陈婉婷 西楚霸王之兵锋所向 凰保保 兵锋天下 林义陈婉婷 兵锋天下林义沈傲雪全文阅读 铁血兵锋作者妖妖灵 三国之兵锋 梅花起子 兵锋天下吾乃天少 网游之兵锋三国 君莫 林少锋都市兵锋 浴血兵锋txt下载 利威尔兵长超清图片 兵长