Android網路程式設計(一) TCP IP協議基礎棧結構

cc復CC發表於2017-12-13

Android開發,或者任何的網際網路相關的服務,總免不了會使用到網路通訊,而Android開發中,現今有很多優秀的框架,比如Volley、Okhttp3、Retrofit等,使用起來很方便,但是還是有必要了解一下整體上的網路程式設計結構的。

##1 基本介紹 計算機的網路世界是由一臺臺主機和路由器組成的,主機間需要通訊,這就造成一個問題,主機不可能和其它主機都連線上,所以需要路由器,將資訊進行分發,通訊的資訊是指程式建立的位元組序列,也稱為分組報文(packet)。 前面提到了,通訊的資訊是一組組的位元組序列,一臺計算機接受到一組位元組序列之後,在計算機眼中它們就是一堆二進位制數,所以相互通訊的應用之間必須預先達成一定的約定,以什麼方式編碼、以什麼方式解碼、分組報文的結構等都需要預先規定好,一組協議通常是為了解決一個特定的問題,為了使問題可管理,就出現了TCP/IP協議,TCP/IP協議就是一組解決方案,也稱為協議族(protocol suite),當然還有其它的協議族,但是TCP/IP協議已經是事實上網路世界中通用的方案了。

##2 基礎結構 為了保證不同的計算機網路廠商之間的產品能夠互相通訊,必須有一套統一的標準,最先ISO(國際標準化組織)制定了OSI協議,但是由於OSI協議實現過於複雜,就沒有普及開來,但是作為其指導方針的OSI參考模型卻被用於制定網路協議中。 OSI參考模型的分層結構是較為理想化的,分層的好處就是模組化,簡化網路間的通訊處理,每層獨立作用,利於擴充套件,但是模組化得適當,太過就會造成處理起來太過沉重,以及模組間出現類似的邏輯處理。

OSI參考模型與TCP/IP模型對比
為了方便理解TCP/IP協議的分層結構,可以先事先了解一下OSI的,因為TCP/IP就相當於簡化版。我們接觸比較多的HTTP(超文字傳輸協議)就是屬於應用層的,專門針對於超文字物件的通訊。
OSI參考模型的七個分層作用

  • 2.1 物理層 負責計算機的0和1序列和硬體高低電壓的轉換;
  • 2.2 資料鏈路層 負責物理層連線的節點間資料通訊,將0和1序列傳送到另一端;
  • 2.3 網路層 將資料傳輸到目標地址,主要作用就是定址和路由器選擇,定位接受方地址;
  • 2.4 傳輸層 起著可靠傳輸的作用,在通訊雙方的節點進行處理;
  • 2.5 會話層 負責建立和斷開連線,以及資料的分割等資料相關的管理操作
  • 2.6 表示層 將應用處理的資訊轉化為網路傳輸的格式,或者是將下一層格式的資料轉換為能夠處理的格式,主要負責資料格式的轉換,比如說文字格式、圖片格式的檔案要傳輸的話得先轉換成位元流;
  • 1.7 應用層 為應用提供服務,並規定好相關的細節。

##3 TCP/IP結構 TCP/IP協議族是分層結構,可以對應到OSI參考模型,一般將其分為4層結構。

一個TCP/IP網路

  • 3.1 網路介面層(物理層+資料鏈路層) TCP/IP中的最低層是網路介面層,包括物理層,比如乙太網和WiFi等通訊通道,而資料鏈路層利用乙太網等硬體介面進行通訊,可以把資料鏈路層看作為驅動程式(驅動程式在作業系統和硬體之間充當了橋樑的作用)。
  • 3.2 網路層 網路層使用的是IP協議,它使兩個主機間的一系列通訊通道和路由器看起來像是單獨一條主機到主機的通道。IP協議使用IP地址作為標識,將資料通過網路獨立處理和分發,從而傳送到目的地。 IP協議屬於非可靠性傳輸協議,就是說資料傳送過程中出現丟失也不會重複傳送。
  • 3.3 傳輸層 傳輸層主要包括兩個協議,TCP和UDP。這兩種協議都建立在網路層所提供的服務基礎上,它們有一個共同的作用,就是定址,因為網路層只負責將資料傳送到主機上,而具體的到達應用程式並沒有特別指定,TCP和UDP協議用的地址就是埠號,可以將資料傳輸到具體的程式之上。
  • 3.3.1 TCP協議:能夠檢測和恢復網路層傳輸過程中可能造成的資料丟失等錯誤。TCP協議是一種面向連線的協議,在通訊之前,兩個應用程式之間得先建立連線,涉及到握手資訊(handshake message)的交換。
  • 3.3.2 UDP協議:不嘗試對網路層產生的錯誤進行恢復,是一種面向無連線的協議,它只是單純的擴充套件了網路層的服務,使它能夠在應用程式之間正常工作,而不僅是隻在主機之間進行資料交換。如果使用UDP協議,應用程式要自己處理資料丟失等可能會發生的問題,因為其不關心對方是否收到資料。
  • 3.4 應用層 TCP/IP分層中,集中實現了OSI參考模型中的會話層、表示層和應用層。它包括了一些服務,負責與終端的使用者做一些認證、資料處理及壓縮,將應用程式的資料處理之後交給傳輸層。

相關文章