網(wǎng)絡復習

1. TCP/IP協(xié)議


七層-四層

TCP/IP 協(xié)議分為四層:應用層项玛,傳輸層貌笨,網(wǎng)絡層,鏈路層襟沮。

TCP/IP

1.1 TCP協(xié)議

TCP協(xié)議是面向連接锥惋,保證高可靠性(數(shù)據(jù)無丟失昌腰,數(shù)據(jù)無失序,數(shù)據(jù)無錯誤膀跌,數(shù)據(jù)無重復到達)的傳輸層協(xié)議遭商。

首先在網(wǎng)絡傳輸中,一幀以太網(wǎng)數(shù)據(jù)包的格式如下:

數(shù)據(jù)包

TCP頭的格式:

TCP數(shù)據(jù)包

序號分為發(fā)送序號(Sequence Number)和接收序號(Acknowledgment Number)捅伤。

發(fā)送序號:用來標識TCP 源端向TCP目的端發(fā)送的數(shù)據(jù)字節(jié)流劫流,它表示在這個報文段中的第一個數(shù)據(jù)字節(jié)的順序號。每當建立一個新的連接時丛忆,SYN標志變?yōu)?祠汇,Sequence Number包含由這個主機選擇的該連接的初始序列號ISN(Initial Sequence Number)。

接收序號:包含TCP目的端所期望收到的下一個順序號蘸际。因此座哩,確認序號應該是上次已經(jīng)成功收到的順序號加1。只有當ACK的標志位1時確認序號才有效粮彤。TCP為應用層提供全雙工服務根穷,這意味數(shù)據(jù)能在兩個方向上獨立地進行傳輸。因此导坟,連接的每一端必須保持每個方向上的傳輸數(shù)據(jù)順序號屿良。

三次握手:在客戶端與服務器端建立TCP網(wǎng)絡連接時,客戶機首先發(fā)出一個SYN消息惫周,服務器端返回一個SYN+ACK應答表示收到了這個消息尘惧,最后客戶機再以ACK消息響應。

a.請求端(通常稱為客戶)發(fā)送一個SYN段指明客戶打算連接的服務器的端口递递,以及初始序號(ISN,在這個例子中為1415531521)喷橙。這個SYN段為報文段1。

b.服務器發(fā)回包含服務器的初始序號的SYN報文段(報文段2)作為應答登舞。同時贰逾,將確認序號設置為客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將占用一個序號

c.客戶必須將確認序號設置為服務器的ISN加1以對服務器的SYN報文段進行確認(報文段3)

三次握手

為什么要使用三次握手菠秒?

三次握手是為了防止已失效的連接請求報文段突然又傳送到了服務端疙剑,因而產(chǎn)生錯誤 。

client 發(fā)出的第一個連接請求報文段并沒有丟失践叠,而是在某個網(wǎng)絡結(jié)點長時間的滯留了言缤,以致延誤到連接釋放以后的某個時間才到達 server。本來這是一個早已失效的報文段禁灼。但 server 收到此失效的連接請求報文段后管挟,就誤認為是 client 再次發(fā)出的一個新的連接請求。于是就向 client 發(fā)出確認報文段弄捕,同意建立連接僻孝。假設不采用 “三次握手”拳芙,那么只要 server 發(fā)出確認,新的連接就建立了皮璧。由于現(xiàn)在 client 并沒有發(fā)出建立連接的請求,因此不會理睬 server 的確認分飞,也不會向 server 發(fā)送數(shù)據(jù)悴务。但 server 卻以為新的運輸連接已經(jīng)建立,并一直等待 client 發(fā)來數(shù)據(jù)譬猫。這樣讯檐,server 的很多資源就白白浪費掉了。采用 “三次握手” 的辦法可以防止上述現(xiàn)象發(fā)生染服。作者:HioHio鏈接:https://www.zhihu.com/question/24853633/answer/573627478來源:知乎著作權(quán)歸作者所有别洪。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處柳刮。?

四次揮手斷開連接:

a.現(xiàn)在的網(wǎng)絡通信都是基于socket實現(xiàn)的挖垛,當客戶端將自己的socket進行關閉時,內(nèi)核協(xié)議棧會向服務器自動發(fā)送一個FIN置位的包秉颗,請求斷開連接痢毒。我們稱首先發(fā)起斷開請求的一方稱為主動斷開方。

b.服務器端收到請客端的FIN斷開請求后蚕甥,內(nèi)核協(xié)議棧會立即發(fā)送一個ACK包作為應答哪替,表示已經(jīng)收到客戶端的請求

c.服務器運行一段時間后,關閉了自己的socket菇怀。這個時候內(nèi)核協(xié)議棧會向客戶端發(fā)送一個FIN置位的包凭舶,請求斷開連接

