若是咱們想了解TCP/IP的參考模型,首先咱們要對開放系統互連參考模型(Open System Interconnect 簡稱OSI)有必定的瞭解,這樣有助於加深對TCP/IP的理解。git
開放系統互連參考模型 (Open System Interconnect 簡稱OSI)是國際標準化組織(ISO)和國際電報電話諮詢委員會(CCITT)聯合制定的開放系統互連參考模型,爲開放式互連信息系統提供了一種功能結構的框架。它從低到高分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。github
開放系統互連參考模型爲實現開放系統互連所創建的通訊功能分層模型,簡稱OSI參考模型。其目的是爲異種計算機互連提供一個共同的基礎和標準框架,併爲保持相關標準的一致性和兼容性提供共同的參考。這裏所說的開放系統,實質上指的是遵循OSI參考模型和相關協議可以實現互連的具備各類應用目的的計算機系統。 緩存
OSI參考模型是計算機網路體系結構發展的產物。它的基本內容是開放系統通訊功能的分層結構。這個模型把開放系統的通訊功能劃分爲七個層次,從鄰接物理媒體的層次開始,分別賦於1,2,……7層的順序編號,相應地稱之爲物理層、數據鏈路層、網絡層、運輸層、會話層、表示層和應用層。每一層的功能是獨立的。它利用其下一層提供的服務併爲其上一層提供服務,而與其餘層的具體實現無關。這裏所謂的「服務」就是下一層向上一層提供的通訊功能和層之間的會話規定,通常用通訊原語實現。兩個開放系統中的同等層之間的通訊規則和約定稱之爲協議。一般把1~4層協議稱爲下層協議,5~7層協議稱爲上層協議。TCP/IP是傳輸控制協議/網絡互聯協議的簡稱 早期的TCP/IP模型是一個四層結構,從下往上依次是網絡接口層、互聯網層、傳輸層和應用層 後來在使用過程當中,借鑑OSI七層參考模型,將網絡接口層劃分爲了物理層和數據鏈路層,造成五層結構安全
TCP/IP協議被稱爲傳輸控制協議/互聯網協議,又稱網絡通信協議 是由網絡層的IP協議和傳輸層的TCP協議組成,是一個很大的協議集合 物理層和數據鏈路層沒有定義任何特定協議,支持全部的標準和專用的協議服務器
傳輸層定義了TCP(傳輸控制協議)和UDP(用戶數據報)協議 應用層定義了HTTP(超文本傳輸協議)、FTP(文件傳輸協議)、DNS(域名系統)等協議網絡
X層 | 協議名稱 | 數據名稱 |
---|---|---|
傳輸層(Transport) | TCP | 塊(Segment) |
網絡層(Network) | IP | 包(Packet) |
數據鏈路層(Data Link) | ARP | 幀(Frame) |
數據從應用層發下來,會在每一層都會加上頭部信息,進行封裝,而後再發送到數據接收端。這個基本的流程你須要知道,就是每一個數據都會通過數據的封裝和解封裝的過程。併發
如圖: 框架
URG:此標誌表示TCP包的緊急指針域(後面立刻就要說到)有效,用來保證TCP鏈接不被中斷,而且督促中間層設備要儘快處理這些數據;加密
ACK:此標誌表示應答域有效,就是說前面所說的TCP應答號將會包含在TCP數據包中;有兩個取值:0和1,爲1的時候表示應答域有效,反之爲0;計算機網絡
PSH:這個標誌位表示Push操做。所謂Push操做就是指在數據包到達接收端之後,當即傳送給應用程序,而不是在緩衝區中排隊;
RST:這個標誌表示鏈接復位請求。用來複位那些產生錯誤的鏈接,也被用來拒絕錯誤和非法的數據包;
SYN:表示同步序號,用來創建鏈接。SYN標誌位和ACK標誌位搭配使用,當鏈接請求的時候,SYN=1,ACK=0;鏈接被響應的時候,SYN=1,ACK=1;這個標誌的數據包常常被用來進行端口掃描。掃描者發送一個只有SYN的數據包,若是對方主機響應了一個數據包回來 ,就代表這臺主機存在這個端口;可是因爲這種掃描方式只是進行TCP三次握手的第一次握手,所以這種掃描的成功表示被掃描的機器不很安全,一臺安全的主機將會強制要求一個鏈接嚴格的進行TCP的三次握手;
FIN: 表示發送端已經達到數據末尾,也就是說雙方的數據傳送完成,沒有數據能夠傳送了,發送FIN標誌位的TCP數據包後,鏈接將被斷開。這個標誌的數據包也常常被用於進行端口掃描。
完成了三次握手,客戶端和服務器端就能夠開始傳送數據。以上就是TCP三次握手的整體介紹。
當客戶端和服務器經過三次握手創建了TCP鏈接之後,當數據傳送完畢,確定是要斷開TCP鏈接的啊。那對於TCP的斷開鏈接,這裏就有了神祕的「四次分手」。
到這裏咱們是否是很是疑惑,爲何要三次握手、四次分手呢?
在謝希仁著《計算機網絡》第四版中講「三次握手」的目的是「爲了防止已失效的鏈接請求報文段忽然又傳送到了服務端,於是產生錯誤」。在另外一部經典的《計算機網絡》一書中講「三次握手」的目的是爲了解決「網絡中存在延遲的重複分組」的問題。
在謝希仁著《計算機網絡》書中同時舉了一個例子,以下:
「已失效的鏈接請求報文段」的產生在這樣一種狀況下:client發出的第一個鏈接請求報文段並無丟失,而是在某個網絡結點長時間的滯留了,以至延誤到鏈接釋放之後的某個時間纔到達server。原本這是一個早已失效的報文段。但server收到此失效的鏈接請求報文段後,就誤認爲是client再次發出的一個新的鏈接請求。因而就向client發出確認報文段,贊成創建鏈接。假設不採用「三次握手」,那麼只要server發出確認,新的鏈接就創建了。因爲如今client並無發出創建鏈接的請求,所以不會理睬server的確認,也不會向server發送數據。但server卻覺得新的運輸鏈接已經創建,並一直等待client發來數據。這樣,server的不少資源就白白浪費掉了。採用「三次握手」的辦法能夠防止上述現象發生。例如剛纔那種狀況,client不會向server的確認發出確認。server因爲收不到確認,就知道client並無要求創建鏈接。」
總結:三次握手是爲了防止了服務器端的一直等待而浪費資源。
那四次分手又是爲什麼呢?TCP協議是一種面向鏈接的、可靠的、基於字節流的運輸層通訊協議。TCP是全雙工模式,這就意味着,當主機1發出FIN報文段時,只是表示主機1已經沒有數據要發送了,主機1告訴主機2,它的數據已經所有發送完畢了;可是,這個時候主機1仍是能夠接受來自主機2的數據;當主機2返回ACK報文段時,表示它已經知道主機1沒有數據發送了,可是主機2仍是能夠發送數據到主機1的;當主機2也發送了FIN報文段時,這個時候就表示主機2也沒有數據要發送了,就會告訴主機1,我也沒有數據要發送了,以後彼此就會愉快的中斷此次TCP鏈接。
推薦文章