網(wǎng)絡(luò)編程協(xié)議解析
時(shí)間:2023-07-18 19:03:02 | 來源:網(wǎng)站運(yùn)營
時(shí)間:2023-07-18 19:03:02 來源:網(wǎng)站運(yùn)營
網(wǎng)絡(luò)編程協(xié)議解析:
一、網(wǎng)絡(luò)協(xié)議分層OSI七層:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層。
TCP/IP四(五)層 :物理層(主要是光電信號(hào)的傳輸)、 數(shù)據(jù)鏈路層(MAC地址、以太網(wǎng)協(xié)議)、網(wǎng)絡(luò)層(IP協(xié)議、主機(jī)到主機(jī)的通信)、傳輸層(TCP協(xié)議,端口到端口的通信)、應(yīng)用層(HTTP、SSL、FTP等)。 ps:物理層考慮的比較少,可以把物理層和數(shù)據(jù)鏈路層并稱物理鏈路層。
分層好處:
各自獨(dú)立、靈活,一層改變不會(huì)引起系統(tǒng)問題。結(jié)構(gòu)上易分割,容易調(diào)試,促進(jìn)標(biāo)準(zhǔn)化工作。
二、HTTP和HTTPS的區(qū)別1.端口:HTTP 80 | HTTPS 443
2.安全性:HTTP 明文傳輸 | HTTPS 加密傳輸
3.證書申請(qǐng)方式:HTTP 免費(fèi)申請(qǐng) | HTTPS 需要到ca申請(qǐng),一般需要交費(fèi)。
4.連接方式:HTTP 無狀態(tài) | HTTPS SSL+ HTTP 可加密傳輸、身份認(rèn)證等。
(PS:因?yàn)閔ttps 需要在http的基礎(chǔ)上加上ssl 也就是 需要交換TCP的3個(gè)包的基礎(chǔ)上還要交換SSL的9個(gè)包,所以HTTP比HTTPS快)
三、 HTTPS 的連接過程1.首先客戶端先給服務(wù)器發(fā)送一個(gè)請(qǐng)求
2.服務(wù)器發(fā)送一個(gè)SSL證書給客戶端,內(nèi)容包括:證書的發(fā)布機(jī)構(gòu)、有效期、所有者、簽名以及公鑰
3.客戶端對(duì)發(fā)來的公鑰進(jìn)行真?zhèn)涡r?yàn),校驗(yàn)結(jié)果為真則使用公鑰對(duì)對(duì)稱加密算法以及對(duì)稱密鑰進(jìn)行加密
4.服務(wù)器端使用私鑰進(jìn)行解密并使用對(duì)稱密鑰加密確認(rèn)信息發(fā)送給客戶端
5.隨后客戶端和服務(wù)端就使用對(duì)稱密鑰進(jìn)行信息傳輸
四、HTTP請(qǐng)求過程1. 域名解析IP (瀏覽器DNS緩存、系統(tǒng)DNS緩存、host文件、dns域名服務(wù)器查詢)
2.TCP 三次握手建立連接狀態(tài)
3.服務(wù)器響應(yīng)請(qǐng)求、瀏覽器獲取響應(yīng)結(jié)果。(具體到php項(xiàng)目的話 此步驟應(yīng)該為 tcp建立了端口的連接后,將請(qǐng)求指定給監(jiān)聽80端口的nginx,nginx識(shí)別到php請(qǐng)求,不能直接與php通信,故將請(qǐng)求轉(zhuǎn)發(fā)給了fastcgi模塊,也就是實(shí)現(xiàn)程序php-fpm。php-fpm會(huì)有一個(gè)master進(jìn)程管理著多個(gè)worker進(jìn)程,多個(gè)worker進(jìn)程通過爭(zhēng)搶accept鎖的方式獲得這次請(qǐng)求的執(zhí)行權(quán),一系列的初始化后,zend引擎對(duì)被請(qǐng)求頁面進(jìn)行語法和詞法解析,生成opcode,然后按順序執(zhí)行opcode,最終將處理結(jié)果返回給nginx,再由nginx返回給終端)
4.瀏覽器根據(jù)響應(yīng)結(jié)果渲染頁面。
五、TCP協(xié)議三次握手、四次揮手過程1.建立連接(三次握手) 圖片引用。圖中的SYN_SENT狀態(tài)應(yīng)該是拼寫錯(cuò)誤,正確為SYN_SEND。
2. 斷開連接(四次揮手) 圖片引用。
六、HTTP狀態(tài)碼1xx 信息型狀態(tài)碼,接收的請(qǐng)求正在處理。
2xx 成功狀態(tài)碼 請(qǐng)求正常處理完畢。
3xx 重定向狀態(tài)碼 需要加附加操作來完成請(qǐng)求。
4xx 客戶端錯(cuò)誤狀態(tài)碼 服務(wù)器端無法處理請(qǐng)求。
5xx 服務(wù)端錯(cuò)誤狀態(tài)碼 服務(wù)器處理請(qǐng)求出錯(cuò)。
301 永久重定向 302暫時(shí)重定向 401未授權(quán) 403禁止訪問 404文件未找到 499 超時(shí)(服務(wù)端處理時(shí)間過長(zhǎng),客戶端主動(dòng)斷開連接) 500 服務(wù)器內(nèi)部錯(cuò)誤 502 網(wǎng)關(guān)接到的上游服務(wù)器響應(yīng)無效 504 網(wǎng)關(guān)超時(shí)
七、GET和POST的區(qū)別1. url可見性 get可見,參數(shù)在url中。post不可見,參數(shù)在http包內(nèi)(request body)。
2.數(shù)據(jù)長(zhǎng)度限制。get 受不同瀏覽器的url長(zhǎng)度限制,基本上在2k-4k之間。理論上post無長(zhǎng)度限制,起限制作用的是服務(wù)器的處理程序的處理能力 ,可以修改服務(wù)器相關(guān)配置。
3.安全性上, post比get安全稍微好一些,但是沒什么用,抓包一樣可見,防君子不防小人。
4.編碼方式上,get只支持url編碼,post支持多種編碼方式。
5.數(shù)據(jù)類型上,get只支持ASCII, post無限制,支持二進(jìn)制數(shù)據(jù)。
6.緩存上,get的數(shù)據(jù)可以緩存。post的無法緩存 (GET請(qǐng)求會(huì)被瀏覽器主動(dòng)cache,而POST不會(huì),除非手動(dòng)設(shè)置)
7.后退按鈕get參數(shù)還在,歷史記錄中也可追溯。 post的參數(shù)均丟失。
8. get 的 效率
高!八、cookie和session 的區(qū)別session 是 服務(wù)端 保存的數(shù)據(jù)結(jié)構(gòu)。一般用來跟蹤用戶狀態(tài)。
cookie 是 客戶端 保存用戶信息的一種機(jī)制。用來記錄用戶信息。一般大小不超過4k。
session 一般用session_id 來進(jìn)行唯一性標(biāo)識(shí)。 cookie是實(shí)現(xiàn)并傳遞session_id的一種方式, 也可以通過url和header傳遞。
如果你
喜歡我寫的
技術(shù)文章以及
面試總結(jié),歡迎關(guān)注收看我的視頻,并且
點(diǎn)贊、收藏、關(guān)注我哦。
我是luke,感謝你的關(guān)注!
很多PHPer在進(jìn)階的時(shí)候總會(huì)遇到一些
問題和瓶頸,業(yè)務(wù)代碼寫多了沒有方向感,不知道該從那里入手去提升,對(duì)此我整理了一些資料,希望能夠去幫助到小伙伴們,可以關(guān)注我私聊獲取。也可以加入到我的圈子一起學(xué)習(xí)成長(zhǎng)哦【
架構(gòu)師之路】點(diǎn)擊鏈接申請(qǐng)加入圈子
關(guān)鍵詞:協(xié)議,網(wǎng)絡(luò)