計(jì)網(wǎng)學(xué)習(xí)筆記(6)- TCP

TCP 報(bào)文段首部格式

  • TCP 連接中傳送的數(shù)據(jù)流中的每一個(gè)字節(jié)都編上一個(gè)序號(hào)匹中。序號(hào)字段的值則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)忆某。

  • 確認(rèn)號(hào)字段——占 4 字節(jié)雷则,是期望收到對(duì)方的下一個(gè)報(bào)文段的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)颊咬。

  • 確認(rèn) ACK —— 只有當(dāng) ACK = 1 時(shí)確認(rèn)號(hào)字段才有效死嗦。當(dāng) ACK = 0 時(shí)趋距,確認(rèn)號(hào)無(wú)效粒氧。

  • 同步 SYN —— 同步 SYN = 1 表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文越除。

  • 終止 FIN —— 用來(lái)釋放一個(gè)連接。FIN = 1 表明此報(bào)文段的發(fā)送端的數(shù)據(jù)已發(fā)送完畢外盯,并要求釋放運(yùn)輸連接摘盆。

  • 窗口字段 —— 占 2 字節(jié),用來(lái)讓對(duì)方設(shè)置發(fā)送窗口的依據(jù)饱苟,單位為字節(jié)孩擂。

  • 檢驗(yàn)和字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分。在計(jì)算檢驗(yàn)和時(shí)箱熬,要在 TCP 報(bào)文段的前面加上 12 字節(jié)的偽首部类垦。

  • 選項(xiàng)字段 —— 長(zhǎng)度可變狈邑。TCP 最初只規(guī)定了一種選項(xiàng),即最大報(bào)文段長(zhǎng)度 MSS蚤认。MSS 告訴對(duì)方 TCP:“我的緩存所能接收的報(bào)文段的數(shù)據(jù)字段的最大長(zhǎng)度是 MSS 個(gè)字節(jié)米苹。”

  • 填充字段 —— 這是為了使整個(gè)首部長(zhǎng)度是 4 字節(jié)的整數(shù)倍砰琢。

MSS (Maximum Segment Size)是 TCP 報(bào)文段中的數(shù)據(jù)字段的最大長(zhǎng)度蘸嘶。數(shù)據(jù)字段加上 TCP 首部才等于整個(gè)的 TCP 報(bào)文段。所以陪汽,MSS是“TCP 報(bào)文段長(zhǎng)度減去 TCP 首部長(zhǎng)度”训唱。

MSS 與接收窗口值沒(méi)有關(guān)系。若選擇較小的 MSS 長(zhǎng)度挚冤,網(wǎng)絡(luò)的利用率就降低况增。

如何保證可靠性?

停止等待協(xié)議+自動(dòng)重傳請(qǐng)求 ARQ(利用率低)
  • 停止等待”就是每發(fā)送完一個(gè)分組就停止發(fā)送训挡,等待對(duì)方的確認(rèn)巡通。在收到確認(rèn)后再發(fā)送下一個(gè)分組。

  • 自動(dòng)重傳請(qǐng)求 ARQ (Automatic Repeat reQuest)舍哄。意思是重傳的請(qǐng)求是自動(dòng)進(jìn)行的宴凉,接收方不需要請(qǐng)求發(fā)送方重傳某個(gè)出錯(cuò)的分組,即超時(shí)重傳表悬。

流水線傳輸+連續(xù) ARQ 協(xié)議(要改進(jìn))
  • 流水線傳輸就是發(fā)送方可連續(xù)發(fā)送多個(gè)分組弥锄,不必每發(fā)完一個(gè)分組就停頓下來(lái)等待對(duì)方的確認(rèn)。這樣可使信道上一直有數(shù)據(jù)不間斷地傳送蟆沫。
  • 發(fā)送方維持的發(fā)送窗口籽暇,它的意義是:位于發(fā)送窗口內(nèi)的分組都可連續(xù)發(fā)送出去,而不需要等待對(duì)方的確認(rèn)饭庞。這樣戒悠,信道利用率就提高了。連續(xù) ARQ 協(xié)議規(guī)定舟山,發(fā)送方每收到一個(gè)確認(rèn)绸狐,就把發(fā)送窗口向前滑動(dòng)一個(gè)分組的位置。
累計(jì)確認(rèn)+Go-back-N(回退 N)(要改進(jìn))
  • 接收方一般采用累積確認(rèn)的方式累盗。即不必對(duì)收到的分組逐個(gè)發(fā)送確認(rèn)寒矿,而是對(duì)按序到達(dá)的最后一個(gè)分組發(fā)送確認(rèn),這樣就表示:到這個(gè)分組為止的所有分組都已正確收到了若债。

優(yōu)點(diǎn):容易實(shí)現(xiàn)符相,即使確認(rèn)丟失也不必重傳。

