OSI七層模型
開放式系統互聯。 一般都叫OSI參考模型,是ISO(國際標準化組織)組織在1985年研究的網絡互聯模型。該體系結構標準定義了網絡互聯的七層框架(物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層)。
上三層主要與網絡應用相關,負責對用戶數據進行編碼等操作。
下四層主要是負責網絡通訊,負責將用戶的數據傳遞到目的地。
7層應用層 |
提供爲應用軟件而設的接口,以設置與另一應用軟件之間的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。 |
6層表示層 |
把數據轉換爲能與接收者的系統格式兼容並適合傳輸的格式。 |
5層會話層 |
負責在數據傳輸中設置和維護計算機網絡中兩臺計算機之間的通信連接。 |
4層傳輸層 |
爲上層協議提供端到端的可靠和透明的數據傳輸服務,包括處理差錯控制和流量控制等問題。把傳輸表頭(TH)加至數據以形成數據包。傳輸表頭包含了所使用的協議等發送信息。例如:傳輸控制協議(TCP)等。傳輸層傳送的協議數據單元稱爲段或報文。 |
3層網絡層 |
爲傳輸層提供服務,傳送的協議數據單元稱爲數據包或分組。作用是解決如何使數據包通過各結點傳送的問題,即通過路徑選擇算法(路由)將數據包送到目的地。例如:互聯網協議(IP)等。 |
2層數據鏈路層 |
爲網絡層提供服務,負責網絡尋址、錯誤偵測和改錯。解決兩個相鄰結點之間的通信問題。當表頭和表尾被加至數據包時,會形成幀。數據鏈表頭(DLH)是包含了物理地址和錯誤偵測及改錯的方法。數據鏈表尾(DLT)是一串指示數據包末端的字符串。例如以太網、無線局域網(Wi-Fi)和通用分組無線服務(GPRS)等。分爲兩個子層:邏輯鏈路控制(logic link control,LLC)子層和介質訪問控制(media access control,MAC)子層。 |
1層物理層 |
它負責管理計算機通信設備和網絡媒體之間的互通。利用傳輸介質爲數據鏈路層提供物理連接 |
TCP/IP網絡分層參考模型
TCP
含義
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。在OSI模型中,它完成第四層傳輸層所指定的功能。用戶數據報協議(UDP)是同一層內 另一個重要的傳輸協議。在因特網協議族中,TCP層是位於IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。
其可靠性表現在2方面,一方面是保證數據包可以按照發送的順序到達,另外一方面是保證數據包一定程度的正確性。其可靠性的實現則基於2點技術,一點是具有一個CRC校驗,這樣如果數據包中的某些數據出現錯誤可以通過該校驗和發現;另外一點是每個數據包都有一個序號,這樣就能保證數據包的順序性,如果出現錯位的數據包可以請求重發。
應用層向TCP層發送用於網間傳輸的、用8位字節表示的數據流,然後TCP把數據流分區成適當長度的報文段(通常受該計算機連接的網絡的數據鏈路層的最大傳輸單元(MTU)的限制)。之後TCP把結果包傳給IP層,由它來通過網絡將包傳送給接收端實體的TCP層。TCP爲了保證不發生丟包,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的包發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據包就被假設爲已丟失將會被進行重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。
(1)序號:Seq序號,佔32位,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記。
(2)確認序號:Ack序號,佔32位,只有ACK標誌位爲1時,確認序號字段纔有效,Ack=Seq+1。
TCP標示位有6種標示位:
(A)URG:緊急指針(urgent pointer)有效。爲1表示某一位需要被優先處理。
(B)ACK:確認序號有效。一般置爲1.
(C)PSH:提示接收方應用程序立即從TCP緩衝區取走數據,將報文交給應用層。
(D)RST:對方要求重新建立連接,復位。
(E)SYN:請求建立連接,並在其序列號的字段進行序列號的初始值設定,設置爲1。
(F)FIN:希望斷開連接。
需要注意的是:
(A)不要將確認序號Ack與標誌位中的ACK搞混了。
(B)確認方Ack=發起方Req+1,兩端配對。
TCP連接採用三次握手:
客戶端發送預連接數據包: 客戶端發送一個數據包(報文)給服務端,數據包中的SYN標識位爲1。如果SYN爲1,則說明爲建立連接的數據包。同時,在該數據包中包含一個請求序列號,該序列號也是建立連接的依據。
服務端回覆連接確認: 服務端確認可以建立連接(服務端不一定可以建立連接,因爲系統中套接字的數量是有限的)的情況下會向客戶端發送一個應答數據包。在應答數據包中會將ACK標誌位設置爲1,表示爲服務端應答數據包。同時,在應答數據包中會設置請求序列號和應答序列號的值。
客戶端回覆連接確認: 最後,客戶端再次發送一個連接確認數據包,告訴服務端連接建立成功。
如何傳輸的可靠性:
TCP在發送數據時都會計算整個數據包的校驗和,並存儲在包頭的校驗 和字段中。接收方會按照規則進行計算。
發送:
1.把僞首部、TCP包頭和TCP數據分爲16爲的字,並把TCP包頭中的 校驗和字段置0
2.用反碼加法累加所有16位數字
3.對計算結果去反,將其填充到TCP包頭的校驗和字段
接收:
1.將所有原碼相加,高位疊加,如果全爲1則表示數據正確,否則說明 數據有錯誤。
2.TCP數據包順序的可靠性是通過請求序列號和應答序列號保證的。在 數據傳輸中的每個請求都會有一個請求序列號,而在接收方接收到數據 後會發送一個應答序列號,這樣發送方就能知道數據是否被正確接收, 而接收方也能知道數據是否出現亂序,從而保證數據包的順序性。
斷開連接:
1、發起方發送一個FIN置位的數據包,用來請求關閉發送方到接收方的連接
2、接收方發送一個應答,ACK標誌位爲1,確認關閉。此時完成了發起方 到接收方的連接,也即發送方無法再向接收方發送數據,但接收方還可 以 向發送方發送數據。
3、接收方數據傳輸完成後向發起方發送一個FIN爲1的包,表示請求斷開 連接
4、發起方回覆一個ACK包,確認關閉成功
是全雙工通信,因此關閉連接時需要雙向關閉連接。