d.客戶端收到服務端發(fā)來的FIN斷開請求后,會發(fā)送一個ACK做出應答爱沟,表示已經(jīng)收到服務端的請求

TCP斷開連接

為什么使用四次揮手帅霜?

關閉連接時,服務器收到對方的FIN報文時钥顽,僅僅表示對方不再發(fā)送數(shù)據(jù)了但是還能接收數(shù)據(jù)义屏,而自己也未必全部數(shù)據(jù)都發(fā)送給對方了,所以己方可以立即關閉蜂大,也可以發(fā)送一些數(shù)據(jù)給對方后闽铐,再發(fā)送FIN報文給對方來表示同意現(xiàn)在關閉連接,因此奶浦,己方ACK和FIN一般都會分開發(fā)送兄墅,從而導致多了一次。?

滑動窗口協(xié)議(用于流量控制和傳輸效率的提升):

TCP協(xié)議在工作時澳叉,如果發(fā)送端的TCP協(xié)議軟件每傳輸一個數(shù)據(jù)分組后隙咸,必須等待接收端的確認才能夠發(fā)送下一個分組沐悦,由于網(wǎng)絡傳輸?shù)臅r延,將有大量時間被用于等待確認五督,導致傳輸效率低下藏否。為此TCP在進行數(shù)據(jù)傳輸時使用了滑動窗口機制

TCP滑動窗口用來暫存兩臺計算機間要傳送的數(shù)據(jù)分組充包。每臺運行TCP協(xié)議的計算機有兩個滑動窗口:一個用于數(shù)據(jù)發(fā)送副签,另一個用于數(shù)據(jù)接收。發(fā)送端待發(fā)數(shù)據(jù)分組在緩沖區(qū)排隊等待送出基矮。被滑動窗口框入的分組淆储,是可以在未收到接收確認的情況下多送出的部分〖医剑滑動窗口左端標志X的分組本砰,是已經(jīng)被接收端確認收到的分組。隨著新的確認到來钢悲,窗口不斷向右滑動点额。

滑動窗口

文章參考:blog.chinaunix.net/uid-26833883-id-3627644.html

TCP協(xié)議有兩個比較重要的控制算法,一個是流量控制譬巫,另一個就是阻塞控制咖楣。

TCP協(xié)議通過滑動窗口來進行流量控制,它是控制發(fā)送方的發(fā)送速度從而使接受者來得及接收并處理芦昔。而擁塞控制是作用于網(wǎng)絡诱贿,它是防止過多的包被發(fā)送到網(wǎng)絡中,避免出現(xiàn)網(wǎng)絡負載過大咕缎,網(wǎng)絡擁塞的情況珠十。

TCP 利用滑動窗口實現(xiàn)流量控制。流量控制是為了控制發(fā)送方發(fā)送速率凭豪,保證接收方來得及接收焙蹭。接收方發(fā)送的確認報文中的窗口字段可以用來控制發(fā)送方窗口大小,從而影響發(fā)送方的發(fā)送速率嫂伞。將窗口字段設置為 0孔厉,則發(fā)送方不能發(fā)送數(shù)據(jù)。

擁塞控制

在某段時間帖努,若對網(wǎng)絡中某一資源的需求超過了該資源所能提供的可用部分撰豺,網(wǎng)絡的性能就要變壞。這種情況就叫擁塞拼余。擁塞控制就是為了防止過多的數(shù)據(jù)注入到網(wǎng)絡中污桦,這樣就可以使網(wǎng)絡中的路由器或鏈路不致過載。擁塞控制所要做的都有一個前提匙监,就是網(wǎng)絡能夠承受現(xiàn)有的網(wǎng)絡負荷凡橱。擁塞控制是一個全局性的過程小作,涉及到所有的主機,所有的路由器稼钩,以及與降低網(wǎng)絡傳輸性能有關的所有因素顾稀。相反镣陕,流量控制往往是點對點通信量的控制包竹,是個端到端的問題。流量控制所要做到的就是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率吼野,以便使接收端來得及接收绍载。為了進行擁塞控制,TCP 發(fā)送方要維持一個 擁塞窗口(cwnd) 的狀態(tài)變量滔蝉。擁塞控制窗口的大小取決于網(wǎng)絡的擁塞程度击儡,并且動態(tài)變化。發(fā)送方讓自己的發(fā)送窗口取為擁塞窗口和接收方的接受窗口中較小的一個蝠引。

TCP的擁塞控制采用了四種算法阳谍,即 慢開始 、 擁塞避免 螃概、快重傳 和 快恢復矫夯。


