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