OSI七层协议与TCP连接
概述
為了追求效率,我們寫代碼,不可能去關(guān)注底層知識,但往往到出了問題,或者性能調(diào)優(yōu)。我們就會速手無策,仔細為自己查缺補漏,總結(jié)知識點。
網(wǎng)絡(luò)協(xié)議
互聯(lián)網(wǎng)的本質(zhì)就是一系列的網(wǎng)絡(luò)協(xié)議,讓不同計算機能夠互相通信。這個協(xié)議就叫做OSI協(xié)議,根據(jù)不同的功能和分工,人為劃分七層,當(dāng)然你也可以劃分五層,4層。實際上這些都是不存在的,只是為了讓人更好理解這些都是做什么用的。
物理層:網(wǎng)絡(luò)通信的數(shù)據(jù)傳輸介質(zhì),連接不同結(jié)點的電纜與設(shè)備構(gòu)成。這些都是專業(yè)的說法,其實說白了就是雙絞線(網(wǎng)線),光纜這些東西,當(dāng)然也包括無線電波。傳的是比特流,就是0101101。。。這些電信號。
數(shù)據(jù)鏈路層:物理地址尋址、數(shù)據(jù)的成幀、流量控制、數(shù)據(jù)的檢錯、重發(fā),負責(zé)物理層面的互聯(lián),通信傳輸。接收到比特流,還得人為的分組,讓比特流變得有意義的,這就是數(shù)據(jù)鏈路層干得活。它以太網(wǎng)協(xié)議將電信號分組,一組電信號稱之為一個數(shù)據(jù)包(幀)。然后控制幀在物理信道上傳輸包括糾錯,調(diào)節(jié)發(fā)送速率(防止高速的發(fā)送方把低速接收方淹沒,需要某種流量控制機制使發(fā)送方得知接收方當(dāng)前還有多少空間)確保數(shù)據(jù)的可靠性,每一幀都含有報頭(head)和數(shù)據(jù)(data),報頭包含發(fā)送者(網(wǎng)卡地址),接收者(網(wǎng)卡地址),數(shù)據(jù)里就是數(shù)據(jù)包的具體內(nèi)容。通過數(shù)據(jù)鏈路層,我們就可以建立局域網(wǎng),并讓同一局域網(wǎng)絡(luò)的兩臺計算機通信,數(shù)據(jù)鏈路層就像是一個社區(qū)郵差,他認識社區(qū)的每戶人家,社區(qū)中的每個人都可以將信(幀)交給他,讓他送給同一社區(qū)的另一戶人家。
網(wǎng)絡(luò)層:數(shù)據(jù)在節(jié)點之間創(chuàng)建邏輯鏈路,通過路由選擇算法,按一定的原則在多個節(jié)點的通信子網(wǎng)中選擇一條到達目的節(jié)點的最佳路徑過程,說白就是講數(shù)據(jù)傳輸?shù)侥繕?biāo)地址。現(xiàn)在我要找另一社區(qū)的老王,我寫了一封信,交給郵差,郵差并不認識另一個社區(qū)的人,就把信交給郵局處理,郵局根據(jù)上面的地址(IP)就能查到對應(yīng)的地址描述,然后交給另一個社區(qū)的郵局。這封信可能要多個郵局的轉(zhuǎn)發(fā),才能到達老王手里。
傳輸層:負責(zé)建立和斷開通信連接(數(shù)據(jù)流動的邏輯通路),記憶數(shù)據(jù)的分隔等數(shù)據(jù)傳輸相關(guān)的管理。當(dāng)發(fā)送大量數(shù)據(jù)時,時間有點長,網(wǎng)絡(luò)可能會發(fā)生中斷。怎么保證大量數(shù)據(jù)的準(zhǔn)確性,如果我發(fā)送的這個文件數(shù)據(jù)包可能有一萬個包,發(fā)送一個,就告訴一次,我收到了,丟了就再發(fā)一次,保證我都能準(zhǔn)確完整接收到數(shù)據(jù)包,這就是TCP協(xié)議(TCP協(xié)議是會綁定IP和端口的協(xié)議)。與之對應(yīng)的還有一個UDP協(xié)議,適用于發(fā)送少量數(shù)據(jù),發(fā)出去就拉倒,不管你接沒接收,在多人游戲中,一般都是UDP協(xié)議,即使丟幾個包也只是卡一下,但如果網(wǎng)絡(luò)不好。。那游戲體驗?zāi)馨央娔X砸了。
會話層:不同機器上的用戶之間建立和管理會話(服務(wù)器驗證登錄,斷電續(xù)傳)。我向老王共享了一個文件夾,老王通過我的IP地址要訪問我的共享文件夾(建立會話),這時就會要求他輸入我的我腦上的賬號密碼,這是建立會話過程中的身份驗證,權(quán)限鑒定。老王從我共享的文件夾拷貝數(shù)據(jù),這過程就花了幾分鐘,然后關(guān)閉了和我電腦的共享窗口,這時我又傳了一個文件上去。老王有過來連接,這時會發(fā)現(xiàn)不需要輸入密碼就能共享到我文件了,這是因為這條會話還沒斷開(根據(jù)應(yīng)用層設(shè)置的時間維護),身份鑒定環(huán)節(jié)就省略了(保持會話),這時,電腦卡住了,我無奈重啟機器(斷開會話),老王重新連接我共享文件夾就要去身份鑒定了。
表示層:處理兩個通信系統(tǒng)中交換信息的數(shù)據(jù)格式變換,數(shù)據(jù)加密和解密,數(shù)據(jù)壓縮和恢復(fù)。我給老王寫的一封信,準(zhǔn)備早上九點出發(fā)去找他,信里的內(nèi)容是"我上午九點來",可是老王理解成了我九點到他家,雖然信沒看錯,但因為不同理解,產(chǎn)生了錯誤的結(jié)果。表示層就是專門負責(zé)這些有關(guān)網(wǎng)絡(luò)中計算機信息表達方式的問題,除了編碼外,還包括數(shù)組,浮點數(shù),聲音等多種數(shù)據(jù)結(jié)構(gòu),以達到在網(wǎng)絡(luò)中傳輸?shù)男畔㈦p方的解釋都是一樣的,在計算機內(nèi)部表示法和網(wǎng)絡(luò)的標(biāo)準(zhǔn)表示法之間進行轉(zhuǎn)換。
應(yīng)用層:為應(yīng)用程序提供服務(wù)并規(guī)定應(yīng)用程序中通信相關(guān)的細節(jié)。
TCP協(xié)議三次握手建立連接
兩臺計算機如何交流,就好比我們兩個人,使用同一種語言自然而然的就能表達我們的想法,因此計算機他們也需要定義共通的東西進行交流,TCP/IP為此而生,它不是一個協(xié)議而是一個協(xié)議家族的統(tǒng)稱,它們的成員包括TCP協(xié)議,HTTP協(xié)議,IP協(xié)議等等,本章講的是TCP協(xié)議建立連接和斷開連接的過程,客戶端程序想要訪問服務(wù)器某個應(yīng)用程序就必須發(fā)送一個通信請求,經(jīng)過三次握手建立連接四次揮手終止連接,下面看看具體過程。
位碼就是TCP標(biāo)志位,有6種標(biāo)示==>建立聯(lián)機(SYN),確認(ACK),傳送(PSH),結(jié)束(FIN),重置(RST),USG(緊急)
狀態(tài)===>CLOSED(初始化狀態(tài)),SYN_SENT(等待狀態(tài)),ESTABLISHED(連接建立狀態(tài)),LISTEN(監(jiān)聽狀態(tài)),SYN_RCVD(表示接收到SYN報文),
三次握手
抓包工具查看握手過程
第二次握手
?
?第三次握手
?TCP四次揮手?jǐn)嚅_連接
可以發(fā)現(xiàn),三次握手是客戶端先發(fā)起的,而四次揮手客戶端和服務(wù)器都可以率先發(fā)起揮手的動作。客戶端和服務(wù)器總共發(fā)送4個包確認連接斷開,也形象稱為四次揮手。
狀態(tài)=====>FIN_WAIT1(主動關(guān)閉連接,發(fā)送FIN報文,進入終止等待1),FIN_WAIT2(終止等待2),TIME_WAIT(等待狀態(tài)),CLOSE_WAIT(等待關(guān)閉狀態(tài)),LAST_ACK(最后等待狀態(tài))
四次揮手
抓包工具查看揮手過程
?
第二次揮手
第三次揮手
第四次揮手
握手要三次?揮手要四次?
TCP協(xié)議的雙方是雙工的,也就是說通信雙方都可以向?qū)Ψ桨l(fā)送消息,也都可以獨立關(guān)閉自己自己一方的通信通道。在這順便說下半雙工,說白了就是不同時,A可以給B發(fā)消息,B也可以給A發(fā)消息,但A給B發(fā)的時候,B不能給A發(fā)。三次握手確認兩件事,知道雙方都準(zhǔn)備好了,初始序列號進行確認協(xié)商。如果只有兩次,可能會造成死鎖。客戶端給服務(wù)器發(fā)送請求連接,服務(wù)器收到這個請求,并發(fā)送確認報文。發(fā)送完后,服務(wù)器按兩次握手的協(xié)定,認為連接已經(jīng)建立,開始發(fā)送數(shù)據(jù)。但這時因為某種原因,服務(wù)器的確認報文傳丟了,客戶端懵逼了,不知道服務(wù)器是否收到自己的請求,建立什么序列號。客戶端就認為連接還未建立,忽略服務(wù)器傳來的任何數(shù)據(jù),傻傻的等待服務(wù)器的確認報文,服務(wù)器發(fā)出的數(shù)據(jù)超時后,就重復(fù)發(fā)出同樣數(shù)據(jù),死鎖就產(chǎn)生了。如果是四次握手哪?四次握手是可行的,但是這樣一來會造成資源的浪費,因為三次握手已經(jīng)確認好所有的事情了,沒必要在浪費一次資源。
?
服務(wù)器收到客戶端的請求連接報文,立即就可以給應(yīng)答建立聯(lián)機了。但關(guān)閉連接時,服務(wù)器收到這個關(guān)閉連接的報文,并不能立即停止,因為還有數(shù)據(jù)未發(fā)送完畢,只能回一個“我知道啦”的應(yīng)答報文。只有數(shù)據(jù)全部發(fā)送完畢后,服務(wù)器才發(fā)送說FIN,“我數(shù)據(jù)傳完了”的報文等待確認,然后終止連接。所有需要四次揮手。
?
===============================================================
如發(fā)現(xiàn)錯誤,請及時留言,lz及時修改,避免誤導(dǎo)后來者。感謝!!!
轉(zhuǎn)載于:https://www.cnblogs.com/dslx/p/10686444.html
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的OSI七层协议与TCP连接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鼠标按下改变RelativeLayout
- 下一篇: qdu-凑数题(01背包)