- 在线时间
- 19 小时
- 最后登录
- 2012-8-10
- 威望
- 0
- 金钱
- 96
- 贡献
- 3
- 注册时间
- 2012-7-9
- 阅读权限
- 10
- 主题
- 3
- 帖子
- 31
- 分享
- 0
- 精华
- 0
- 积分
- 130
- 相册
- 0
|
接上面的回复,llc如何保证确认数据按顺序投递。对于确认数据,llc本地保存了变量V(S),V(R),V(A). 比如上述中sndcp分成了三个分段1,2,3. llc发送一个分段V(S)值加1,则三个分段发送完毕之后V(S)=3. V(R)表示接收到一个I帧,值加1。 这里只考虑发送I帧,则V(S)等于3,V(R)=0。V(A)表示需要peer的ack。即llc发了3个I帧之后,在I帧里面的A bit位设置为1,并启动T201定时器,peer收到带A为的I frame之后,需要给发送端发ack,此时为S帧。此时peer的llc也维护三个本地变量V(S),V(R),V(A),正好相反,peer的V(S)=0,V(A)=0.V(R)的值就表示发送端发送了几个llc帧,若正常发送,peer的V(R)=3,则peer发送RR帧(S帧的一种),发送端接到RR帧之后,表示peer正常接收。而peer顺序收到之后,就往sndcp发送。
异常情况下,peer收到了1。而2,3没有收到,又收到了4.则llc在队列里面给2,3预留了两个位置,直到2,3全部收到之后再往sndcp投递。若2,3没有收到,并且发送端要求会ACK(I frame的Abit为1),则peer就根据V(R)与接收到的I frame的N(S)做比较,此刻发送SACK帧,SACK的bitmap里面会告诉发送端哪些frame丢失,发送端再重传,直到peer端正常接收到1,2,3,4,5,6 |
|