android網絡編程中的Http、Https、TCP/IP、Socket

前言

在Android中,網絡編程是是十分重要的一項,下面就來介紹一下網絡編程方面的知識。

簡介

HTTP

超文本協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲廣泛的一種網絡協議。Http定義了瀏覽器(即萬維網客戶進程)怎樣向萬維網服務器請求萬維網文檔,以及服務器怎麼把文檔傳給瀏覽器。Http是萬維網可靠的交換文件(包括文本、圖像、聲音、以及視頻等)的基礎。 HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。 
HTTP協議的主要特點:

  1. 支持C/S(客戶/服務器)模式。
  2. 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST,每種方法規定了客戶與服務器聯繫的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
  3. 靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
  4. 無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。
  5. 無狀態:HTTP協議是無狀態協議,無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

Http的請求過程:

  1. 域名解析 
  2. 發起TCP的3次握手 
  3. 建立TCP連接後發起Http請求 
  4. 服務器端響應Http請求,並回傳數據 
  5. 客戶端獲取數據並解析展示在前端界面

作用:

HTTP協議被用於在Web瀏覽器和服務器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,因此HTTP協議不適合傳輸一些敏感信息。

HTTPS 

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 
https:URL 表明它使用了HTTP,但HTTPS存在不同於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。 
HTTPS使用端口443,而不是像HTTP那樣適用端口80來和TCP/IP 進行通信。SSL使用40位關鍵字作爲RC4流加密算法,這對於商業信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證,如果需要的話用戶可以確認發送者是誰。 
作用:

建立一個信息安全通道,來保證數據傳輸的安全。確認網站的真實性,凡是使用https的網站,都可以通過點擊瀏覽器地址欄的鎖頭標誌來查看網站認證之後的真實信息。也可以通過CA 機構頒發的安全簽章來查詢。

HTTPS 和 HTTP 的區別 

傳輸信息安全性不同:

  1. http協議:是超文本傳輸協議,信息是明文傳輸。如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息。
  2. https協議:是具有安全性的ssl加密傳輸協議,爲瀏覽器和服務器之間的通信加密,確保數據傳輸的安全。

 

連接方式不同:

  1. http協議:http的連接很簡單,是無狀態的。
  2. https協議:是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議。

端口不同:

  1. http協議:使用的端口是80。
  2. https協議:使用的端口是443.

證書申請方式不同:

  1. http協議:免費申請。
  2. https協議:需要到ca申請證書,一般免費證書很少,需要交費。


TCP/IP

利用 IP 進行通信時所必須用到的協議羣的統稱。具體來說,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都屬於 TCP/IP 協議。他們與 TCP 或 IP 的關係緊密,是互聯網必不可少的組成部分。TCP/IP 一詞泛指這些協議,因此,有時也稱 TCP/IP 爲網際協議羣。互聯網進行通信時,需要相應的網絡協議,TCP/IP 原本就是爲使用互聯網而開發制定的協議族。因此,互聯網的協議就是 TCP/IP,TCP/IP 就是互聯網的協議。
TCP
      TCP是Tranfer Control Protocol的簡稱,是一種面向連接的保證可靠傳輸的協議。通過TCP協議傳輸,得到的是一個順序的無差錯的數據流。發送方和接收方的成對的兩個socket之間必須建立連接,需要連接時間,以便在TCP協議的基礎上進行通信。 

TCP連接必須進行三次握手:若A要與B進行連接,則必須 

  1. 第一次握手:建立連接。客戶端發送連接請求報文段,將SYN位置爲1,Sequence Number爲x;然後,客戶端進入SYN_SEND狀態,等待服務器的確認。即A發送信息給B
  2. 第二次握手:服務器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認。即B收到連接信息後向A返回確認信息
  3. 第三次握手:客戶端收到服務器的(SYN+ACK)報文段,並向服務器發送ACK報文段。即A收到確認信息後再次向B返回確認連接信息 

優點: 

  1. 可靠穩定,傳遞數據前,會有三次握手建立連接,面向有連接。 
  2. 傳遞數據時,有確認、窗口(流量控制)、重傳、擁塞控制。確認機制保證接收端每收到一個正確包都會迴應給發送端,超時或者數據包不完整的話發送端會重傳。 

缺點: 

  1. 整體來說傳輸慢,效率低,佔用系統資源高。 
  2. 傳遞數據前,建立連接需要耗時,傳遞數據時,確認、重傳、擁塞等會消耗大量時間以及CPU和內存等硬件資源。 
  3. 因爲有確認機制、三次握手等機制,容易被人利用,實現DOS 、DDOS攻擊。 

應用場景:

當對網絡通訊質量有要求的時候,比如:整個數據要準確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。

UDP

是User Datagram Protocol的簡稱,是一種無連接的協議,每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,因此無需建立發送方和接收方的連接,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性、次序性都是不能被保證的。而且被傳輸數據報必須限定在64k以內。

TCP和UDP的區別

  1. TCP:面向連接,可靠的,速度慢效率低,適用於需要傳輸可靠的數據時使用。
  2. UDP:無連接,不可靠,速度快、效率高,適用於需搞笑傳輸數據,忽略可靠性時使用。

Socket

即套接字,是一個對 TCP / IP協議進行封裝 的編程調用接口(API)

  1. 即通過Socket,我們才能在Andorid平臺上通過 TCP/IP協議進行開發
  2. Socket不是一種協議,而是一個編程調用接口(API),屬於傳輸層(主要解決數據如何在網絡中傳輸)

利用Socket建立連接的過程分爲三個步驟:服務器監聽,客戶端請求,連接確認。 

  1. 服務器監聽:服務器端套接字處於等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。 
  2. 客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。爲此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然後就向服務器端套接字提出連接請求。 
  3. 連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而服務器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。

Socket 與 Http 對比

Socket:屬於傳輸層,因爲 TCP / IP協議屬於傳輸層,解決的是數據如何在網絡中傳輸的問題,採用 服務器主動發送數據 的方式。

  1. 即建立網絡連接後,服務器可主動發送消息給客戶端,而不需要由客戶端向服務器發送請求
  2. 可理解爲:是服務器端有需要才進行通信

HTTP協議: 屬於 應用層,解決的是如何包裝數據,採用 請求—響應 方式。

  1. 即建立網絡連接後,當 客戶端 向 服務器 發送請求後,服務器端才能向客戶端返回數據。
  2. 可理解爲:是客戶端有需要才進行通信

 

發佈了41 篇原創文章 · 獲贊 71 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章