重走安卓進(jìn)階路——網(wǎng)絡(luò)通信

網(wǎng)絡(luò)通信(TCP/UDP HTTP協(xié)議 TCP為什么安全)

HTTP協(xié)議簡(jiǎn)介

http協(xié)議

定義了瀏覽器向服務(wù)器如何請(qǐng)求文檔,以及文檔如何傳給瀏覽器的應(yīng)用層協(xié)議

工作流程

建立連接

首先客戶機(jī)與服務(wù)器需要建立連接。只要單擊某個(gè)超級(jí)鏈接,HTTP的工作就開(kāi)始了。

發(fā)送請(qǐng)求

建立連接后,客戶機(jī)發(fā)送一個(gè)請(qǐng)求給服務(wù)器,請(qǐng)求方式的格式為:統(tǒng)一資源標(biāo)識(shí)符(URL)協(xié)議版本號(hào),后邊是MIME信息包括請(qǐng)求修飾符、客戶機(jī)信息和可能的內(nèi)容。。

發(fā)送響應(yīng)

服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng)信息(其格式為一個(gè)狀態(tài)行,包括信息的協(xié)議版本號(hào)、一個(gè)狀態(tài)碼,后邊是MIME信息包括服務(wù)器信息、實(shí)體信息和可能的內(nèi)容)

斷開(kāi)連接

客戶端接收服務(wù)器所返回的信息通過(guò)瀏覽器顯示在用戶的顯示屏上,然后客戶機(jī)與服務(wù)器斷開(kāi)連接。

由于Http協(xié)議必須由客戶機(jī)發(fā)起,服務(wù)器回應(yīng),就限制它的使用,是一個(gè)無(wú)狀態(tài)的協(xié)議,這次請(qǐng)求與上次沒(méi)有對(duì)應(yīng)關(guān)系

OSI七層模型與 TCP/IP五層模型 TCP/UDP的區(qū)別

OSI七層模型

物理層(ISO2110,IEEE802,IEEE802.2)
數(shù)據(jù)鏈路層(SLIP,CSLIP,PPP,ARP,RARP,MTU)
網(wǎng)絡(luò)層( IP,ICMP,RIP,OSPF,BGP,IGMP )
傳輸層(TCP,UDP )
會(huì)話層
表示層
應(yīng)用層( TFTP,HTTP,SNMP,F(xiàn)TP,SMTP,DNS,Telnet )

TCP/IP五層模型

物理層
數(shù)據(jù)鏈路層
網(wǎng)絡(luò)層
傳輸層
應(yīng)用層

OSI七層參考模型的各個(gè)層次的劃分遵循下列原則:

1、同一層中的各網(wǎng)絡(luò)節(jié)點(diǎn)都有相同的層次結(jié)構(gòu),具有同樣的功能。
2、同一節(jié)點(diǎn)內(nèi)相鄰層之間通過(guò)接口(可以是邏輯接 口)進(jìn)行通信。
3、七層結(jié)構(gòu)中的每一層使用下一層提供的服務(wù),并且向其上層提供服務(wù)。
4、不同節(jié)點(diǎn)的同等層按照協(xié)議,實(shí)現(xiàn)對(duì)等層之間的通信。

TCP/UDP

TCP

面向連接(正式通信前必須先建立連接)
多路復(fù)用
有效流控
全雙工
數(shù)據(jù)流傳送

UDP

非面向連接(不管對(duì)方狀態(tài)直接發(fā)送)
傳輸經(jīng)濟(jì)
無(wú)流控和差錯(cuò)恢復(fù)

為什么UDP比TCP快

TCP需要三次握手
TCP有擁塞控制,流量控制等機(jī)制

為什么TCP比UDP可靠

TCP是面向有連接的,建立連接之后才發(fā)送數(shù)據(jù);而UDP則不管對(duì)方存不存在都會(huì)發(fā)送數(shù)據(jù)。
TCP有確認(rèn)機(jī)制,接收端每收到一個(gè)正確包都會(huì)回應(yīng)給發(fā)送端。超時(shí)或者數(shù)據(jù)包不完整的話發(fā)送端會(huì)重傳。UDP沒(méi)有該機(jī)制,因此可能丟包。

理論經(jīng)典:TCP協(xié)議的3次握手與4次揮手過(guò)程詳解

Tcp三次握手

以男孩請(qǐng)女孩吃飯為例,男-客戶機(jī),女-服務(wù)器。三次握手分別是——
1.男問(wèn)女“可以一起吃飯嗎(syn)”
2.女回男“可以啊”(ack)
3.男得到一個(gè)狀態(tài)“開(kāi)心”,然后回復(fù)了一個(gè)地址(ack)

Tcp四次揮手

由于TCP連接是全雙工的,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這原則是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來(lái)終止這個(gè)方向的連接。收到一個(gè) FIN只意味著這一方向上沒(méi)有數(shù)據(jù)流動(dòng),一個(gè)TCP連接在收到一個(gè)FIN后仍能發(fā)送數(shù)據(jù)。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉。
(1) TCP 客戶端發(fā)送一個(gè)FIN,用來(lái)關(guān)閉客戶到服務(wù)器的 數(shù)據(jù)傳送。
(2) 服務(wù)器收到這個(gè)FIN,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到的序號(hào)加1。和SYN一樣,一個(gè)FIN將占用一個(gè)序號(hào)。
(3) 服務(wù)器關(guān)閉客戶端的連接,發(fā)送一個(gè)FIN給客戶端。
(4) 客戶端發(fā)回ACK 報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1。

為何要四次分手呢

Socket

