內(nèi)容根據(jù)哈工大計(jì)算機(jī)網(wǎng)絡(luò)課程總結(jié)整理
tcp的序列號和ack
序列號是用segment的首字節(jié)的編號作為segment的編號,舉個例子淳地,一個1KB的報(bào)文分成了兩個segment,假如第一個segment的編號是1蓬抄,第二個的編號就是501夯到,而不是1、2路幸。收到第一個segment后简肴,回復(fù)ack_501,表示希望接收的下一個是501砰识。
tcp同樣使用流水線機(jī)制辫狼,不過它采用的滑動窗口協(xié)議膨处,同時有GBN和SR的特點(diǎn)砂竖。
- 單一定時器
- 累積確認(rèn)
- 超時只重發(fā)一個分組
- 亂序到達(dá)的分組如何處理未做規(guī)定乎澄,由tcp的實(shí)現(xiàn)者自行決定
發(fā)送方發(fā)送一系列分組置济,然后為當(dāng)前窗口中第一個未ack的分組計(jì)時。接收到ack后移動,然后再為當(dāng)前的第一個設(shè)置計(jì)時器查库。超時后樊销,重發(fā)第一個围苫,然后重啟計(jì)時器。這么看起來是比較像gbn的拧揽,但是它也有接收方窗口淤袜,用來緩存分組,這點(diǎn)來看又比較像sr积蔚。緩存是為了避免數(shù)據(jù)處理不夠快而被丟掉尽爆,而不是專門設(shè)計(jì)來緩存亂序到達(dá)的分組的,對于亂序到達(dá)的分組是緩存還是丟掉漱贱,tcp規(guī)范中并未明確饱亿,由實(shí)現(xiàn)者自行決定彪笼。
發(fā)送方事件
接收方事件
解釋一下接收方事件:
事件1:收到按序達(dá)到的分組n,并且到n-1的分組都ack了泵肄。
操作:延遲ack淑翼,等下一個分組到達(dá)一起ack玄括,最多延遲500ms遭京。
事件2:收到按序達(dá)到的分組n哪雕,n前面有未ack的(事件1中延遲等它的)。
操作:立即發(fā)送ack
事件3:收到亂序到達(dá)的分組
操作:重發(fā)ack告知當(dāng)前希望收到的
事件4:收到分組將空缺位填滿(暗示緩存了亂序到達(dá)的分組)
操作:立即ack
快速重傳機(jī)制:
tcp是單個計(jì)時器利虫,但是又只重傳第一個分組列吼∮谋溃考慮這種情況:一次性發(fā)了10個分組。其中分組8丟了寞钥。先是為1設(shè)計(jì)時器慌申,確認(rèn)1收到后再為2設(shè),2收到后再為3設(shè)理郑,等真正觸發(fā)8的超時的時候蹄溉,時間已經(jīng)過去很久了。所以tcp的做法是收到3個對同一分組的ack就立即重傳您炉。(至于為啥是3個我不知道)