缺點(diǎn):不能向發(fā)送方反映出接收方已經(jīng)正確收到的所有分組的信息蠢琳。

  • 如果發(fā)送方發(fā)送了前 5 個(gè)分組啊终,而中間的第 3 個(gè)分組丟失了镜豹。這時(shí)接收方只能對(duì)前兩個(gè)分組發(fā)出確認(rèn)。發(fā)送方無(wú)法知道后面三個(gè)分組的下落蓝牲,而只好把后面的三個(gè)分組都再重傳一次逛艰。這就叫做 Go-back-N(回退 N),表示需要再退回來(lái)重傳已發(fā)送過(guò)的 N 個(gè)分組搞旭。

滑動(dòng)窗口

TCP 的滑動(dòng)窗口是以字節(jié)為單位的散怖。現(xiàn)假定 A 收到了 B 發(fā)來(lái)的確認(rèn)報(bào)文段,其中窗口是 20 字節(jié)肄渗,而確認(rèn)號(hào)是 31(這表明 B 期望收到的下一個(gè)序號(hào)是 31镇眷,而序號(hào) 30 為止的數(shù)據(jù)已經(jīng)收到了)。根據(jù)這兩個(gè)數(shù)據(jù)翎嫡,A 就構(gòu)造出自己的發(fā)送窗口欠动。

發(fā)送緩存

接受緩存
  • 發(fā)送緩存用來(lái)暫時(shí)存放:
    (1)發(fā)送應(yīng)用程序傳送給發(fā)送方 TCP 準(zhǔn)備發(fā)送的數(shù)據(jù);
    (2)TCP 已發(fā)送出但尚未收到確認(rèn)的數(shù)據(jù)惑申。

  • 接收緩存用來(lái)暫時(shí)存放:
    (1)按序到達(dá)的具伍、但尚未被接收應(yīng)用程序讀取的數(shù)據(jù);
    (2)不按序到達(dá)的數(shù)據(jù)圈驼。

需要強(qiáng)調(diào)三點(diǎn)
  • A 的發(fā)送窗口并不總是和 B 的接收窗口一樣大(因?yàn)橛幸欢ǖ臅r(shí)間滯后)人芽。
  • TCP 標(biāo)準(zhǔn)沒(méi)有規(guī)定對(duì)不按序到達(dá)的數(shù)據(jù)應(yīng)如何處理。通常是先臨時(shí)存放在接收窗口中绩脆,等到字節(jié)流中所缺少的字節(jié)收到后萤厅,再按序交付上層的應(yīng)用進(jìn)程。
  • TCP 要求接收方必須有累積確認(rèn)的功能靴迫,這樣可以減小傳輸開(kāi)銷惕味。
接收方發(fā)送確認(rèn)

接收方可以在合適的時(shí)候發(fā)送確認(rèn),也可以在自己有數(shù)據(jù)要發(fā)送時(shí)把確認(rèn)信息順便捎帶上玉锌。注意:

  • 接收方不應(yīng)過(guò)分推遲發(fā)送確認(rèn)名挥,否則會(huì)導(dǎo)致發(fā)送方不必要的重傳,這反而浪費(fèi)了網(wǎng)絡(luò)的資源主守。

  • 捎帶確認(rèn)實(shí)際上并不經(jīng)常發(fā)生禀倔,因?yàn)榇蠖鄶?shù)應(yīng)用程序很少同時(shí)在兩個(gè)方向上發(fā)送數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末丸逸,一起剝皮案震驚了整個(gè)濱河市蹋艺,隨后出現(xiàn)的幾起案子剃袍,更是在濱河造成了極大的恐慌黄刚,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件民效,死亡現(xiàn)場(chǎng)離奇詭異憔维,居然都是意外死亡涛救,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門业扒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)检吆,“玉大人,你說(shuō)我怎么就攤上這事程储〔渑妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵章鲤,是天一觀的道長(zhǎng)摊灭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)败徊,這世上最難降的妖魔是什么帚呼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮皱蹦,結(jié)果婚禮上煤杀,老公的妹妹穿的比我還像新娘。我一直安慰自己沪哺,他們只是感情好沈自,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著辜妓,像睡著了一般酥泛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫌拣,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天柔袁,我揣著相機(jī)與錄音,去河邊找鬼异逐。 笑死捶索,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灰瞻。 我是一名探鬼主播腥例,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酝润!你這毒婦竟也來(lái)了燎竖?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤要销,失蹤者是張志新(化名)和其女友劉穎构回,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纤掸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年脐供,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片借跪。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡政己,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掏愁,到底是詐尸還是另有隱情歇由,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布果港,位于F島的核電站印蓖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏京腥。R本人自食惡果不足惜赦肃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望公浪。 院中可真熱鬧他宛,春花似錦、人聲如沸欠气。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)预柒。三九已至队塘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宜鸯,已是汗流浹背憔古。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淋袖,地道東北人鸿市。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像即碗,于是被迫代替她去往敵國(guó)和親焰情。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351