關(guān)于TCP/IP相關(guān)問題詳解

TCP/IP

什么是TCP/IP?

簡單來說,計算機和網(wǎng)絡(luò)設(shè)備實現(xiàn)通信鸠天,雙方必須約定好一個規(guī)則,這中規(guī)則統(tǒng)稱為協(xié)議帐姻。當(dāng)然TCP/IP是這種規(guī)則的統(tǒng)稱稠集。

TCP/IP 的分層管理奶段?

四個層次:應(yīng)用層、傳輸層剥纷、網(wǎng)絡(luò)層痹籍、數(shù)據(jù)鏈路層
分層的好處:如果互聯(lián)網(wǎng)是由一個協(xié)議統(tǒng)稱,那么當(dāng)一個地方需要更改設(shè)計晦鞋,需要將整體部分替換掉词裤。而分層只需把變動的層次替換掉即可。并且分層之后設(shè)計也會變得簡單鳖宾,處于應(yīng)用層的只考慮處理自己的任務(wù)即可吼砂。

向頁面請求數(shù)據(jù)HTTP發(fā)生了什么?

首先客戶端處于應(yīng)用層(HTTP)發(fā)送一個Web頁面的HTTP請求鼎文。
接著為了方便傳輸會在傳輸層TCP中把從應(yīng)用層收到的數(shù)據(jù)(HTTP請求報文) 進行分隔渔肩,并且在報文上打上標(biāo)記號、端口號轉(zhuǎn)發(fā)給網(wǎng)絡(luò)層拇惋。
在網(wǎng)路層(IP)周偎,增加作為通信目的地的MAC地址后轉(zhuǎn)發(fā)給鏈路層。
接受服務(wù)器端的鏈路層接收到數(shù)據(jù)后會按序?qū)酉蛏蠈影l(fā)送撑帖,一直到應(yīng)用層蓉坎。

TCP/IP四個層級的作用?

應(yīng)用層:決定了向用戶提供應(yīng)用服務(wù)的通信活動胡嘿。其中包含F(xiàn)TP傳輸協(xié)議蛉艾、DNS域名服務(wù)協(xié)議、HTTP衷敌。
傳輸層:主要提供處于網(wǎng)絡(luò)連接中的兩臺計算機中間的數(shù)據(jù)傳輸勿侯。發(fā)送數(shù)據(jù)包到計算機使用特定端口號的應(yīng)用程序。主要包含UDP和TCP
網(wǎng)絡(luò)層:主要處理在網(wǎng)絡(luò)上流動的數(shù)據(jù)包(網(wǎng)絡(luò)傳輸?shù)淖钚挝唬┙陕蕖H绻嬎銠C之間通過多臺計算機或者網(wǎng)絡(luò)進行傳輸助琐,網(wǎng)絡(luò)層就是在眾多選項之間選擇一條傳輸路線。
鏈路層:主要是處理鏈接網(wǎng)絡(luò)的硬件部分面氓,將二進制數(shù)據(jù)包與網(wǎng)絡(luò)信號相互交換兵钮。

TCP的三次握手?


簡單的來說舌界,發(fā)送端首先發(fā)送一個帶SYN(同步序號掘譬,請求建立連接,并在其序列號的字段進行序列號的初始值設(shè)定禀横,建立鏈接設(shè)為1)標(biāo)志的數(shù)據(jù)包給對方屁药。接受端收到后粥血,回傳一個帶有SYN/ACK(確認號是否有效柏锄,一般設(shè)置為1)標(biāo)志的數(shù)據(jù)包以示傳達確認的消息酿箭。最后發(fā)送端在回傳一個帶有ACK標(biāo)志的數(shù)據(jù)包。
詳細圖解:
PS:ACK趾娃、SYN和FIN這些大寫的單詞表示標(biāo)志位缭嫡,其值要么是1,要么是0抬闷;ack妇蛀、seq小寫的單詞表示序號。

確認ACK:占1位笤成,僅當(dāng)ACK = 1時评架,確認號字段才有效。ACK=0時炕泳,確認號無效纵诞。
確認號ack:占4個字節(jié),期待收到對方下一個報文段的第一個數(shù)據(jù)字節(jié)的序號培遵;序列號表示報文段攜帶數(shù)據(jù)的第一個字節(jié)的編號浙芙;而確認號指的是期望接收到下一個字節(jié)的編號;因此當(dāng)前報文段最后一個字節(jié)的編號+1即為確認號籽腕。
同步SYN:建立連接時用于同步序號嗡呼。當(dāng)SYN=1,ACK=0時表示:這是一個建立請求報文段皇耗,如果同意鏈接南窗,則在相應(yīng)報文中使得SYN=1,ACK=1郎楼。因此SYN=1表示這是一個連接請求或者接受報文請求矾瘾。SYN只有在TCP建立連接的時候才會被置位1,握完手后SYN被置位0
確認號seq:占4個字節(jié)箭启,用來標(biāo)記數(shù)據(jù)段的順序壕翩,TCP把連接中發(fā)送的所有數(shù)據(jù)字節(jié)都編上一個序號,第一個字節(jié)的編號由本地隨機產(chǎn)生傅寡;給字節(jié)編上序號后放妈,就給每一個報文段指派一個序號;序列號seq就是這個報文段中的第一個字節(jié)的數(shù)據(jù)編號荐操。
第一次握手:建立鏈接,客戶端發(fā)送SYN=1的數(shù)據(jù)包到服務(wù)器芜抒,進入SYN_SENT狀態(tài),等待服務(wù)器確認托启;
第二次握手:服務(wù)器接收到SYN=1的數(shù)據(jù)包后宅倒,必須確認用戶的SYN即ack=x+1,同時自己也會發(fā)出一個SYN(seq=y),即SYN+ACK包屯耸,此時服務(wù)器進入SYN_RECV狀態(tài)拐迁;
第三次握手:客戶端收到服務(wù)器的SYN+ACK包蹭劈,向服務(wù)器發(fā)送確認包ACK(ack=y+1),此時包發(fā)送完畢,客戶端和服務(wù)端進入ESTABLISHED(TCP連接成功~)狀態(tài)线召,完成三次握手铺韧。

