一,什麼是 TCP/IP?
TCP/IP協議模型(Transmission Control Protocol/Internet Protocol),包含了一系列構成網際網路基礎的網路協議,是Internet的核心協議。
基於TCP/IP的參考模型將協議分成四個層次,它們分別是鏈路層、網路層、傳輸層和應用層。下圖表示TCP/IP模型與OSI模型各層的對照關係。
TCP/IP協議族按照層次由上到下,層層包裝。最上面的是應用層,這裡面有http,ftp,等等我們熟悉的協議。而第二層則是傳輸層,著名的TCP和UDP協議就在這個層次。第三層是網路層,IP協議就在這裡,它負責對資料加上IP地址和其他的資料以確定傳輸的目標。第四層是資料鏈路層,這個層次為待傳送的資料加入一個乙太網協議頭,並進行CRC編碼,為最後的資料傳輸做準備。
上圖清楚地表示了TCP/IP協議中每個層的作用,而TCP/IP協議通訊的過程其實就對應著資料入棧與出棧的過程。入棧的過程,資料傳送方每層不斷地封裝首部與尾部,新增一些傳輸的資訊,確保能傳輸到目的地。出棧的過程,資料接收方每層不斷地拆除首部與尾部,得到最終傳輸的資料。下圖以HTTP協議為例,具體說明。
二,TCP/IP模型
OSI | TCP/IP | 協議 |
---|---|---|
應用層/表示層/會話層 | 應用層 | HTTP、FTP、TFTP、SMIP、SNMP、DNS |
傳輸層 | 傳輸層 | TCP、UDP |
網路層 | 網路層 | ICMP、IGMP、IP、ARP、RARP |
資料鏈路層/物理層 | 網路介面層 | 由底層網路定義協議 |
三,OSI七層網路模型—Open System Interconnection
OSI | 功能 | TCP/IP協議 |
---|---|---|
應用層 | 面向計算機使用者,提供應用程式和網路之間的介面,向使用者提供服務, 完成使用者希望在網上完成的各種工作 | HTTP、FTP、TFTP、SMIP、SNMP、DNS |
表示層 | 處理來自應用層的的命令和資料,對各種語法解釋,按照規格傳給會話層。處理編碼,資料可是轉換和加密解密 | 沒有協議 |
會話層 | 使用者應用程式和網路之間的介面,向兩個實體表示層提供連線和連線方法,不同實體之間的表示層連線叫做會話,因此主要功能是維護和協調會話之間的資料通訊 | 沒有協議 |
傳輸層 | 為會話層和網路層提供傳輸服務,從會話層獲得資料,在必要時進行分割,然後傳送給網路層,主要起到建立,維護和取消傳輸連線功能,負責兩節點的可靠傳輸 | TCP、UDP |
網路層 | 通過路由演算法(兩節點之間可能有多條路徑),為報文選擇最適當的路徑,在網路層資料轉換為資料包,通過路徑選擇等控制,將資訊從一個網路裝置傳送到另一個網路裝置 | ICMP、IGMP、IP、ARP、RARP |
資料鏈路層 | 資料鏈路層的資料傳輸單元成為幀,就是將網路層轉發的資料封裝為幀,傳輸給物理層,以及分析物理層傳輸過來的資料幀 | SLIP、CSLIP、PPP、ARP、RARP、MTU等 |
物理層 | 為資料鏈路層提供資料幀和接收資料幀然後管理電腦通訊裝置和網路媒體之間的互通。包括了針腳、電壓、線纜規範、集線器、中繼器、網路卡、主機介面卡等 | ISO2110等 |
四,TCP/IP分層模型圖
- 鏈路層—網路介面層
網路介面層是TCP/IP模型的最底層,負責接收從上一層交來的資料包並將資料包通過底層的物理網路傳送出去,比較常見的就是裝置的驅動程式。ARP(地址解析協議)和RARP(逆地址解析協議)是某些網路介面(如乙太網和令牌環網)使用的特殊協議,用來轉換IP層和網路介面層使用的地址
- 網路層
對應OSI網路層,負責資料包裝、定址、路由和交換錯誤報文。只管傳送資料,不管成功與否
IP網路協議一種不可靠的服務,快速將源節點送到目標節點,被TCP/UDP使用,TCP和UDP的每組資料都通過端系統和每個中間路由器中的IP層在網際網路中進行傳輸。
- 傳輸層
位於應用層和網路介面層之間,為兩臺主機提供端到端的通訊,在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(使用者資料包協議)。
五,TCP三次握手
三次握手
TCP是面向連線的,無論哪一方向另一方傳送資料之前,都必須先在雙方之間建立一條連線。在TCP/IP協議中,TCP協議提供可靠的連線服務,連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 TCP視窗大小資訊。
三次握手的原因:
確認建立聯絡,同步如序號等相關資訊
為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤。
六,TCP四次揮手
當客戶端和伺服器通過三次握手建立了TCP連線以後,當資料傳送完畢,肯定是要斷開TCP連線的啊。那對於TCP的斷開連線,這裡就有了神祕的“四次分手”。
為什麼要四次分手?
TCP協議是一種面向連線的、可靠的、基於位元組流的運輸層通訊協議。TCP是全雙工模式,這就意味著,當主機1發出FIN報文段時,只是表示主機1已經沒有資料要傳送了,主機1告訴主機2,它的資料已經全部傳送完畢了;但是,這個時候主機1還是可以接受來自主機2的資料;當主機2返回ACK報文段時,表示它已經知道主機1沒有資料傳送了,但是主機2還是可以傳送資料到主機1的;當主機2也傳送了FIN報文段時,這個時候就表示主機2也沒有資料要傳送了,就會告訴主機1,我也沒有資料要傳送了,之後彼此就會愉快的中斷這次TCP連線。
六,IP
TCP/IP 協議網路上的每一個網路介面卡都有一個唯一的 IP 地址.
IP 地址是一個 32 位的地址,這個地址通常分成 4 端,每 8 個二進位制為一段,但是為了方便閱讀,通常會將每段都轉換為十進位制來顯示,比如大家非常熟悉的 192.168.0.1
IP 地址分為兩個部分:網路 ID 和 主機 ID
但是具體哪部分屬於網路 ID,哪些屬於主機 ID 並沒有規定.
因為有些網路是需要很多主機的,這樣的話代表主機 ID 的部分就要更多,但是有些網路需要的主機很少,這樣主機 ID 的部分就應該少一些.
絕大部分 IP 地址屬於以下幾類
- A 類地址:IP 地址的前 8 位代表網路 ID ,後 24 位代表主機 ID。
- B 類地址:IP 地址的前 16 位代表網路 ID ,後 16 位代表主機 ID。
- C 類地址:IP 地址的前 24 位代表網路 ID ,後 8 位代表主機 ID。
這裡能夠很明顯的看出 A 類地址能夠提供出的網路 ID 較少,但是每個網路可以擁有非常多的主機,但是我們怎麼才能看出一個 IP 地址到底是哪類地址呢?
- 如果 32 位的 IP 地址以 0 開頭,那麼它就是一個 A 類地址。
- 如果 32 位的 IP 地址以 10 開頭,那麼它就是一個 B 類地址。
- 如果 32 位的 IP 地址以 110 開頭,那麼它就是一個 C 類地址。
那麼轉化為十進位制(四段)的話,我們就能以第一段中的十進位制數來區分 IP 地址到底是哪類地址了。
- 十進位制第一段大於 223 的屬於 D 類和 E 類地址,這兩類比較特殊也不常見,這裡就不做詳解介紹了。
- 每一類都有一些排除地址,這些地址並不屬於該類,他們是在一些特殊情況使用地址
- 除了這樣的方式來劃分網路,我們還可以把每個網路劃分為更小的網路塊,稱之為子網