【HTTP基礎】HTTP協議詳解之TCP/IP協議蔟

TCP/IP協議蔟分爲4層結構,分別是應用層、傳輸層、網絡層和數據鏈路層,每一層都由特定的協議與對方進行通訊,在進行數據通訊時,發送端的數據從應用層往數據鏈路層方向流動,接收端的數據從數據鏈路層往應用層流動。緩存

數據鏈路層

數據鏈路層的主要工做是對電信號進行分組並造成具備特定意義的數據幀,而後以廣播的形式經過物流介質發送給接受方,數據鏈路層處理數據的協議是以太網協議,它將傳輸的數據分組封裝成數據幀,每一個數據幀由首部、數據和尾部三部分組成,首部包含目標MAC地址、源MAC地址和類型,尾部爲數據幀校驗序列,用於肯定數據包在傳輸過程當中是否損壞。數據傳輸採用廣播形式,把數據包發送給該子網內的全部主機,子網內每臺主機接收到這個包之後,都會讀取首部裏的目標MAC地址,而後和本身的MAC地址進行比對,若是相同則進行下一步處理,若是不一樣,則丟棄這個包。網絡

網絡層

對於上面的過程,有幾個細節值得咱們思考:spa

  1. 發送者如何知道接受者的MAC地址?
  2. 發送者如何知道接受者和本身同屬一個子網?
  3. 若是接受者和本身不在同一個子網,數據包如何發送給對方?

網絡層有以下幾個協議:圖片

IP協議:MAC地址只與廠商有關,與所處的網絡無關,因此沒法經過MAC地址來判斷兩臺主機是否屬於同一個子網,所以,網絡層引入IP協議,制定了一套新地址,用於區分兩臺主機是否同屬於一個網絡,這套地址就是網絡地址-IP地址。路由

ARP協議:地址解析協議,根據IP地址獲取MAC地址。ARP首先發起一個請求數據包,數據包的首部包含了目標主機的IP地址,數據包在鏈路層被封裝成數據幀並在子網內廣播,每一臺主機都會接受到這個數據包,並取出目標IP地址,並與本身的IP地址進行比較,若是相同就返回本身的MAC地址,ARP接收返回消息,以此肯定目標機的MAC地址,與此同時,ARP還會將返回的MAC地址與對應的IP地址存入本機ARP緩存並保留一段時間。同步

路由協議:經過ARP協議的工做原理能夠發現,ARP的MAC尋址仍是侷限在同一個子網中,所以網絡層引入路由協議,首先經過IP協議判斷兩臺主機是否在同一個子網中,若是在,經過ARP協議查詢對應的MAC地址,而後以廣播形式向該子網內的主機發送數據包,若是不在,以太網會將數據包轉發給本子網的網關進行路由,網關是子網與子網間的橋樑,通過網關的屢次轉發,最終將數據包轉發到目標IP所在的子網,而後再經過ARP協議獲取MAC地址。完成這個路由協議的設備就是路由器。it

在網絡層被包裝的數據包就叫IP數據包,IP數據包由首部和數據兩部分組成,首部包含目標IP地址和源IP地址,網絡層的主要工做是定義網絡地址,區分網段,子網內MAC尋址,對不一樣子網的數據進行路由。class

傳輸層

鏈路層定義了MAC地址,網絡層定義了IP地址,有了這兩個地址,數據就能從一個主機發送到另外一個主機,可是數據其實是從一個主機上的某個應用程序發出,當數據包被接收後,也沒法肯定哪一個應用程序要接收這個數據包。原理

所以傳輸層引入UDP協議來解決這個問題,UDP定義了端口號,同一個主機的每個應用程序都須要指定惟一的端口號,而且在傳輸數據時在數據上加上端口信息,UDP定義的數據包叫作UDP數據包。UDP數據包由首部和數據兩部分組成,首部包括源端口和目標端口。ftp

UDP協議比較簡單,實現容易,可是沒有確認機制,可靠性較差,爲了解決這個問題,TCP協議就被引入,TCP協議是一種面向鏈接的、可靠地、基於字節流的通訊協議。TCP協議每發出一個數據包都要求確認,若是數據包丟失,收不到確認信息,發送發就必須重發這個數據包。

