目錄
OSI參考模型
物理層
①定義物理設備的標準,比如網線的類型、光纖接口的類型、各種傳輸介質的傳輸速率;②傳輸比特流,將比特流(二進制數據)轉換爲電信號、光信號進行傳輸,到達目的地後再轉換爲比特流,即模數轉換、數模轉換。網卡就是工作在這一層的
數據鏈路層
①傳輸比特流時可能會發生錯傳、數據傳輸不完整的問題,數據鏈路層定義瞭如何格式化數據、如何訪問物理機,提供錯誤檢測、糾正的功能,確保傳輸的可靠性;②將比特數據組裝成幀進行傳輸,交換機工作在這一層,交換機收到後對幀解碼,根據幀中包含的物理機信息把幀發送給正確的接收方
網絡層
①將網絡地址(ip地址)翻譯成對應的物理地址(mac地址),並決定數據如何從發送方路由到接收方,通過綜合考慮發送優先權、網絡擁塞程度、服務質量以及可選路由的時間花費,選擇從發送方到接收方的最佳路徑,路由器屬於這一層,這一層的數據稱爲數據包,這一層的主要協議是tcp/ip中的ip協議
傳輸層
傳輸層是OSI7層模型中最重要的一層,解決了主機將的數據傳輸、傳輸質量問題。①基於流量控制、接收方可接收數據的快慢程度規定適當的發送速率,②按照網絡傳輸的最大尺寸(帶寬),將數據強制切割爲較小的數據片,並對數據片編號,接收方收到數據片後根據編號排序,組裝數據片得到完整數據。這一層的主要協議是tcp/ip中的tcp、udp協議
會話層
管理應用程序之間的通信,自動收發包、自動尋址
表示層
進行數據的格式化、編碼解碼、加密解密、壓縮解壓
應用層
規定發送方、接收方必須使用固定長度的消息頭,消息頭必須含有指定部分,消息頭必須記錄消息體的數據長度等信息,以使應用更加方便地使用接收到的數據。這一層的主要協議是tcp/ip中的http協議
發送方是自上而下,接收方是自下而上。
TCP/IP
TCP/IP是一個協議簇,不僅僅是TCP、IP協議。OSI相當於網絡通信的規範,側重於理論設計,TCP/IP相當於具體實現,側重於實現。
處理頭部數據:發送方自上而下,接收方自下而上。
ip協議負責將數據包路由到目的地,但ip協議沒有確認數據包是否按順序發送、是否被破壞,ip協議是不可靠的,需要由上層協議來做出控制。
TCP
TCP是一種傳輸控制協議
TCP的報文結構
ip唯一標識主機,port唯一標識主機上的程序,ip、port共同組成套接字(socket)。
序號即數據包的編號,用於確認數據包是否丟失。滑動窗口用於控制流量、數據發送速率。校驗和用於確認數據包中的數據是否無誤。
TCP的特點
- 面向連接、可靠、基於字節流,將應用層的數據流分割爲報文段,通過ip協議路由到目的地
- 區分客戶端、服務端
- 支持滑動窗口,通過滑動窗口來控制流量、數據發送速率
- 支持錯誤重傳。tcp將數據包編號,對方收到則返回ack確認,如果在指定時間內未返回ack確認,則認爲傳輸失敗自動重傳,以此保證數據包不丟失(完整性)
- 使用奇偶校驗和來檢驗數據是否有誤,保證數據的正確性。發送、接收時都要計算校驗和,比較發送、接收的奇偶校驗和是否一致
TCP的3次握手
爲什麼需要3次握手才能建立起連接?
爲了初始化Sequence Number,通信雙方都要告知對方自己的Sequence Number值,這個值要作爲後續數據通信的序號,tcp用這個值來拼接數據、保證接收到的數據不會亂序。
TCP的4次揮手
4次揮手由客戶端、服務端任一方的close()觸發。
爲什麼需要4次揮手才能斷開連接?
因爲tcp是全雙工的,發送方、接收方都需要FIN報文、ACK報文,2*2=4。全雙工:雙方都可以發送數據、接收數據,半雙工:只能一方發送、一方接收。
爲什麼會有TIME_WAIT狀態?
- 確保有足夠的時間讓對方收到ack包
- 避免新舊連接混淆
查看TIME_WAIT、CLOSE_WAIT、FIN_WAIT、ESTABLISHED"的數量
netstat -n | awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'
服務器出現大量TIME_WAIT狀態的原因?
客戶端關閉socket,服務器忙於讀、寫,沒有及時關閉連接。解決方式:
- 檢查釋放資源部分的代碼
- 檢查處理請求的線程配置
UDP
UDP的報文結構
UDP特點
- 不面向連接,不維護連接狀態,可以同時向多個主機發送同一條消息
- 數據包小,不支持滑動窗口、錯誤重傳,傳輸速度更快
- 不區分客戶端、服務端
- 是不可靠傳輸,盡最大努力交付,不保證交付成功
TCP、UDP的區別
- tcp面向連接、要維護連接狀態,區分客戶端、服務端;UDP不面向連接、不維護連接狀態,不區分客戶端、服務端
- tcp提供可靠傳輸,udp不可靠,只是盡最大努力交付
- tcp接收報文無序,但最終要報頭攜帶的序號進行組裝,udp無序
- tcp報頭體積大,udp報頭體積小
- tcp速度慢,udp速度快
HTTP
http是超文本傳輸協議
HTTP的請求結構
HTTP的響應結構
HTTP 請求-響應過程
- 客戶端連接到web服務器
- 客戶端發送http請求
- 服務器接收http請求並返回響應
- 釋放tcp連接
- 客戶端解析響應
瀏覽器地址欄輸入url,按下Enter以後的過程
- dns解析,獲取域名對應的ip地址
- 建立tcp連接
- 瀏覽器發送http請求
- 服務器處理請求並返回http報文
- 瀏覽器解析響應
- 連接結束
HTTP狀態碼
- 1xx:服務器已接收請求,正在處理
- 2xx:成功
- 3xx:重定向
- 4xx:客戶端錯誤
- 5xx:服務端錯誤
HTTP的特點
- 使用客戶端/服務器模式
- 簡單快速、靈活
- 無連接、無狀態(不維護連接狀態)
GET、POST的區別
- http報文層面:get將請求參數放在url中,不安全,攜帶的數據有限制;post放在請求體中,安全,攜帶的數據量無限制
- 數據庫層面:get冪等、安全,post非冪等、不安全
- 緩存:get請求可以被緩存、收藏,post則不能
Session、Cookie
http不能保持連接狀態,用會話保存用戶信息,常用的會話技術有2種:Cookie、Session。
Cookie
當用戶訪問某個網站時,服務器用cookie存儲用戶信息,把cookie放在響應頭中傳給瀏覽器,瀏覽器把cookie存儲到本地計算機上。當用戶再次訪問該網站時,瀏覽器自動在請求頭中加上該網站的cookie,cookie隨http請求一起發送給該網站的服務器,服務器解析請求頭中的cookie,獲取用戶信息。
Session
使用session對象存儲會話信息,保存在服務器內存中,使用SessionId來唯一標識一個session對象 ,SessionId通過Cookie技術進行存儲。服務器自動把SessionId放到cookie中保存到瀏覽器上,瀏覽器訪問網站時自動在http請求頭中攜帶該網站的cookie,服務器自動從請求頭的cookie中獲取SessionID,確定對應的session對象。
session超時:如果客戶端、服務器在指定時間(默認30min)內未進行過通信,服務器會自動刪除內存中對應的session對象。如果session中可能有需要持久化的數據,應該設置監聽,session超時時自動持久化session中的數據到數據庫。
Cookie、Sessio的比較
- cookie把會話信息保存在瀏覽器上,session把會話信息保存在服務器上內存中
- cookie把數據存儲在用戶計算機上,不安全;session把數據存儲在服務器上,更加安全,但會加大服務器的內存開銷
- 如果考慮減輕服務器負擔,使用cookie
HTTP、HTTPS
http請求發送的數據、http響應返回的數據很容易被截獲,https是安全版的http,在http的基礎上增加了安全防護。
ssl (安全套接層)是爲網絡通信安全、數據完整性提供的一種協議,是操作系統對外提供的API,ssl3.0後更名爲tls,ssl採用身份驗證、數據加密保證網絡通信的安全、數據的完整性。
加密方式
- 對稱加密:加密、解密使用同一個祕鑰。安全性低但性能高
- 非對稱加密:加密、解密使用的祕鑰不相同,分爲公鑰、私鑰,使用其中一個來加密,另一個來解密。安全性高但性能低。
- 哈希算法:將任意長度的數據轉換爲固定長度的值,算法不可逆,常見的比如md5加密
- 數字簽名:在原數據的末尾添加一段加密後的哈希值,以確保數據不被修改,證明數據、文件的身份
單一使用某種加密算法不安全,https使用加密算法+證書的方式。
https的數據傳輸過程
http、https的區別
https比http安全很多,但不是絕對安全。