計(jì)算機(jī)網(wǎng)絡(luò)知識(shí)總結(jié)

作為程序員,不論在大學(xué)還是在工作中,網(wǎng)絡(luò)這個(gè)詞是再熟悉不過了,作為移動(dòng)端的一枚開發(fā)者,平時(shí)寫業(yè)務(wù)需求,請(qǐng)求數(shù)據(jù)都要使用網(wǎng)絡(luò),那還記得網(wǎng)絡(luò)的知識(shí)點(diǎn)么,今天就來回顧一下:

一、網(wǎng)絡(luò)的基礎(chǔ)知識(shí)

計(jì)算機(jī)網(wǎng)絡(luò):可以根據(jù)規(guī)模分WAN,Wide Area Network 廣域網(wǎng),和LAN局域網(wǎng)。通過電腦連接交換機(jī)再到路由器的連接。
TCP/IP機(jī)制:它是TCP/IP通信協(xié)議的統(tǒng)稱。我們常聽到協(xié)議入IP,TCP,HTTP等協(xié)議,記?。?code>TCP/IP就是IP,TCP,HTTP等協(xié)議的集合。協(xié)議就是計(jì)算機(jī)與計(jì)算機(jī)之間通過網(wǎng)絡(luò)實(shí)現(xiàn)通信時(shí)需要達(dá)成的一種的“約定”。這些協(xié)議就是讓不同廠商的設(shè)備,不同的CPU和不同的操作系統(tǒng)組成的計(jì)算機(jī)之間進(jìn)行通信

image.png

HTTPS:其實(shí)HTTP協(xié)議是承載于TCP協(xié)議之上的,在HTTPTCP之間添加一個(gè)安全協(xié)議層,SSL或者TSL(ssl/tsl協(xié)議傳輸,包含證書,卸載,流量轉(zhuǎn)發(fā),負(fù)載均衡,頁面適配,瀏覽器適配,refer傳遞等),則就是常說的HTTPS
它是面向連接的,可靠的,基于字節(jié)流傳輸層通信協(xié)議。

從一個(gè)HTTP請(qǐng)求來看網(wǎng)絡(luò)分層原理


image.png

二、HTTP

HTTP方法
  • GET方法獲取資源:請(qǐng)求獲取Request-URI所標(biāo)識(shí)的資源
  • POST方法傳輸資源:在Request-URI所標(biāo)識(shí)的資源后附加新的數(shù)據(jù)
  • PUT方法更新資源
  • DELETE方法刪除資源
  • HEAD方法獲得報(bào)文首部
  • OPTIONS方法,用來跨域請(qǐng)求(OPTIONS 請(qǐng)求與 HEAD 類似,一般也是用于客戶端查看服務(wù)器的性能)
  • CONNECT方法,用來建立連接,用于代理服務(wù)器

getpost的差別
緩存角度:GET請(qǐng)求后瀏覽器會(huì)主動(dòng)緩存POST 默認(rèn)情況下
參數(shù)角度: GET請(qǐng)求一般放在URL中,因此不安全,POST請(qǐng)求放在請(qǐng)求體中,相對(duì)而言較為安全,但是在抓包的情況下都是一樣的。
編碼角度: GET請(qǐng)求只能進(jìn)行URL編碼,只能接受ASCII碼,而POST支持更多的編碼類型對(duì)數(shù)據(jù)類型限值。
GET請(qǐng)求冪等,POST請(qǐng)求不冪等,冪等指發(fā)送 M 和 N 次請(qǐng)求(兩者不相同且都大于1),服務(wù)器上資源的狀態(tài)一致。

HTTP報(bào)文組成

1、請(qǐng)求報(bào)文:請(qǐng)求方法 ,請(qǐng)求URL,HTTP協(xié)議以及版本,報(bào)文頭,報(bào)文體

  • 請(qǐng)求行:有請(qǐng)求方法,請(qǐng)求URL,http協(xié)議以及版本;
  • 請(qǐng)求頭:一堆鍵值對(duì)
  • 空行:當(dāng)服務(wù)器在解析請(qǐng)求頭的時(shí)候,遇到了空行,表明后面的內(nèi)容是請(qǐng)求體
  • 請(qǐng)求體:請(qǐng)求數(shù)據(jù)

2、響應(yīng)文:報(bào)文協(xié)議以及版本,狀態(tài)碼以及狀態(tài)描述,響應(yīng)頭,響應(yīng)體

  • 狀態(tài)行:http協(xié)議和版本,狀態(tài)碼以及狀態(tài)描述
  • 響應(yīng)頭
  • 空行
  • 響應(yīng)體


    image.png

3、持久連接
在http1.0中,客戶端每隔很短時(shí)間會(huì)對(duì)服務(wù)器發(fā)出請(qǐng)求,查看是否有新的數(shù)據(jù),只要輪詢足夠快,就可以造成交互實(shí)時(shí)進(jìn)行,但這個(gè)做法,會(huì)對(duì)兩端造成大量的性能浪費(fèi)。
對(duì)于http1.1中的長(zhǎng)連接,使用connection:keep-alive進(jìn)行長(zhǎng)連接,客戶端請(qǐng)求一次,但是服務(wù)器會(huì)將繼續(xù)保持連接,再次請(qǐng)求時(shí),避免重新建立連接。
注意,keep-alive不會(huì)永久保持連接保持一個(gè)時(shí)間段。

