網(wǎng)絡(luò)
- HTTP請(qǐng)求類型
GET POST HEAD PUT DELETE OPTION
- GET POST區(qū)別
GET:安全 冪等 可緩存
POST:非安全 非冪等 非可緩存
安全:(GET HEAD OPTION)
冪等:(GET PUT DELETE)
可緩存:(GET HEAD)
- 三次握手 四次揮手
三次握手
C SYN
S SYN+ACK
C ACK
四次揮手
C FIN
S ACK
S FIN+ACK
C ACK
為什么三次:
- 三次才可以阻止重復(fù)歷史連接 (舊的SYN先到
- 三次才可以同步初始序列號(hào)(SYN +ACK才可以保證序列號(hào)一致,序列號(hào)保證去重復(fù))
- 三次可以避免資源浪費(fèi)
為什么四次揮手:
服務(wù)器通常等待完成數(shù)據(jù)的發(fā)送和處理,所以 服務(wù)端ACK和FIN分開發(fā)送
2MSL maximun segment lifttime 報(bào)文最大生存事件(2MSL=60s)
- HTTP特點(diǎn) 和優(yōu)缺點(diǎn) 等
1.HTTP 是靈活可擴(kuò)展的花墩,可以任意添加頭字段實(shí)現(xiàn)功能
2.HTTP 是可靠傳輸,利用TCP/IP召川,‘盡量’保證數(shù)據(jù)到達(dá)
3.HTTP 是應(yīng)用層協(xié)議,比起FTP胸遇,SSH荧呐,SMTP,它更通用纸镊,能夠傳輸人意數(shù)據(jù)
4.HTTP 是請(qǐng)求-應(yīng)答模式倍阐,客戶端主動(dòng)請(qǐng)求,服務(wù)器被動(dòng)回復(fù)(無連接)
5.HTTP 本質(zhì)是無狀態(tài)的薄腻,每個(gè)請(qǐng)求無關(guān)聯(lián)
無連接 (HTTP持久連接)收捣,減少建立
無狀態(tài) (Cookie/Session)
頭部字段
connection: keep-alive
time:20
max:10(多少個(gè)請(qǐng)求響應(yīng)對(duì))
如何判斷請(qǐng)求結(jié)束
Content-length :1024
chunked:空格
優(yōu)缺點(diǎn)
1.HTTP 最大的優(yōu)點(diǎn)是簡(jiǎn)單,靈活庵楷,易于擴(kuò)展
2.HTTP 有成熟的軟硬件環(huán)境罢艾,應(yīng)用廣泛,是互聯(lián)網(wǎng)的基礎(chǔ)設(shè)施
3.HTTP 是無狀態(tài)尽纽,可以輕松實(shí)現(xiàn)集群化咐蚯,擴(kuò)展性能,可以通過cookie實(shí)現(xiàn)有狀態(tài)
4.HTTP 明文傳輸弄贿,更方便分析研究春锋,已被竊聽
5.HTTP 死不安全的,無法驗(yàn)證雙方身份差凹,也無法判斷是否篡改
6.HTTP性能不算差侧馅,但是還有提升空間
HTTP1.1
長(zhǎng)鏈接:解決效率問題,一個(gè)連接收發(fā)多個(gè)響應(yīng)
2.過多長(zhǎng)鏈接也會(huì)占用資源馁痴。需要策略選擇關(guān)閉
3.隊(duì)頭阻塞 可以用 并發(fā)連接 和 域名分片解決
HTTP2
1.取消了小版本號(hào),沒有2.0
2.兼容HTTP1
3.HPACK壓縮頭部罗晕,消除重復(fù)冗余數(shù)據(jù)
4.二進(jìn)制楨傳輸,而非header+body
5.虛擬流:隊(duì)頭堵塞赠堵,多路復(fù)用
6.安全性提升1.2+
HTTP3.0:
谷歌開發(fā)的QUIC協(xié)議,利用UDP實(shí)現(xiàn)可靠數(shù)據(jù)傳輸茫叭。
-----HTTP架構(gòu)-----
HTTP
SSL/TLS
TCP/IP
-----HTTP2架構(gòu)-----
HTTP
HPack/Stream
TLS 1.2+
TCP/IP
- Charles
中間人攻擊,CA證書 完全信任
竊聽風(fēng)險(xiǎn) 加密
篡改風(fēng)險(xiǎn) 摘要
冒充風(fēng)險(xiǎn) 證書
- HTTPS + SSL/TLS 流程
TCP/IP 中間插入了 SSL/TLS
C:TSL版本 杂靶,支持的加密算法 酱鸭,隨機(jī)數(shù) C
S:商定的加密算法吗垮,隨機(jī)數(shù)S凹髓,server證書
C:驗(yàn)證證書(CA發(fā)布),組裝會(huì)話密鑰 (隨機(jī)C+隨機(jī)S+預(yù)主密鑰
C:通過公鑰對(duì) 預(yù)主密鑰(pre-master key)加密傳輸 (摘要算法)
S:私鑰解密獲得主密鑰蔚舀,組裝會(huì)話密鑰
C:加密的握手消息
S:加密的握手消息
通信建立非對(duì)稱加密交互密鑰
通信用對(duì)稱加密
- UDP 和 TCP
UDP
無連接
盡最大努力交付
面向報(bào)文(不合并 不拆分)
復(fù)用 分用 差錯(cuò)檢測(cè)
TCP
面向連接 :開始之前需要連接(三握四揮)
可靠傳輸 (無差錯(cuò),不丟失赌躺,不重復(fù),按序到達(dá))
面向字節(jié)流
流量控制(滑動(dòng)窗口協(xié)議礼患,發(fā)送窗口接收大小是钥,接受窗口發(fā)送大小)
擁塞控制(慢開始缅叠,擁塞避免悄泥。快恢復(fù)肤粱,快重傳:新的x+3)弹囚。先指數(shù)到16,線性
- DNS (端口53)
使用 UDP & 明文
遞歸查詢 (幫你問一下)本地DNS-根域DNS-頂級(jí)DNS-權(quán)限D(zhuǎn)NS
迭代查詢 (告訴你誰(shuí)可能知道)
DNS劫持领曼,竊聽 釣魚DNS鸥鹉。 DNS解析在HTTP連接之前
解決 劫持
- httpDNS使用 HTTPS訪問80端口
- 長(zhǎng)連接 Client - 長(zhǎng)連Server - 內(nèi)網(wǎng) - server
DNS解析轉(zhuǎn)發(fā)蛮穿,移動(dòng)為了節(jié)省資源,轉(zhuǎn)發(fā)給電信DNS毁渗,但是移動(dòng)電信可能不一樣绪撵,跨網(wǎng)變慢
- Session/Cookie
server生成cookie,客戶端記錄
cookie主要記錄用戶狀態(tài)祝蝠,區(qū)分用戶音诈,狀態(tài)保存在客戶端
修改:新cookie覆蓋老cookie,規(guī)則name path domain需要一致
刪除:新cookie覆蓋老cookie绎狭,细溅,規(guī)則name path domain需要一致 設(shè)置過期時(shí)間 或者
Max-Age, Expires,Domain(作用域)儡嘶,HttpOnly(只能通過HTTP傳輸)
cookie安全
- 加密
- 只在https攜帶cookie
- 設(shè)置cookie為httpOnly喇聊,防止跨站腳本(https://blog.csdn.net/qq_38553333/article/details/80055521)js腳本將無法讀取到cookie
Session
Session主要記錄用戶狀態(tài),區(qū)分用戶蹦狂,狀態(tài)保存在服務(wù)端
依賴cookie機(jī)制
server 生成sessionId set-Cookie sessid=xxxx
client 發(fā)送 Cookie:sessid=xxxx誓篱,通過sessid區(qū)別
scoket
HTTP:超文本傳輸協(xié)議,首先它是一個(gè)協(xié)議凯楔,并且是基于TCP/IP協(xié)議基礎(chǔ)之上的應(yīng)用層協(xié)議窜骄。TCP/IP協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸摆屯,HTTP是應(yīng)用層協(xié)議邻遏,主要解決如何包裝數(shù)據(jù)。HTTP協(xié)議詳細(xì)規(guī)定了瀏覽器與服務(wù)器之間相互通信的規(guī)則虐骑,是萬(wàn)維網(wǎng)交換信息的基礎(chǔ)准验。HTTP是基于請(qǐng)求-響應(yīng)形式并且是短連接,并且是無狀態(tài)的協(xié)議廷没。針對(duì)其無狀態(tài)特性糊饱,在實(shí)際應(yīng)用中又需要有狀態(tài)的形式,因此一般會(huì)通過session/cookie技術(shù)來解決此問題颠黎。
Socket:Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層, 它是一組接口另锋。 Socket不屬于協(xié)議范疇,而是一個(gè)調(diào)用接口(API)盏缤,Socket是對(duì)TCP/IP協(xié)議的封裝,通過調(diào)用Socket台舱,才能使用TCP/IP協(xié)議。Socket連接是長(zhǎng)連接竞惋,理論上客戶端和服務(wù)器端一旦建立連接將不會(huì)主動(dòng)斷開此連接。Socket連接屬于請(qǐng)求-響應(yīng)形式嗓奢,服務(wù)端可主動(dòng)將消息推送給客戶端浑厚。