較高的發(fā)送速度和較低的接收能力的不匹配,會造成傳輸出錯(cuò)技即,因此流量控制也是數(shù)據(jù)鏈路層的一項(xiàng)重要工作著洼。
數(shù)據(jù)鏈路層的流量控制是點(diǎn)對點(diǎn)的,而傳輸層的流量控制是端到端的而叼。
數(shù)據(jù)鏈路層流量控制手段:接收方收不下就不回復(fù)確認(rèn)身笤。(確認(rèn)幀)
傳輸層流量控制手段:接收端給發(fā)送端一一個(gè)窗口公告。
流量控制的方法有停止-等待協(xié)議葵陵、滑動(dòng)窗口協(xié)議(后退N幀協(xié)議GBN液荸、選擇重傳協(xié)議SR)
1 停止-等待協(xié)議
為什么要有停止等待協(xié)議?
除了比特出差錯(cuò),底層信道還會出現(xiàn)丟包(物理線路故障脱篙、設(shè)備故障娇钱、病毒攻擊、路由信息錯(cuò)誤等原因绊困,會導(dǎo)致數(shù)據(jù)包的丟失)問題文搂。為了實(shí)現(xiàn)流量控制。
研究停等協(xié)議的前提?
雖然現(xiàn)在常用全雙工通信方式秤朗,但為了討論問題方便煤蹭,僅考慮一方發(fā)送數(shù)據(jù)(發(fā)送方),一方接收數(shù)據(jù)(接收方)取视。
因?yàn)槭窃谟懻摽煽總鬏數(shù)脑硐踉恚圆⒉豢紤]數(shù)據(jù)是在哪一個(gè)層次上傳送的。
“停止等待”就是每發(fā)送完一個(gè)分組就停止發(fā)送作谭,等待對方確認(rèn)稽物,在收到確認(rèn)后再發(fā)送下一個(gè)分組。
分為兩種情況研究:
??無差錯(cuò)情況
??有差錯(cuò)情況(分三種情況)
——數(shù)據(jù)幀丟失或檢測到幀出錯(cuò)
——ACK丟失
——ACK遲到
停止等待協(xié)議簡單折欠,但是信道利用率太低贝或。
2 后退N幀協(xié)議GBN
GBN發(fā)送方必須相應(yīng)的三件事
1.上層的調(diào)用
上層要發(fā)送數(shù)據(jù)時(shí)秧倾,發(fā)送方先檢查發(fā)送窗口是否已滿,如果未滿傀缩,則產(chǎn)生一個(gè)幀并將其發(fā)送;如果窗口已滿,發(fā)送方只需將數(shù)據(jù)返回給上層农猬,暗示上層窗口已滿赡艰。上層等一會再發(fā)送。(實(shí)際實(shí)現(xiàn)中斤葱, 發(fā)送方可以緩存這些數(shù)據(jù)慷垮,窗口不滿時(shí)再發(fā)送幀)。
2.收到了一個(gè)ACK
GBN協(xié)議中揍堕,對n號幀的確認(rèn)采用累積確認(rèn)的方式料身,標(biāo)明接收方已經(jīng)收到n號幀和它之前的全部幀。
3.超時(shí)事件
協(xié)議的名字為后退N幀/回退N幀衩茸,來源于出現(xiàn)丟失和時(shí)延過長幀時(shí)發(fā)送方的行為芹血。就像在停等協(xié)議中一樣,定時(shí)器將再次用于恢復(fù)數(shù)據(jù)幀或確認(rèn)幀的丟失楞慈。如果出現(xiàn)超時(shí)幔烛,發(fā)送方重傳所有已發(fā)送但未被確認(rèn)的幀。
GBN接收方要做的事
如果正確收到n號幀囊蓝,并且按序饿悬,那么接收方為n幀發(fā)送一個(gè)ACK,并將該幀中的數(shù)據(jù)部分交付給上層聚霜。
其余情況都丟棄幀狡恬,并為最近按序接收的幀重新發(fā)送ACK。接收方無需緩存任何失序幀蝎宇,只需要維護(hù)一個(gè)信息: expectedseqnum (下一個(gè)按序接收的幀序號)弟劲。
窗口長度可以無限嗎?
若采用n個(gè)比特對幀編號,那么發(fā)送窗口的尺寸WT應(yīng)滿足: 姥芥。因?yàn)榘l(fā)送窗口尺寸過大函卒,就會使得接收方無D法區(qū)別新幀和舊幀。
例:
因?yàn)镚BN是累積確認(rèn)撇眯,3號幀的確認(rèn)代表3及3之前的都受到了报嵌,所以需要重發(fā)的幀是4、5熊榛、6锚国、7幀,即需要重發(fā)的幀數(shù)是4玄坦,選擇C
3 選擇重傳協(xié)議SR
SR發(fā)送方必須相應(yīng)的三件事:
1.上層的調(diào)用
從上層收到數(shù)據(jù)后血筑,SR發(fā)送方檢查下一一個(gè)可用于該幀的序號绘沉,如果序號位于發(fā)送窗口內(nèi),則發(fā)送數(shù)據(jù)幀;否則就像GBN-樣豺总,要么將數(shù)據(jù)緩存车伞,要么返回給上層之后再傳輸。
2.收到了一個(gè)ACK
如果收到ACK喻喳,加入該幀序號在窗口內(nèi)另玖,則SR發(fā)送方將那個(gè)被確認(rèn)的幀標(biāo)記為已接收。如果該幀序號是窗口的下界(最左邊第一個(gè)窗口對應(yīng)的序號)表伦,則窗口向前移動(dòng)到具有最小序號的未確認(rèn)幀處谦去。如果窗口移動(dòng)了并且有序號在窗口內(nèi)的未發(fā)送幀,則發(fā)送這些幀蹦哼。
3.超時(shí)事件
每個(gè)幀都有自己的定時(shí)器鳄哭,一個(gè)超時(shí)事件發(fā)生后只重傳一個(gè)幀。
SR接收方要做的事
來者不拒(窗口內(nèi)的幀)
SR接收方將確認(rèn)一個(gè)正確接收的幀而不管其是否按序纲熏。失序的幀將被緩存妆丘,并返回給發(fā)送方一個(gè)該幀的確認(rèn)幀[收誰確認(rèn)誰],直到所有幀(即序號更小的幀)皆被收到為止局劲,這時(shí)才可以將一批幀按序交付給上層飘痛,然后向前移動(dòng)滑動(dòng)窗口。
如果收到了窗口序號外(小于窗口下界)的幀容握,就返回一個(gè)ACK宣脉。其他情況,就忽略該幀剔氏。
窗口長度可以無限嗎?
對于SR塑猖,發(fā)送窗口最好等于接收窗口,
如果超過了谈跛,比如n=2時(shí)羊苟,窗口最大是2,如果窗口是3感憾,就無法區(qū)分重傳的是舊幀還是新幀(下圖所示)
例題
解答:
連續(xù)ARQ協(xié)議(GBN):發(fā)送方可以連續(xù)發(fā)送若干個(gè)數(shù)據(jù)幀蜡励,如果收到接收方的確認(rèn)幀則可以繼續(xù)發(fā)送。若某個(gè)幀出錯(cuò)阻桅,接收方只是簡單地丟棄該幀及其后所有的后續(xù)幀凉倚,發(fā)送方超時(shí)后需重傳該數(shù)據(jù)幀及其后續(xù)的所有數(shù)據(jù)幀。這里要注意嫂沉,連續(xù)ARQ協(xié)議中稽寒,接收方一般采用累積確認(rèn)的方式,即接收方對按序到達(dá)的最后一個(gè)分組發(fā)送確認(rèn)趟章;
選擇ARQ協(xié)議(SR):選擇重傳協(xié)議中杏糙,接收方逐個(gè)地確認(rèn)正確接收的分組慎王,不管接收到的分組是否有序,只要正確接收就發(fā)送選擇ACK分組進(jìn)行確認(rèn)宏侍。因此選擇重傳協(xié)議中的ACK.分組不再具有累積確認(rèn)的作用赖淤。這點(diǎn)要特別注意與GBN協(xié)議的區(qū)別。
0和2號幀兩個(gè)都需要重傳谅河,因此本題需要重傳的幀的數(shù)量num=2咱旱,選擇B