通常用來(lái)實(shí)現(xiàn)客戶端與服務(wù)端的連接,是雙向鏈路的一段,是TCP/IP中一個(gè)流向的數(shù)據(jù)傳輸方式,由一個(gè)IP地址和一個(gè)端口號(hào)唯一確定。
工作:服務(wù)端監(jiān)聽(tīng)某個(gè)接口是否有連接請(qǐng)求,當(dāng)客戶端發(fā)出連接請(qǐng)求,服務(wù)端收到后發(fā)回accept,連接即建立,雙方都可通過(guò)send、write方式通信。即:
1.創(chuàng)建Socket
2.打開(kāi)連接到Socket的輸入輸出流
3.按照一定的協(xié)議對(duì)Socket進(jìn)行讀寫(xiě)操作
4.關(guān)閉Socket

http與https的區(qū)別

來(lái)源

什么是 HTTPS?

HTTPS (基于安全套接字層的超文本傳輸協(xié)議 或者是 HTTP over SSL) 是一個(gè) Netscape 開(kāi)發(fā)的 Web 協(xié)議。

你也可以說(shuō):HTTPS = HTTP + SSL

HTTPS 在 HTTP 應(yīng)用層的基礎(chǔ)上使用安全套接字層作為子層。

為什么需要 HTTPS ?

超文本傳輸協(xié)議 (HTTP) 是一個(gè)用來(lái)通過(guò)互聯(lián)網(wǎng)傳輸和接收信息的協(xié)議。HTTP 使用請(qǐng)求/響應(yīng)的過(guò)程,因此信息可在服務(wù)器間快速、輕松而且精確的進(jìn)行傳輸。當(dāng)你訪問(wèn) Web 頁(yè)面的時(shí)候你就是在使用 HTTP 協(xié)議,但 HTTP 是不安全的,可以輕松對(duì)竊聽(tīng)你跟 Web 服務(wù)器之間的數(shù)據(jù)傳輸。在很多情況下,客戶和服務(wù)器之間傳輸?shù)氖敲舾行?,需要防止未?jīng)授權(quán)的訪問(wèn)。為了滿足這個(gè)要求,網(wǎng)景公司(Netscape)推出了HTTPS,也就是基于安全套接字層的 HTTP 協(xié)議。

HTTP 和 HTTPS 的相同點(diǎn)

大多數(shù)情況下,HTTP 和 HTTPS 是相同的,因?yàn)槎际遣捎猛粋€(gè)基礎(chǔ)的協(xié)議,作為 HTTP 或 HTTPS 客戶端——瀏覽器,設(shè)立一個(gè)連接到 Web 服務(wù)器指定的端口。當(dāng)服務(wù)器接收到請(qǐng)求,它會(huì)返回一個(gè)狀態(tài)碼以及消息,這個(gè)回應(yīng)可能是請(qǐng)求信息、或者指示某個(gè)錯(cuò)誤發(fā)送的錯(cuò)誤信息。系統(tǒng)使用統(tǒng)一資源定位器 URI 模式,因此資源可以被唯一指定。而 HTTPS 和 HTTP 唯一不同的只是一個(gè)協(xié)議頭(https)的說(shuō)明,其他都是一樣的。

HTTP 和 HTTPS 的不同之處

  1. HTTP 的 URL 以 http:// 開(kāi)頭,而 HTTPS 的 URL 以 https:// 開(kāi)頭
  2. HTTP 是不安全的,而 HTTPS 是安全的
  3. HTTP 標(biāo)準(zhǔn)端口是 80 ,而 HTTPS 的標(biāo)準(zhǔn)端口是 443
  4. 在 OSI 網(wǎng)絡(luò)模型中,HTTP 工作于應(yīng)用層,而 HTTPS 工作在傳輸層
  5. HTTP 無(wú)需加密,而 HTTPS 對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密
  6. HTTP 無(wú)需證書(shū),而 HTTPS 需要認(rèn)證證書(shū)

HTTPS 如何工作?

使用 HTTPS 連接時(shí),服務(wù)器要求有公鑰和簽名的證書(shū)。

當(dāng)使用 https 連接,服務(wù)器響應(yīng)初始連接,并提供它所支持的加密方法。作為回應(yīng),客戶端選擇一個(gè)連接方法,并且客戶端和服務(wù)器端交換證書(shū)驗(yàn)證彼此身份。完成之后,在確保使用相同密鑰的情況下傳輸加密信息,然后關(guān)閉連接。為了提供 https 連接支持,服務(wù)器必須有一個(gè)公鑰證書(shū),該證書(shū)包含經(jīng)過(guò)證書(shū)機(jī)構(gòu)認(rèn)證的密鑰信息,大部分證書(shū)都是通過(guò)第三方機(jī)構(gòu)授權(quán)的,以保證證書(shū)是安全的。

換句話說(shuō),HTTPS 跟 HTTP 一樣,只不過(guò)增加了 SSL

HTTP 包含如下動(dòng)作:

  1. 瀏覽器打開(kāi)一個(gè) TCP 連接
  2. 瀏覽器發(fā)送 HTTP 請(qǐng)求到服務(wù)器端
  3. 服務(wù)器發(fā)送 HTTP 回應(yīng)信息到瀏覽器
  4. TCP 連接關(guān)閉

SSL 包含如下動(dòng)作:

  1. 驗(yàn)證服務(wù)器端
  2. 允許客戶端和服務(wù)器端選擇加密算法和密碼,確保雙方都支持
  3. 驗(yàn)證客戶端(可選)
  4. 使用公鑰加密技術(shù)來(lái)生成共享加密數(shù)據(jù)
  5. 創(chuàng)建一個(gè)加密的 SSL 連接
  6. 基于該 SSL 連接傳遞 HTTP 請(qǐng)求

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容