四次握手?


終止FIN:用來釋放一個連接缓淹。FIN=1表示:此報文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢哈打,并要求釋放運輸連接
理解:
第一次握手:客戶端進程發(fā)出連接釋放報文,并且停止發(fā)送數(shù)據(jù)讯壶。釋放數(shù)據(jù)報文首部料仗,F(xiàn)IN=1,其序列號為seq=u(TCP規(guī)定伏蚊,F(xiàn)IN即使不攜帶數(shù)據(jù)罢维,也要消耗一個序號)。
第二次握手:服務(wù)器收到連接釋放報文丙挽,發(fā)出確認報文肺孵,ACK=1,ack=u+1颜阐,并且?guī)献约旱男蛄刑杝eq=v平窘,此時,服務(wù)端就進入了CLOSE-WAIT(關(guān)閉等待)狀態(tài)凳怨。TCP服務(wù)器通知高層的應(yīng)用進程瑰艘,客戶端向服務(wù)器的方向就釋放了,這時候處于半關(guān)閉狀態(tài)肤舞,即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了紫新,但是服務(wù)器若發(fā)送數(shù)據(jù),客戶端依然要接受李剖。這個狀態(tài)還要持續(xù)一段時間芒率,也就是整個CLOSE-WAIT狀態(tài)持續(xù)的時間。
之后
客戶端收到服務(wù)器端的確認請求后篙顺,此時偶芍,客戶端就進入到FIN-WAIT-2(終止等待2)狀態(tài),等待服務(wù)器發(fā)送鏈接釋放報文德玫,
第三次握手:服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢匪蟀,向客戶端發(fā)送關(guān)閉連接釋放報文,F(xiàn)IN=1宰僧,ack=u+1材彪,由于在半關(guān)閉狀態(tài),服務(wù)器很可能又發(fā)送了一些數(shù)據(jù),假定此時的序列號為seq=w段化,此時嘁捷,服務(wù)器就進入了LAST-ACK(最后確認)狀態(tài),等待客戶端的確認穗泵。
第四次握手:客戶端收到服務(wù)器的鏈接釋放后普气,必須發(fā)送確認ACK=1谜疤,ack=w+1, seq=u+1佃延,此時,客戶端就進入了TIME-WAIT(時間等待)狀態(tài)夷磕。注意此時TCP連接還沒有釋放履肃,必須經(jīng)過2MSL(最長報文段壽命)的時間后,當(dāng)客戶端撤銷相應(yīng)的TCB后坐桩,才進入CLOSED狀態(tài)尺棋。
最后
服務(wù)器只要收到了客戶端發(fā)出的確認,立即進入CLOSED狀態(tài)绵跷。同樣膘螟,撤銷TCB后,就結(jié)束了這次的TCP連接碾局【2校可以看到,服務(wù)器結(jié)束TCP連接的時間要比客戶端早一些净当。

為什么連接的時候是三次握手内斯,關(guān)閉的時候卻是四次握手?

因為服務(wù)端收到客戶端的SYN鏈接請求報文后像啼,可以直接發(fā)送SYN+ACK報文俘闯。其中ACK報文是用來應(yīng)答的,SYN報文是用來同步的忽冻。
關(guān)閉連接時真朗,當(dāng)服務(wù)端收到FIN報文時,很可能并不會立即關(guān)閉SOCKET僧诚,所以只能先回復(fù)一個ACK報文蜜猾,告訴Client端,"你發(fā)的FIN報文我收到了"振诬。只有等到我Server端所有的報文都發(fā)送完了蹭睡,我才能發(fā)送FIN報文,因此不能一起發(fā)送赶么。故需要四步握手肩豁。

為什么不能用兩次握手進行連接?

三次握手完成了兩個重要的功能,既要雙方做好發(fā)送數(shù)據(jù)的準備工作清钥,也要允許雙方就初始化序列號進行協(xié)商琼锋,進而需要發(fā)送和確認。
現(xiàn)在把三次握手改成僅需要兩次握手祟昭,死鎖是可能發(fā)生的缕坎。

