層次 | 核心功能 | 典型協議/設備 |
---|---|---|
應用層 | 為用戶應用程序提供網絡服務接口(如文件傳輸、電子郵件、網頁瀏覽) | HTTP、FTP、SMTP、DNS、SSH |
傳輸層 | 提供端到端的可靠或不可靠數據傳輸,處理流量控制和差錯恢復 | TCP(可靠)、UDP(不可靠) |
網絡層 | 負責數據包的路由選擇和跨網絡傳輸,處理邏輯尋址(如IP地址) | IP、ICMP、ARP、路由器 |
數據鏈路層 | 將比特流封裝為幀,提供物理尋址(如MAC地址)和錯誤檢測,管理鏈路訪問控制 | Ethernet、Wi-Fi(802.11)、PPP、交換機 |
物理層 | 定義物理介質的電氣、機械特性,傳輸原始比特流(0/1信號) | 雙絞線、光纖、無線信號、中繼器 |
一、應用層
1.作用:直接為用戶應用程序提供網絡服務,定義數據格式和交互規則
2.主要協議:HTTP協議,HTTPS協議
3.儲備知識
1)日常我們在瀏覽器上見到的url(統一資源定位符)中包括協議,域名,資源路徑
2)表現形式:協議://域名/資源路徑
3)域名會被解析成IP地址
4)使用域名的原因:域名具有更強的表義性,便于用戶了解自己訪問的是哪個服務器
5)DNS(域名系統):存儲IP地址和域名的映射關系
4.HTTP協議的介紹
4.1HTTP請求
1)HTTP以空行為分隔符做到了報頭與有效載荷的分離
2)client和server如何保證自己讀到的報文是完整的?
答:step1:讀取字節流,分析讀到的字節流是否存在空行
step2:提取content-length,獲得正文長度,然后再讀取或截取指定長度的內容
注:如果接收方的應答內攜帶數據,他的response中的響應報頭中攜帶content-length:xx
4.2HTTP響應
1)content-type:數據類型
2)一張網頁內可能有多種資源(如:網頁自己+圖片),這就導致了如果想獲得網頁,除識別網頁外,還要識別其他類型,故而瀏覽器會發送第二次請求
3)臨時重定向和永久重定向
臨時重定向:不改變任何信息,多用于登錄,跳轉,狀態碼多為302/307
永久重定向:多用于網站更換域名或更換網址,狀態碼多為301/308
4)方法:Get和Post
Get:獲取資源,如果進行參數提交通過uri進行提交
Post:上傳資源,如果進行參數提交通過httprequest正文提交
Get | Post(相較于Get比較安全) |
提交的參數不宜過長 | 可以傳送長數據 |
會回顯參數 | 不會回顯參數 |
注:Get和Post都不安全,二者皆為明文傳送
5)為了在一定程度上解決安全問題,引入session和cookie
3.協議數據單元(PDU):數據
二、傳輸層
1.作用:確保數據從源進程可靠傳輸到目標進程(通過端口號標識)
2.主要協議:TCP和UDP
特性 | TCP | UDP |
---|---|---|
設計目標 | 提供可靠、有序、無差錯的數據傳輸 | 提供高效、低延遲的簡單數據傳輸 |
連接管理 | 面向連接(需建立和釋放連接) | 無連接(直接發送數據,無需握手) |
傳輸方式 | 字節流(無邊界,需應用層自行分幀) | 數據報(保留消息邊界,每個UDP包獨立) |
3.TCP協議
1)報頭和有效載荷如何分離?
答:讀取報文段的前20個字節,提取前4位首部長度,計算有效載荷長度
2)可靠性的原因:對于每一次請求都會有對應的應答,保證了歷史消息的可靠性(即保證可靠的核心機制是確認應答機制)
3)面試題:為什么報文段里需要包含兩個序號(確認序號和序號)
答:服務器不一定只作應答,他可能是捎帶應答(應答+數據),這就要求接收方既要對報文進行確認,又要包含自己的序號
4)標志位
標志位 | 全稱 | 作用 | 取值含義 | 典型場景 | 核心特點 |
---|---|---|---|---|---|
URG | Urgent Pointer | 標識緊急指針字段是否有效,用于高優先級數據傳輸 | 1=緊急數據有效;0=無效 | 服務端響應慢時,客戶端發送緊急狀態查詢(如“立即終止”指令) | 緊急數據優先處理,應用層稱為“帶外數據” |
ACK | Acknowledgment | 確認號字段是否有效,表示報文為確認包 | 1=確認號有效;0=無效(僅握手首包) | 所有正常通信報文(除首次SYN)均需ACK=1 | 累積確認機制,確認號為期望接收的下一個字節序號 |
PSH | Push Function | 強制接收方立即將數據交付應用層,避免緩沖區堆積 | 1=立即推送;0=正常緩存 | 交互式應用(如Telnet、SSH)需實時顯示用戶輸入 | 減少延遲,優化實時性 |
RST | Reset Connection | 強制釋放連接并重建,通常因嚴重錯誤(如主機崩潰、非法數據包)觸發 | 1=重置連接;0=正常 | 連接異常、拒絕SYN Flood攻擊、端口未監聽時返回RST | 可單獨發送或與ACK組合,快速終止連接 |
SYN | Synchronize Sequence | 初始化序列號,用于連接請求或接受報文 | 1=發起/接受連接;0=正常數據 | TCP三次握手(客戶端SYN→服務端SYN+ACK→客戶端ACK) | 不攜帶數據但消耗序列號,建立連接唯一方式 |
FIN | Finish Transmission | 發送方數據已發送完畢,請求釋放連接(可能仍有接收能力) | 1=終止連接;0=正常 | TCP四次揮手(客戶端FIN→服務端ACK→服務端FIN→客戶端ACK) | 即使無數據也消耗序列號,支持半關閉狀態(如服務端繼續發送數據) |
5)3次握手建立連接
階段 | 客戶端動作 | 服務端動作 | 報文標志位 | 關鍵作用 |
---|---|---|---|---|
1. SYN_SENT | 發送SYN包(請求連接) | 監聽端口,等待客戶端請求 | SYN=1, seq=x | 客戶端初始化序列號x ,表示“我想建立連接”。 |
2. SYN_RCVD | 等待服務端響應 | 收到SYN后回復SYN+ACK包 | SYN=1, ACK=1, seq=y, ack=x+1 | 服務端確認客戶端請求(ack=x+1 ),并初始化自身序列號y 。 |
3. ESTABLISHED | 發送ACK包(確認連接) | 收到ACK后連接建立 | ACK=1, seq=x+1, ack=y+1 | 客戶端確認服務端響應,雙方進入ESTABLISHED狀態,可開始數據傳輸。 |
Q:為什么要進行3次握手?
A:1.以最短的方式驗證全雙工2.以最小的成本100%確認雙方的通信意愿
6)4次回收釋放連接
階段 | 主動關閉方(客戶端) | 被動關閉方(服務端) | 報文標志位 | 關鍵作用 |
---|---|---|---|---|
1. FIN_WAIT_1 | 發送FIN包(請求關閉) | 收到FIN后進入CLOSE_WAIT狀態 | FIN=1, seq=u | 客戶端表示“我數據已發送完畢,但可能繼續接收數據”。 |
2. CLOSE_WAIT | 等待服務端確認 | 回復ACK包 | ACK=1, seq=v, ack=u+1 | 服務端確認客戶端關閉請求,但可能仍有數據未發送完。 |
3. LAST_ACK | (可選)繼續接收數據 | 發送FIN包(服務端數據發送完畢) | FIN=1, ACK=1, seq=w, ack=u+1 | 服務端表示“我數據也發送完畢,可以關閉連接”。 |
4. TIME_WAIT | 回復ACK包(確認服務端關閉) | 收到ACK后進入CLOSED狀態 | ACK=1, seq=u+1, ack=w+1 | 客戶端確認服務端關閉,等待2MSL(最大報文段生存時間)后釋放資源(防止延遲報文干擾)。 |
Q1:為什么主動斷開連接的一方要進入TIME_WAIT?
A1:保證在傳輸方向上尚未達到的報文已經在網絡中消散,不會引起下一次連接的錯誤
Q2:如果client已經退出或者關閉,服務器端不關閉會怎樣?
A2:服務器會一直處于TIME_WAIT狀態,依舊占用fd,連接沒有釋放
7)滑動窗口
發送方一次可以發送多少數據有自己的滑動窗口的大小決定
滑動窗口的大小=min(對方的接收能力,擁塞窗口的大小)
滑動窗口不可以向左滑動
8)快重傳和超時重傳
快重傳的條件:連續收到3個重復確認
超時重傳的條件:超時并且沒有應答
9)擁塞控制
9.1)目標:避免網絡過載
9.2)四大算法
算法名稱 | 觸發條件 | 核心行為邏輯 | 關鍵特點 | 典型應用場景 |
---|---|---|---|---|
慢啟動(Slow Start) | 連接建立、超時重傳后,或從快速恢復退出后(部分實現)。 | 1. 初始cwnd=1 MSS (或更小)。2. 每收到一個ACK, cwnd += 1 MSS (指數增長)。3. 達到 ssthresh 后切換到擁塞避免。 | 快速探測帶寬:指數增長迅速擴大發送窗口。 風險控制:避免一開始就發送大量數據導致網絡過載。 | 連接初期、網絡空閑后的數據傳輸啟動階段。 |
擁塞避免(Congestion Avoidance) | cwnd ≥ ssthresh ,或從快速恢復退出后。 | 1. 每收到一個ACK,cwnd += 1 MSS / cwnd (線性增長,每輪RTT增加1 MSS)。2. 發生丟包時,進入快速重傳/恢復。 | 保守增長:緩慢增加發送速率,防止觸發擁塞。 穩定性優先:適合網絡負載接近閾值時。 | 網絡帶寬接近飽和時的持續數據傳輸階段。 |
快速重傳(Fast Retransmit) | 收到3個重復ACK(表明中間有數據包丟失,但后續數據已到達接收方)。 | 1. 立即重傳丟失的段(無需等待超時)。 2. 觸發快速恢復,調整 ssthresh 和cwnd 。 | 快速響應丟包:比超時重傳減少數秒等待時間。 依賴重復ACK:適用于部分丟包場景。 | 網絡輕微擁塞或隨機丟包時的快速恢復。 |
快速恢復(Fast Recovery) | 快速重傳后(即收到3個重復ACK后)。 | 1.?ssthresh = cwnd / 2 (減半擁塞閾值)。2.? cwnd = ssthresh + 3*MSS (補償已離開網絡的3個重復ACK對應的段)。3. 每收到一個重復ACK, cwnd += 1 MSS ;收到新ACK后退出,進入擁塞避免。 | 避免慢啟動:維持較高發送速率,減少性能波動。 補償機制:通過重復ACK推斷網絡狀態。 | 快速重傳后的擁塞窗口調整,平衡效率與穩定性。 |
3.協議數據單元(PDU):TCP的報文段,UDP的用戶數據報
三、網絡層
1.作用:通過路由算法(如Dijkstra)確定數據包從源到目標的最佳路徑
2.主要協議:IP協議
1)TCP/IP協議的核心功能是將數據100%可靠從主機A傳輸到主機B
2)IP地址=網絡號+主機號
3)子網劃分
Q:問什么要進行子網劃分?
A:未來查找目標主機時從目標網絡中查找,從而提高效率
4)在網絡通信中,私有IP不能出現在公網中,因為私有IP可以重復,這將導致從此發出的報文無法回來
5)每經過一個內網路由器進行src:ip替換,替換成當前路由器的wan口IP
6)將內網IP轉換為公網IP需要借助NAT技術
3.協議數據單元(PDU):IP數據報
四、數據鏈路層
1.作用:將網絡層數據包封裝為幀(Frame),添加幀頭和幀尾。
2.主要協議:PPP協議
3.協議數據單元(PDU):數據幀
4.數據鏈路層的三個基本問題:封裝成幀,透明傳輸,差錯檢測
五、物理層
1.作用:通過物理介質(如電纜、無線信號)傳輸比特流
2.協議數據單元(PDU):比特