擁塞算法


快重傳與快恢復

1.2 TCP如何保證可靠性

(1)超時重傳機制:TCP發(fā)送端在發(fā)出一個報文后,會啟動一個定時器吊洼,用來等待目的端確認這個報文训貌。若未能及時收到這個報文確認,TCP發(fā)送端會重新發(fā)送這個報文冒窍。

(2)通過校驗和進行錯誤檢測:校驗和覆蓋了整個的TCP報文段:TCP首部和TCP數(shù)據(jù)递沪。這是一個強制性的字段,一定是由發(fā)端計算和存儲综液,并由收端進行驗證款慨。

(3)流量控制:通過滑動窗口機制確保發(fā)送方發(fā)送的數(shù)據(jù)不會超過接收方的緩沖區(qū)。

(接收方會通過確認報文告知發(fā)送方自己窗口的大忻ā)檩奠。

(4)TCP棄重:TCP報文段作為IP數(shù)據(jù)報來傳輸,而IP數(shù)據(jù)報有可能重復附帽,因此TCP能夠丟棄重復數(shù)據(jù)(對于序號小于接收方的期望序號的報文埠戳,直接丟棄)。

(5)重排序:TCP報文段作為IP數(shù)據(jù)報來傳輸士葫,而IP數(shù)據(jù)報有可能失序乞而,因此TCP報文段的到達也可能會失序。如果必要慢显,TCP將對收到的數(shù)據(jù)進行重新排序爪模,將收到的數(shù)據(jù)以正確的順序交給應用層欠啤。(TCP通過緩沖區(qū)和報文序號進行亂序重組

(6)擁塞控制:當網(wǎng)絡擁塞時,減少數(shù)據(jù)的發(fā)送

參考資料

1.?計算機網(wǎng)絡常見面試題

2.?TCP擁塞控制算法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屋灌,一起剝皮案震驚了整個濱河市洁段,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌共郭,老刑警劉巖祠丝,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異除嘹,居然都是意外死亡写半,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門尉咕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叠蝇,“玉大人,你說我怎么就攤上這事年缎』诖罚” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵单芜,是天一觀的道長蜕该。 經(jīng)常有香客問我,道長洲鸠,這世上最難降的妖魔是什么堂淡? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮扒腕,結(jié)果婚禮上淤齐,老公的妹妹穿的比我還像新娘。我一直安慰自己袜匿,他們只是感情好更啄,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著居灯,像睡著了一般祭务。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怪嫌,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天义锥,我揣著相機與錄音,去河邊找鬼岩灭。 笑死拌倍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柱恤,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼数初,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了梗顺?” 一聲冷哼從身側(cè)響起泡孩,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寺谤,沒想到半個月后仑鸥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡变屁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年眼俊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粟关。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡泵琳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出誊役,到底是詐尸還是另有隱情,我是刑警寧澤谷市,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布蛔垢,位于F島的核電站,受9級特大地震影響迫悠,放射性物質(zhì)發(fā)生泄漏鹏漆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一创泄、第九天 我趴在偏房一處隱蔽的房頂上張望艺玲。 院中可真熱鬧,春花似錦鞠抑、人聲如沸饭聚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秒梳。三九已至,卻和暖如春箕速,著一層夾襖步出監(jiān)牢的瞬間酪碘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工盐茎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留兴垦,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像探越,于是被迫代替她去往敵國和親狡赐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 博主最近在復習HTTP扶关,之前用書主要是《計算機網(wǎng)絡》謝希仁版本阴汇,最近結(jié)合網(wǎng)上博客,進行復習和提綱式的總結(jié)节槐。 一搀庶、概...
    stoneyang94閱讀 4,146評論 1 8
  • 計算機網(wǎng)絡復習知識點 基本知識點 1.OSI參考模型(七層體系結(jié)構(gòu)) 物理層 - 數(shù)據(jù)鏈路層 - 網(wǎng)絡層 - 運輸...
    01_小小魚_01閱讀 534評論 0 0
  • 運輸層 運輸層向它上面的應用層提供通信服務,兩個主機進行通信就是兩個主機中的應用進程相互通信铜异。通信的真正端點并不是...
    IronHan閱讀 401評論 0 1
  • 12.www主頁傳輸過程(步驟) (第六章 6.4) 萬維網(wǎng) WWW (World Wide Web) 并非某種特...
    constantine丶閱讀 889評論 0 2
  • OSI七層模型: 應用層:為應用程序提供服務并規(guī)定應用程序通信相關得細節(jié)哥倔。包括文件傳輸,電子郵件揍庄,遠程登錄等咆蒿。 表...
    qming_c閱讀 953評論 0 1