数据链路protocol
1.stop-wait
sender发一帧之后停止,等待
receiver收到一帧后,传回一个feedback
sender等到feedback之后才传下一帧
若feedback传丢了?
待timeout之后sender会重发相同的帧,receiver收到了重复的帧,造成error
解决:每个帧给一个sequence number,0-1-0-1-0-1。。。。。。
缺点:信道利用率低,计算公式见课本P99
2.顺序接收pipelining protocol
见tananbaum书P254的图
为了提高利用率,允许sender在没收到feedback的情况下一次发一坨frame,receiver按seq num按顺序收,顺序不对的直接扔掉
piggyback:在双向传输时,feedback和receiver传给sender的数据绑一起
若中间的一帧后来发现出错了?会造成大量重传
go-back-N:receiver的buffer容量仅为1。即顺序不对的全扔掉
改进:selective-repeat (go-back-N的大buffer版本)
receiver传一个奇怪的feedback:NAK,表示这一帧错了。然后不管它,接着接收后面的。不过把从出错位以后的帧都先放到一个buffer里,不交给网络层。
sender收到NAK发现那一帧出错,于是重传那一帧。
receiver收到那一帧后把它交给网络层,然后给一个feedback,说buffer里面的我已经收到了不用重新传了
sender知道后接着buffer里面的帧再传。
3.sliding-window protocol
设seq num域有n bit,则seq num范围为0--(2^n)-1,
receiver有个能存2^n个帧的buffer
在sender的sliding-window中,当seq num符合的新帧从网络层传来进入头部时候,头指针++。当尾部的帧被receiver确认后,尾指针++。
前面几种protocol都可看作sliding-window的特例。见课本P105