網(wǎng)絡(luò)通信(TCP/UDP HTTP協(xié)議 TCP為什么安全)
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ū)別
什么是 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 的不同之處
- HTTP 的 URL 以 http:// 開(kāi)頭,而 HTTPS 的 URL 以 https:// 開(kāi)頭
- HTTP 是不安全的,而 HTTPS 是安全的
- HTTP 標(biāo)準(zhǔn)端口是 80 ,而 HTTPS 的標(biāo)準(zhǔn)端口是 443
- 在 OSI 網(wǎng)絡(luò)模型中,HTTP 工作于應(yīng)用層,而 HTTPS 工作在傳輸層
- HTTP 無(wú)需加密,而 HTTPS 對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密
- 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)作:
- 瀏覽器打開(kāi)一個(gè) TCP 連接
- 瀏覽器發(fā)送 HTTP 請(qǐng)求到服務(wù)器端
- 服務(wù)器發(fā)送 HTTP 回應(yīng)信息到瀏覽器
- TCP 連接關(guān)閉
SSL 包含如下動(dòng)作:
- 驗(yàn)證服務(wù)器端
- 允許客戶端和服務(wù)器端選擇加密算法和密碼,確保雙方都支持
- 驗(yàn)證客戶端(可選)
- 使用公鑰加密技術(shù)來(lái)生成共享加密數(shù)據(jù)
- 創(chuàng)建一個(gè)加密的 SSL 連接
- 基于該 SSL 連接傳遞 HTTP 請(qǐng)求