网络的可靠性传输

(一)一般实现可靠性传输有两种元素

  ——通过Acknowledgements  (接收方收到一个数据,就发送一个ACK表示他收到了)

  ——通过计时器 (即一个数据发送出去开始计时,如果时间到了依然没有收到对应的ACK,就重新法术数据包)

 

(二)停止等待协议

  ——同一个时间,在链路上只能发送一个数据包,如果没有接受到ACK,就不能发送第二个数据包,这样做浪费带宽。

如图所示的情况。

  

  ——同样的,他可能会导致重复收到同样的数据包,(ACK可能会LOST或者DELAY,都会造成TIMEOUT,导致重新发送数据包)

 

(三)滑动窗口协议

滑动窗口协议则可以让,多个数据包在外面同时进行传送。同时对每一个数据包用Sequence number来继续编号,为了维持他的顺序。

多个数据包到底有多少个呢?一般是 delay*bandwidth 的大小,让数据可以充满这个信道。

 

对于发送方和接收方都有一个滑动窗口。

 

Sender

SWS(发送方的窗口大小)=delay*bandwidth

LAR(Last Acknowledgement Receiver) 最后收到的确定数据包

LFS(Last Frame Sent) 最后发送的数据包

 

Receiver

RWS(接收方的滑动窗口大小) = 1 或者 SWS 之间

LAF (Largest Acceptable frame)  可以接受的最大的SEQ号码的数据包

LFR (Last Frame Receive) 最近按照顺序收到的数据包

 

SWS滑动的条件 就是收到(LAR+1)ACK编号的数据包,如果不是都不能滑动。

RWS滑动的条件 就是收到LFR+1编号的数据包,如果不是都不能滑动。

 

当SWS=RWS时, SWS<(MaxSeqNum+1)/2,  否则会导致重复接受到同样的数据包。

可以看例子

这是不符合的情况

如果改成就可以 SWS<(MaxSeqNum+1)/2

 

ACK的形式

——NAK,(当收到错误的数据包时,会回复一个NAK,告诉Sender这个包是错误的,这样就不用等到TIMEOUT就才重送,一般一个TIMEOUT>RTT)

——Cumulative acknowledgement (他回复的ACK他是有累计的意义,假设回复一个4,就代表之前的0,1,2,3的数据包全都收到了)比较常用。

 

滑动窗口协议的三个功能

——提供可靠性的传输

——提供传输的循序(送给上一层的会按顺序,虽然传输的时候有可能乱序,但是之前收到的数据包,可以先存在buffer里面,等到全部好了,在传给上面一层)

——流量控制(通过调整RWS,RWS越大流量越大)

posted @ 2016-08-04 00:55  考拉小无  阅读(772)  评论(2编辑  收藏  举报