二手書哪個(gè)網(wǎng)站做的好seo查詢 站長(zhǎng)之家
開(kāi)篇提示
? ? ? ? 本篇適合于了解基礎(chǔ)知識(shí),進(jìn)行擴(kuò)展提高的使用,附帶考研習(xí)題以及解析。
TCP序號(hào)和確認(rèn)序號(hào)的區(qū)別
????????TCP首部中有序號(hào)和確認(rèn)序號(hào),他們都是4個(gè)字節(jié)(4B),且在數(shù)據(jù)傳輸中有很重要的意義,那么兩者的含義和區(qū)別是什么呢?我們先看他們的定義。
????????序號(hào)指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào),確認(rèn)號(hào)是期望收到對(duì)方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)。在進(jìn)行“三次握手”和數(shù)據(jù)傳輸?shù)臅r(shí)候,序號(hào)一般用seq表示,確認(rèn)號(hào)一般用ack表示。
? ? ? ? 接下來(lái),我們就從建立TCP連接,到數(shù)據(jù)傳輸,再到斷開(kāi)連接整個(gè)過(guò)程分析客戶機(jī)和服務(wù)器中的TCP序號(hào)和確認(rèn)號(hào)的變化。
? ? ? ? 我們首先要清楚,不論是客戶機(jī)還是服務(wù)器,他們一般都有序號(hào)和確認(rèn)號(hào),序號(hào)是描述自己的情況,確認(rèn)號(hào)是描述對(duì)方的情況。序號(hào)x代表著“我在傳遞這次報(bào)文的時(shí)候,我的報(bào)文起始序號(hào)是x”,確認(rèn)號(hào)y代表著“在你下次傳遞報(bào)文的時(shí)候,我希望你從你的序號(hào)y開(kāi)始發(fā)送”
? ? ? ? 所以,在一個(gè)TCP報(bào)文中,序號(hào)和確認(rèn)號(hào)沒(méi)有任何關(guān)系。
? ? ? ? 好的,現(xiàn)在我們來(lái)看建立TCP連接的過(guò)程。
? ? ? ? 下面是建立TCP連接的示意圖:
? ? ? ? 建立連接前,客戶機(jī)和服務(wù)器都會(huì)獲得初始序號(hào),可見(jiàn),A獲得的初始序號(hào)為x,B獲得的初始序號(hào)為y,我們發(fā)現(xiàn),在未進(jìn)行數(shù)據(jù)傳輸,只是進(jìn)行建立連接的確立的情況下,ack增加了,事實(shí)上,確認(rèn)建立連接SYN和斷開(kāi)連接FIN都會(huì)占用一個(gè)字節(jié),我們只需要注意seq代表自身情況,ack代表對(duì)方情況即可。
? ? ? ? 我們舉一個(gè)中間傳輸信息的例子。
????????如果A序號(hào)seq是301(自己這條內(nèi)容會(huì)從301號(hào)開(kāi)始發(fā)送),傳輸100B的有效荷載(實(shí)際就是數(shù)據(jù)),確認(rèn)號(hào)ack是800(正常情況下,希望B從B的800開(kāi)始發(fā)送)
? ? ? ? 如果B正常收到,他發(fā)送的序號(hào)seq會(huì)是A的ack確認(rèn)號(hào),也就是800,它的確認(rèn)號(hào)是A下次發(fā)送信息的開(kāi)始,也就是301+100 = 401 ,他會(huì)希望A下次從A的序號(hào)401開(kāi)始,如果B攜帶了100B的數(shù)據(jù)發(fā)送給了A,此時(shí),A的序號(hào)是B的序號(hào)401,A的確認(rèn)號(hào)是希望下次B從哪里開(kāi)始發(fā),800+100=900
? ? ? ? 特殊情況一:如果B未攜帶數(shù)據(jù)只確認(rèn),則A的確認(rèn)號(hào)仍為800
? ? ? ? 特殊情況二:現(xiàn)A的序號(hào)為401,確認(rèn)號(hào)為900,向B發(fā)送了120B的數(shù)據(jù),但是,數(shù)據(jù)丟失
? ? ? ? B的序號(hào)為A的確認(rèn)號(hào)(A希望他這么做),但由于B尚未收到A的信息,他會(huì)仍然希望A從401號(hào)發(fā)送數(shù)據(jù),而不是521號(hào)
? ? ? ? 在斷開(kāi)連接時(shí),會(huì)進(jìn)行四次揮手,下面是斷開(kāi)TCP連接的示意圖:
與序號(hào)和序列號(hào)相關(guān)的題目一般是給出seq和ack,繼續(xù)推在傳輸數(shù)據(jù)后的seq和ack,只需要記住兩者的含義即可。
? ? ? ? 下面,我們來(lái)幾道例題練練手。
習(xí)題一
1.SYN與FIN都會(huì)使ack+1
本題選A,C,首先A發(fā)送自身的序號(hào)X,B發(fā)送自身的序號(hào)Y,ack確認(rèn)時(shí)確認(rèn)對(duì)方的下次開(kāi)始的序號(hào)。
2.seq與ack的關(guān)系
A的序號(hào)是200,確認(rèn)字號(hào)201,B的序號(hào)一定是A的確認(rèn)號(hào),也就是201,B的確認(rèn)號(hào)是A下次開(kāi)始發(fā)送的開(kāi)頭,也就是200+2
3.seq和ack的關(guān)系
4.特殊情況
報(bào)文傳輸時(shí)間的計(jì)算
建立連接時(shí)間需要1.5個(gè)RTT
????????對(duì)于服務(wù)器B,最長(zhǎng)斷開(kāi)時(shí)間需要等待兩個(gè)RTT+數(shù)據(jù)傳輸時(shí)間,最短時(shí)間是1.5個(gè)RTT,實(shí)際上,當(dāng)A發(fā)送FIN后,B可以直接發(fā)送FIN,等待A確認(rèn)后,即可直接關(guān)閉
????????對(duì)于客戶機(jī)A,它最長(zhǎng)時(shí)間要1個(gè)RTT+數(shù)據(jù)傳送時(shí)間+2MSL,MSL是最大報(bào)文段壽命,這是防止數(shù)據(jù)傳送不到而引發(fā)問(wèn)題,最短時(shí)間是1RTT+2MSL。
現(xiàn)在,我們來(lái)查看在TCP進(jìn)行擁塞控制下數(shù)據(jù)傳輸所需要的時(shí)間。
? ? ? ? 我們先提供一些關(guān)于擁塞控制的知識(shí)點(diǎn)。
1.MSS:最大段長(zhǎng),初始傳輸數(shù)據(jù)的速度為1MSS,不論是傳輸多少B,可以理解為是擁塞控制傳輸?shù)幕締挝?/p>
2.cwnd:當(dāng)前的擁塞窗口,大小是多少倍的MSS來(lái)計(jì)算
3.ssthresh:門限,慢窗口階段與擁塞避免階段的分界點(diǎn),當(dāng)cwnd<ssthresh時(shí),慢開(kāi)始,當(dāng)cwnd>ssthresh,擁塞避免
4.慢開(kāi)始(啟動(dòng))階段:每次收到確認(rèn)后,cwnd*2,如果慢開(kāi)始cwnd*2后超過(guò)門限,會(huì)使得cwnd=ssthresh
5.擁塞避免階段:每次收到確認(rèn)后,cwnd+1
6.超時(shí):時(shí)間過(guò)長(zhǎng)后,超時(shí),cwnd=1MSS,ssthresh變?yōu)槌瑫r(shí)時(shí)cwnd的一半
7.快恢復(fù):連續(xù)收到3個(gè)多余的ACK(重復(fù)確認(rèn)),ssthresh變?yōu)閏wnd的一半,且cwnd = ssthresh,然后開(kāi)始擁塞避免
8.如果同時(shí)出現(xiàn)接收窗口和擁塞窗口,實(shí)際窗口時(shí)兩者中較小的一個(gè)
? ? ? ? 現(xiàn)在,我們給出幾個(gè)例題。
例題二
1.斷開(kāi)TCP連接時(shí)間
最短時(shí)間,C需要1RTT+2MSL,S需要1.5RTT,情況是當(dāng)C請(qǐng)求斷開(kāi)時(shí)S也準(zhǔn)備斷開(kāi),D
2.慢啟動(dòng)和擁塞避免狀態(tài)的選擇
慢啟動(dòng)增長(zhǎng)迅速,最短時(shí)間用慢啟動(dòng),最長(zhǎng)時(shí)間用擁塞避免,本題目中由于是最長(zhǎng)時(shí)間,擁塞避免,需要24個(gè)RTT,D
3.接收窗口和擁塞窗口
兩者都會(huì)影響cwnd,是兩者中更小的那個(gè)決定的。接收緩存實(shí)際就是接收窗口的大小,他會(huì)隨著存入數(shù)據(jù)而逐漸變小。在本題中,要求最小時(shí)間,慢啟動(dòng)狀態(tài),經(jīng)過(guò)3RTT變?yōu)?KB,過(guò)程是1MSS
-2MSS-4MSS,更小的是擁塞窗口,因此,本題中接收窗口不會(huì)影響cwnd,B
慢啟動(dòng)門限為2KB,擁塞窗口為4KB,因此,在下個(gè)RTT中,擁塞窗口變?yōu)?KB,但是接收窗口是2KB,因此,最多發(fā)送2KB的數(shù)據(jù)
4.實(shí)例