TCP協議

TCP爲了保證傳輸的可靠性,在正式收發數據前,必須和對方創建可靠的鏈接。由此纔有TCP的三次握手機制。下面是TCP三次握手過程當中使用到的幾個名詞:

  • 序列號seq:是TCP報文段的第一個字節的數據編號,其中第一個TCP報文段的第一個字節編號由本地隨機產生。
  • 確認號ack:期待收到對方下一個報文段的序列號,所以確認號爲序列號+1。
  • 確認ACK:ACK=1表示確認號字段有效,ACK=0確認號無效。
  • 同步SYN:SYN這個標誌在TCP創建鏈接時纔會被置爲1,握手完成被置爲0。
  • 終止FIN:FIN=1表示發送數據已發送完畢,要求釋放鏈接。

主機A向主機B請求創建TCP鏈接,其TCP的三次握手過程以下:

  1. 主機A向主機B發送TCP鏈接請求數據包,SYN=1,seq=x。
  2. 主機B向主機A發送鏈接確認數據包,SYN=1,ACK=1,seq=y,ack=x+1。
  3. 主機A向主機B發送再次確認數據包,ACK=1,seq=x+1,ack=y+1。

圖片描述
主機A主機B的TCP連接斷開,其TCP的四次揮手過程以下:

因爲TCP鏈接時雙全工的(即數據能夠在兩個方向上同時傳遞),因此進行關閉時每一個方向都要單獨進行關閉,這個單方向的關閉就叫半關閉,當一方完成它的數據發送任務,就發送一個FIN來向另外一方通告將要終止這個方向的鏈接。

  1. A確認發送完數據後,想要關閉鏈接,發送FIN給B。
  2. B收到A發送的FIN,發送ACK回覆。
  3. 但這時B可能還在發送數據,因此沒有想要關閉鏈接的意思,因此FIN和ACK不是同時發送的,等B數據發送完畢後,纔會發送ACK=1,FIN=1。
  4. A收到B發來的FIN,回覆ACK=1,A等待2MSL之後,沒有收到B傳來的任何消息,知道B已經收到本身的確認消息ACK,A就關閉連接。

在A發送最後的ACK回覆時,該ACK可能丟失,B若是沒有收到ACK,將不斷重複發送FIN片斷,因此A不能當即關閉,它必須確認B接收到該ACK並關閉後,在2MSL內沒有收到FIN,纔會進行關閉。MSL指一個報文段在網絡中的最大存活時間。
圖片描述

傳輸層的主要工做內容是定義端口,標識應用程序身份,實現端口到端口的通訊,TCP協議保證數據傳輸的可靠性。

應用層

理論上來說,有了以上三層協議的支持,數據已經能夠從一個主機的應用程序傳輸到另外一臺主機的應用程序上了,可是傳輸過來的數據是字節流,不能被程序識別,所以應用層定義了各類各樣的協議來規範數據格式,常見的有http、ftp等。應用層的主要工做就是定義數據格式並按照對應的格式解讀數據。

TCP/IP協議蔟

  • 鏈路層:對數據進行分組,定義數據幀,確認主機的物理地址,傳輸數據。
  • 網絡層:定義IP地址,確認主機所在的網絡位置,並經過IP進行MAC尋址,對外網數據包進行路由轉發。
  • 傳輸層:定義端口號,確認主機上應用程序的身份,並將數據包交給對應的應用程序。
  • 應用層:定義數據格式,並按照對應的格式解讀數據。

當輸入一個網址並按下回車鍵的時候,首先,應用層協議對該請求包作了格式定義,緊接着傳輸層協議加上了雙發的端口號,確認雙發通訊的應用程序,而後網絡層的IP協議加上了雙方的IP地址,確認雙發的網絡位置,最後鏈路層協議加上雙發的MAC地址,確認雙發的物理位置,同時將數據進行分組,造成數據幀,採用廣播方式,經過傳輸介質發送給對方主機,而對於不一樣子網,該數據包首先會轉發給網關路由器,通過屢次轉發後,最終被髮送到目標主機,目標主機接收到數據包後,採用對應的協議,對幀數據進行組裝,而後一層一層的協議進行解析,最終被應用層的協議解析。

相關文章
相關標籤/搜索