4、HTTPS協(xié)議:由于HTTP天生“明文”的特點(diǎn),整個(gè)傳輸過程完全透明,任何人都能夠在鏈路中截獲,修改或者偽造請(qǐng)求、響應(yīng)報(bào)文,數(shù)據(jù)具有可信性。
使用HTTPS時(shí),所有的HTTP請(qǐng)求和響應(yīng)發(fā)送到網(wǎng)絡(luò)前,都要進(jìn)行加密。

image.png

https = http + ssl/tls

TLS/SSL 的功能實(shí)現(xiàn)主要依賴于三類基本算法:散列函數(shù) 、對(duì)稱加密和非對(duì)稱加密,其利用非對(duì)稱加密實(shí)現(xiàn)身份認(rèn)證和密鑰協(xié)商,對(duì)稱加密算法采用協(xié)商的密鑰對(duì)數(shù)據(jù)加密,基于散列函數(shù)驗(yàn)證信息的完整性。

對(duì)稱加密:加密 解密使用同一密鑰

非對(duì)稱加密:公鑰-隨意分發(fā),私鑰-服務(wù)器自己保持

公鑰加密的數(shù)據(jù),只能通過私鑰解密
私鑰加密的數(shù)據(jù),所有公鑰能解密(公鑰都可以解開,指的是一對(duì)秘鑰)
公鑰可以發(fā)送給所有的客戶端,私鑰只保存在服務(wù)器端

5、URL統(tǒng)一資源定位符,URL的結(jié)構(gòu):


image.png

6、HTTP狀態(tài)碼
302:臨時(shí)重定向
400:籠統(tǒng)地提示了錯(cuò)誤
403:服務(wù)器禁止訪問
405:請(qǐng)求方法不被服務(wù)器端允許
500:服務(wù)器報(bào)錯(cuò)
501:客戶端請(qǐng)求的功能還不支持
503:服務(wù)器當(dāng)時(shí)很忙,暫時(shí)無法響應(yīng)服務(wù)

「1xx」: 代表請(qǐng)求已被接受,需要繼續(xù)處理。
「2xx」: 表示成功狀態(tài)。
「3xx」: 重定向狀態(tài)。
「4xx」: 客戶端錯(cuò)誤。
「5xx」: 服務(wù)器端錯(cuò)誤。

7、Accept字段理解


image.png
  • 數(shù)據(jù)格式
  • 壓縮方式
  • 支持語言
  • 字符集

8、TCP和UDP的區(qū)別
TCP是一個(gè)面向連接,可靠基于字節(jié)流傳輸層協(xié)議。

UDP是一個(gè)面向無連接的傳輸層協(xié)議。

TCP是面向連接的,客戶端和服務(wù)器端的連接,雙方互相通信之前,TCP需要三次握手建立連接,而UDP沒有建立連接的過程

HTTPS請(qǐng)求過程

image.png
  • Client發(fā)起一個(gè)HTTPS請(qǐng)求,連接443端口。這個(gè)過程可以理解成是「請(qǐng)求公鑰的過程」。
  • Server端收到請(qǐng)求后,通過第三方機(jī)構(gòu)私鑰加密,會(huì)把數(shù)字證書(也可以認(rèn)為是公鑰證書)發(fā)送給Client。
  • 瀏覽器(客戶端)安裝后會(huì)自動(dòng)帶一些權(quán)威第三方機(jī)構(gòu)公鑰,使用匹配的公鑰對(duì)數(shù)字簽名進(jìn)行解密。
    根據(jù)簽名生成的規(guī)則對(duì)網(wǎng)站信息進(jìn)行本地簽名生成,然后兩者比對(duì)。
    通過比對(duì)兩者簽名,匹配則說明認(rèn)證通過,不匹配則獲取證書失敗。
  • 在安全拿到「服務(wù)器公鑰」后,客戶端Client隨機(jī)生成一個(gè)「對(duì)稱密鑰」,使用「服務(wù)器公鑰」(證書的公鑰)加密這個(gè)「對(duì)稱密鑰」,發(fā)送給Server(服務(wù)器)。
  • Server(服務(wù)器)通過自己的私鑰,對(duì)信息解密,至此得到了「對(duì)稱密鑰」,此時(shí)兩者都擁有了相同的「對(duì)稱密鑰」?!?/li>
  • 接下來,就可以通過該對(duì)稱密鑰對(duì)傳輸?shù)男畔⒓用?解密啦,從上面圖舉個(gè)例子??

Client用戶使用該「對(duì)稱密鑰」加密'明文內(nèi)容B',發(fā)送給Server(服務(wù)器)
Server使用該「對(duì)稱密鑰」進(jìn)行解密消息,得到明文內(nèi)容B。

  • 為了防止中間人截取、修改公鑰,需要「第三方認(rèn)證」,最重要的是「數(shù)字簽名」,避免了獲取的公鑰是中間人的

數(shù)字簽名:將網(wǎng)站的信息,通過特定的算法加密,比如MD5,加密之后,再通過服務(wù)器的私鑰進(jìn)行加密,形成「加密后的數(shù)字簽名」。
瀏覽器會(huì)去安裝一些比較權(quán)威的第三方認(rèn)證機(jī)構(gòu)的公鑰,比如VeriSign、Symantec以及GlobalSign等等。驗(yàn)證數(shù)字簽名的時(shí)候,會(huì)直接從本地拿到相應(yīng)的第三方的公鑰,對(duì)私鑰加密后的數(shù)字簽名進(jìn)行解密得到真正的簽名。然后客戶端利用簽名生成規(guī)則進(jìn)行簽名生成,看兩個(gè)簽名是否匹配,如果匹配認(rèn)證通過,不匹配則獲取證書失敗。

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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