DNS域名解析?

DNS(Domain Name System)服務(wù)是和 HTTP 協(xié)議一樣位于應(yīng)用層的協(xié)議篡悟。它提供域名到 IP 地址之間的解析服務(wù)谜叹。


當(dāng)輸入域名的時候,瀏覽器首先鏈接的是DNS服務(wù)器搬葬,獲取到該域名的IP地址后荷腊,瀏覽器再連接訪問該IP的服務(wù)器。

1急凰、 輸入域名的時候女仰,操作系統(tǒng)會檢查自己本地hosts文件中是否有這個網(wǎng)址映射關(guān)系,如果有抡锈,直接返回疾忍。
2、 如果hosts里沒有這個域名的映射床三,則會查找本地DNS解析器緩存一罩,是否有這個網(wǎng)址映射關(guān)系,如果有勿璃,直接返回擒抛,完成域名解析。
3补疑、 如果hosts與本地DNS解析器緩存都沒有相應(yīng)的網(wǎng)址映射關(guān)系歧沪,首先會找TCP/IP參數(shù)中設(shè)置的首選DNS服務(wù)器,在此我們叫它本地DNS服務(wù)器莲组,此服務(wù)器收到查詢時诊胞,如果要查詢的域名,包含在本地配置區(qū)域資源中锹杈,則返回解析記過給客戶端撵孤,完成域名解析,此解析具有權(quán)威性竭望。
4邪码、 如果要查詢域名,不由本地DNS服務(wù)器區(qū)域解析咬清,但該服務(wù)器已緩存了此網(wǎng)址映射關(guān)系闭专,則調(diào)用這個IP地址映射奴潘,完成域名解析,此解析不具有權(quán)威性影钉。
5画髓、 如果本地DNS服務(wù)器本地區(qū)域文件與緩存解析都失效,則根據(jù)本地DNS服務(wù)器的設(shè)置(是否設(shè)置轉(zhuǎn)發(fā)器)進行查詢平委,如果未用轉(zhuǎn)發(fā)模式奈虾,本地DNS就把請求發(fā)至13臺根DNS,根DNS服務(wù)器收到請求后會判斷這個域名(.com)是誰來授權(quán)管理廉赔,并會返回一個負責(zé)該頂級域名服務(wù)器的一個IP肉微。本地DNS服務(wù)器收到IP信息后,將會聯(lián)系負責(zé).com域的這臺服務(wù)器昂勉。這臺負責(zé).com域的服務(wù)器收到請求后浪册,如果自己無法解析扫腺,它就會找一個管理.com域的下一級DNS服務(wù)器地址(baidu.com)給本地DNS服務(wù)器岗照。當(dāng)本地DNS服務(wù)器收到這個地址后,就會找baidu.com域服務(wù)器笆环,重復(fù)上面的動作攒至,進行查詢,直至找到www.baidu.com主機躁劣。
6迫吐、 如果用的是轉(zhuǎn)發(fā)模式,此DNS服務(wù)器就會把請求轉(zhuǎn)發(fā)至上一級DNS服務(wù)器账忘,由上一級服務(wù)器進行解析志膀,上一級服務(wù)器如果不能解析,或找根DNS或把請求轉(zhuǎn)至上上級鳖擒,以此循環(huán)溉浙。不管是本地DNS服務(wù)器用是轉(zhuǎn)發(fā),還是根提示蒋荚,最后都是把結(jié)果返回給本地DNS服務(wù)器戳稽,由此DNS服務(wù)器再返回給客戶機。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末期升,一起剝皮案震驚了整個濱河市惊奇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌播赁,老刑警劉巖颂郎,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異容为,居然都是意外死亡乓序,警方通過查閱死者的電腦和手機诞吱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竭缝,“玉大人房维,你說我怎么就攤上這事√е剑” “怎么了咙俩?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長湿故。 經(jīng)常有香客問我阿趁,道長,這世上最難降的妖魔是什么坛猪? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任脖阵,我火速辦了婚禮,結(jié)果婚禮上墅茉,老公的妹妹穿的比我還像新娘命黔。我一直安慰自己,他們只是感情好就斤,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布悍募。 她就那樣靜靜地躺著,像睡著了一般洋机。 火紅的嫁衣襯著肌膚如雪坠宴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天绷旗,我揣著相機與錄音喜鼓,去河邊找鬼。 笑死衔肢,一個胖子當(dāng)著我的面吹牛庄岖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膀懈,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼顿锰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了启搂?” 一聲冷哼從身側(cè)響起硼控,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胳赌,沒想到半個月后牢撼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡疑苫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年熏版,在試婚紗的時候發(fā)現(xiàn)自己被綠了纷责。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡撼短,死狀恐怖再膳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曲横,我是刑警寧澤喂柒,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站禾嫉,受9級特大地震影響灾杰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熙参,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一艳吠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孽椰,春花似錦昭娩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鞋诗。三九已至膀捷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間削彬,已是汗流浹背全庸。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留融痛,地道東北人壶笼。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像雁刷,于是被迫代替她去往敵國和親覆劈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

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