?概述
如何讓數據具有自我描述性?
為什么網絡有層級的劃分?
交換機、路由器要不要閱讀一個信息的頭部?要不要閱讀數據部分??
網卡:網卡可以完成幀的封裝和解封裝,工作在數據鏈路層。 中繼器:中繼器以比特方式將網絡信號進行再生和重定時,使其能夠傳輸更長的距離。 放大器 集線器: 集線器實際上就是一個多端口的中繼器。 網橋/橋接器:連接兩個局域網的一種存儲轉發設備,可以將一個大的LAN分割為多個網段,或者將兩個以上的LAN互聯為一個邏輯LAN。 交換機:交換機有一張交換表,可以記錄MAC幀和對應端口。(相當于網橋+集線器) 路由器:路由選擇、存儲轉發、連接外部網絡。
協議名 | 層 | 協議功能 | 占用端口 號 |
---|---|---|---|
HTTP 超文本傳輸協議 | 應用層 | 傳輸Web網站網頁和其他資源 | 80 |
FTP文件傳輸協議 | 應用層 | 文件上傳和下載 | 20/21 |
Telnet 遠程連接協議 | 應用層 | 遠程登錄(無加密) | 23 |
SSH安全外殼協議 | 應用層 | 遠程登陸(加密) | 22 |
SMTP 簡單郵件傳輸協 議 | 應用層 | 電子郵件(郵件在服務器之間提交和傳 送) | 25 |
POP3 郵局協議版本3 | 應用層 | 電子郵件(郵件最終交付協議) | 110 |
TCP | 傳輸層 | 可靠的面向連接的傳輸層協議 | |
UDP | 傳輸層 | 不可靠的基于數據報的傳輸層協議 | |
IP | 網絡層 | 網際互聯協議 | |
ICMP | 網絡層 | 網絡控制消息協議 | |
IGMP | 網絡層 | 網絡組管理協議 | |
ARP | 數據鏈路 層 | 地址轉換協議 | |
RARP | 數據鏈路 層 | 反向地址轉換協議 |
萬維網
萬維網(World Wide Web,簡稱 WWW)的誕生和發展依賴于以下三個核心要素,它們共同構成了現代互聯網信息交互的基礎:
1.?URL(統一資源定位符)
作用:為網絡中的資源(如網頁、圖片、API)提供唯一標識和訪問地址。
https://www.example.com:443/path/to/resource?query=value#fragment
↑ ? ? ?↑ ? ? ? ? ? ? ?↑ ? ↑ ? ? ? ? ? ? ? ↑ ? ? ? ? ?↑
協議 ? ?主機名 ? ? ? ? 端口 ?路徑 ? ? ? ? ? ?查詢參數 ? ?片段?
以下是URL各組成部分的表格化總結:
組成部分 | 作用 | 示例 | 注意事項 |
---|---|---|---|
協議(Scheme) | 指定訪問資源使用的應用層協議 | https:// 、ftp:// | 后跟:// ,現代瀏覽器默認隱藏http:// 或https:// |
主機名(Host) | 標識資源所在的服務器地址(域名或IP) | www.example.com 、192.168.1.1 | 可包含子域(如blog.example.com ) |
端口(Port) | 指定服務器服務的網絡端口 | :443 (HTTPS)、:8080 (自定義端口) | 默認端口可省略(HTTP=80,HTTPS=443) |
路徑(Path) | 標識服務器上資源的具體位置(類似文件路徑) | /articles/2023/ 、/index.html | 區分大小寫(取決于服務器配置) |
查詢參數(Query) | 向服務器傳遞額外參數(以? 開頭,& 分隔) | ?id=123&lang=zh | 常用于搜索(?q=keyword )、分頁(?page=2 ) |
片段(Fragment) | 指向資源內的錨點(以# 開頭),僅客戶端使用 | #section-2 、/#/home (SPA路由) | 不發送到服務器,用于頁面內跳轉或前端路由 |
2.?HTTP(超文本傳輸協議)
HTTP 的中文全稱是?超文本傳輸協議(HyperText Transfer Protocol)。
?超文本(HyperText)含義:超越普通文本的交互式文本,支持嵌入鏈接、圖片、視頻等多媒體資源。
GET:通過 URL 的查詢字符串(
?key=value
)傳遞數據,可見且長度受限(約 2048 字符)。POST:通過請求體(body)傳輸數據,不可見且支持大量數據(如文件上傳)。
?發送
發送的HTTP請求一般稱之為HTTP請求報文
,分為請求行
、請求頭/消息頭
、空行
、請求體/請求正文
四部分.其中的一些消息頭和正文都是可選的,消息頭和正文內容之間要用空行隔開.?
GET /stm32/index.html?toc=0&ws=off&reset=true HTTP/1.1 # 請求行:使用GET方法獲取/stm32/index.html資源,附帶3個查詢參數,使用HTTP/1.1協議
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 # 可接受的響應內容類型及優先級(q值)
Accept-Encoding: gzip, deflate # 支持的壓縮編碼格式
Accept-Language: zh-CN,zh;q=0.9 # 優先接收中文內容
Cache-Control: max-age=0 # 禁用緩存,強制向服務器驗證
Connection: keep-alive # 要求保持TCP連接
Cookie: __itrace_wid=f3d24dcd-1c13-4bec-8cc9-11d91bc0475e; __itrace_wid=6d823e9c-84aa-43bd-1109-18aee93b70cd # 發送的Cookie信息(包含兩個相同的鍵,可能是錯誤)
Host: 47.97.82.68:8080 # 目標服務器地址和端口
If-Modified-Since: Tue, 06 May 2025 12:41:12 GMT # 條件請求:如果資源在此時間后未修改則返回304
If-None-Match: W/"681a0368-b41d8" # 條件請求:如果ETag匹配則返回304
Upgrade-Insecure-Requests: 1 # 表示客戶端優先選擇HTTPS
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 QuarkPC/4.2.5.446 # 客戶端瀏覽器信息(Windows系統,Chrome內核,Quark瀏覽器)請求正文
?請求行(Request Line):第一行?
請求頭(Request Headers):從第二行開始到空行前的所有內容均為請求頭,用于傳遞附加信息
?響應
??
服務器發送的HTTP響應一般稱之為HTTP響應報文
,分為響應行
、響應頭/消息頭
、空行
、響應體
四部分.其中的一些消息頭和正文都是可選的,消息頭和正文內容之間要用空行隔開.
HTTP/1.1 304 Not Modified # 響應行:HTTP/1.1協議,狀態碼304表示資源未修改
Server: nginx/1.18.0 (Ubuntu) # 服務器類型及版本(Ubuntu系統下的Nginx 1.18.0)
Date: Fri, 25 Jul 2025 13:47:28 GMT # 服務器響應時間(2025年7月25日13:47:28 GMT)
Last-Modified: Tue, 06 May 2025 12:41:12 GMT # 資源最后修改時間(與請求中的If-Modified-Since一致)
Connection: keep-alive # 保持TCP連接不關閉
ETag: "681a0368-b41d8" # 資源標識符(與請求中的If-None-Match一致)響應正文
狀態碼范圍 | 類別 | 說明 | 常見例子 |
---|---|---|---|
1XX | 信息性狀態碼 | 請求已被接收,繼續處理 | 101 Switching Protocols (協議切換) |
2XX | 成功狀態碼 | 請求已成功處理 | 200 OK (成功) |
3XX | 重定向狀態碼 | 需進一步操作以完成請求 | 301 Moved Permanently (永久重定向) |
4XX | 客戶端錯誤 | 請求包含語法錯誤或無法完成 | 404 Not Found (資源不存在) |
5XX | 服務器錯誤 | 服務器處理請求失敗 | 500 Internal Server Error (服務器內部錯誤) |
?3.?HTML(超文本標記語言)
作用:定義網頁的結構和內容,并支持超鏈接(Hyperlink)實現資源互聯。
關鍵點:
超文本特性:通過?
<a>
?標簽鏈接其他資源,形成網狀信息結構。跨平臺兼容:純文本格式,可在不同設備和瀏覽器中渲染。
多媒體整合:支持嵌入圖片、腳本(JavaScript)、樣式(CSS)等。
意義:解決了“如何呈現和關聯資源”的問題,是萬維網的“內容載體”。
三者的協作關系
1.瀏覽器輸入URL?→ 2.?DNS解析獲取IP?→ 3.?建立TCP連接?→ 4.?發送HTTP請求報文?→ 5.?服務器返回響應?HTML→ 6.?瀏覽器渲染頁面。
??DNS解析(Domain Name System Resolution)是將人類易讀的域名(如?www.example.com
)轉換為機器可識別的IP地址(如?192.0.2.1
)的過程。
不同的域名可以用同一個服務器?
?答案是肯定的!?多個域名可以指向同一臺服務器,通過監視程序統一管理。
?TCP
?
長連接 和 短連接的區別
類型 | 定義 | 典型應用場景 |
---|---|---|
短連接 | 每次通信后立即斷開連接,下次通信需重新建立TCP連接。 | HTTP/1.0、簡單的請求-響應模型(如早期Web) |
長連接 | 建立連接后保持連接不關閉,允許多次數據傳輸(通過心跳保活)。 | HTTP/1.1、數據庫連接、實時通信(如WebSocket) |
TCP頭部結構(共20字節基礎長度 + 可選選項)
字段名 | 位數 | 作用說明 | 示例/備注 |
---|---|---|---|
源端口(Source Port) | 16 bit | 發送方的端口號。 | 如?80 (HTTP服務端口) |
目的端口(Destination Port) | 16 bit | 接收方的端口號。 | 如?54321 (客戶端臨時端口) |
序列號(Sequence Number) | 32 bit | 當前數據段的第一個字節的序列號,用于數據排序和重組。 | 初始值隨機生成(ISN),后續累加數據長度。 |
確認號(Acknowledgment Number) | 32 bit | 期望收到的下一個字節的序列號(僅當ACK=1時有效)。 | 如收到seq=1000 ,則回復ack=1001 。 |
數據偏移(Data Offset) | 4 bit | TCP頭部的長度(以4字節為單位),用于定位數據開始位置。 | 最小值為5 (20字節頭部)。 |
保留(Reserved) | 6 bit | 保留字段,必須置0。 | 未來擴展使用。 |
控制標志(Flags) | 6 bit | 控制連接狀態的關鍵標志位: | |
-?URG?Urgent | 1 bit | 緊急指針有效(高優先級數據)。 | 如Telnet中斷命令。 |
-?ACK?Acknowledgment | 1 bit | 確認號有效(建立連接后通常為1)。 | 三次握手中第二次開始ACK=1。 |
-?PSH?Push | 1 bit | 接收方應立即將數據推送給應用層(避免緩沖區延遲)。 | 如實時聊天消息。 |
-?RST | 1 bit | 重置連接(異常終止)。 | 收到無效報文時強制斷開。 |
-?SYN? :Synchronize | 1 bit | 同步序列號(用于建立連接)。 | 三次握手中前兩次SYN=1。 |
-?FIN | 1 bit | 終止連接(正常關閉)。 | 四次揮手中FIN=1。 |
窗口大小(Window Size) | 16 bit | 接收方的可用緩沖區大小(流量控制),表示當前能接收的字節數。 | 動態調整(滑動窗口機制)。 |
校驗和(Checksum) | 16 bit | 校驗頭部和數據部分的完整性(包括偽頭部)。 | 防止傳輸錯誤。 |
緊急指針(Urgent Pointer) | 16 bit | 當URG=1時有效,指向緊急數據的末尾偏移量。 | 需配合URG 標志使用。 |
選項(Options) | 可變 | 可選字段(長度由數據偏移決定),用于擴展功能: | |
-?MSS(Maximum Segment Size) | 可變 | 協商最大報文段大小(通常1460字節,以太網MTU=1500)。 | 三次握手時協商。 |
-?SACK(Selective ACK) | 可變 | 選擇性確認,支持部分重傳。 | 提高重傳效率。 |
-?時間戳(Timestamp) | 可變 | 計算RTT(往返時間)和防止序列號回繞。 | 高帶寬網絡必備。 |
填充(Padding) | 可變 | 確保TCP頭部長度是4字節的整數倍。 | 選項字段不足時補0。 |
?三次握手的作用
第一次握手(SYN)
客戶端發送SYN,攜帶自己的初始序列號ISN(Sequence Number:857960100)。
目的:告知服務端“我想建立連接,我的序列號是X=857960100”。
第二次握手(SYN-ACK)
服務端返回SYN-ACK,攜帶自己的初始序列號ISN(Sequence Number:304853757),并確認客戶端的ISN?( ACK=X+1),也就是ACK=857960100+1。
目的:回應客戶端“我收到你的SYN了,我的序列號是Y=304853757,下次請發X+1”。
第三次握手(ACK)
客戶端發送ACK,確認服務端的ISN(ACK=Y+1)也就是304853757+1。
目的:告知服務端“我收到你的SYN-ACK了,下次請發Y+1”。
關鍵點:第三次握手是客戶端對服務端序列號的顯式確認,確保雙方序列號同步,且服務端知道客戶端是活躍的。
TCP三次握手流程詳解
步驟 | 發送方 | 報文內容 | 目的 |
---|---|---|---|
第一次握手 | 客戶端 | SYN=1, seq=X | 告知服務端:“我想建立連接,我的初始序列號是X”。 |
第二次握手 | 服務端 | SYN=1, ACK=1, seq=Y, ack=X+1 | 回應客戶端:“我收到你的SYN了,我的序列號是Y,下次請從X+1開始發數據”。 |
第三次握手 | 客戶端 | ACK=1, seq=X+1, ack=Y+1 | 確認服務端:“我收到你的SYN-ACK了,下次請從Y+1開始發數據”。 |
為什么TCP需要三次握手?兩次握手為什么不行?
兩次握手:類似“你約朋友吃飯,朋友說‘好’,但你不確認他是否聽到你的約定”。
風險:朋友可能沒聽清,但你默認他已同意。
三次握手:你約朋友 → 朋友說“好” → 你回復“收到”。
雙方明確約定已達成。
TCP兩次握手的問題 vs 三次握手的解決方案
問題分類 | 兩次握手的缺陷 | 三次握手的解決方案 |
---|---|---|
歷史連接干擾 | 服務端收到舊SYN會直接建立連接,客戶端因序列號不匹配拒絕,導致服務端資源浪費。 | 客戶端通過第三次ACK確認有效性,服務端僅對有效ACK分配資源。 |
初始序列號(ISN)同步 | 服務端無法確認客戶端是否收到自己的SYN-ACK(ISN可能丟失),后續數據傳輸不可靠。 | 客戶端的第三次ACK顯式確認服務端的ISN(ACK=Y+1),確保雙方序列號同步。 |
重復SYN導致的資源浪費 | 服務端無法區分重復SYN(如網絡重傳),會為每個SYN創建連接,耗盡資源。 | 服務端僅在收到客戶端的ACK后分配資源,避免無效連接。 |
?TCP協議如何保證數據的可靠傳輸?
機制 | 解決的問題 | 實現方式 |
---|---|---|
三次握手 | 可靠連接建立 | SYN、ACK同步序列號 |
序列號與確認號 | 數據順序、丟包檢測 | 每個字節標記序列號,ACK確認接收范圍 |
超時重傳 | 丟包恢復 | RTO超時未收到ACK則重傳 |
滑動窗口 | 流量控制 | 動態調整發送窗口大小(RWND) |
擁塞控制 | 網絡擁塞避免 | 慢啟動、擁塞避免、快重傳、快恢復 |
?下面表格通過舉例說明了超時重傳、滑動窗口動態調整大小和快重傳機制
步驟 | 發送方(Client) | 接收方(Server) | 機制觸發 |
---|---|---|---|
1 | 發送seq=1~1000 | 未收到(丟包) | 超時重傳(RTO觸發) |
2 | 超時后重傳seq=1~1000 | 收到并回復ACK=1001, RWND=4096 | 滑動窗口更新 |
3 | 發送seq=1001~5000 | 收到但緩沖區滿,回復ACK=5001, RWND=2048 | 流量控制(窗口調小) |
4 | 發送seq=5001~7048 (2KB) | 收到seq=5001~7048 ,回復ACK=7049 | 正常傳輸 |
5 | 發送seq=8001~9000 (丟包) | 收到seq=9001~10000 ,回復3次ACK=8001 | 快重傳 + 快恢復 |
發送方可能一次發送很多TCP報文, 目的方著急回復確認嗎?? 不著急,偶爾回復?
為什么發送數據時要攜帶源端口??
超時重傳和快重傳的區別是什么?
完整處理流程示例
假設發送 20KB 數據(MSS=1460B,初始 CWND=2 MSS):
分片:分成 14 個段(14×1460B)。
慢啟動:
發送 2 段 → 收到 ACK → CWND=4 → 發送 4 段 → …
流量控制:若接收方 RWND=0,暫停發送。
擁塞控制:丟包后觸發快重傳,CWND 減半。
重組數據:接收方按序列號排序,提交給應用層。
?補充:TCP協議核心術語對照表
英文縮寫 | 英文全稱 | 中文解釋 |
---|---|---|
TCP | Transmission Control Protocol | 傳輸控制協議,提供可靠的、面向連接的字節流服務。 |
IP | Internet Protocol | 網際協議,負責數據包的路由和尋址。 |
MTU | Maximum Transmission Unit | 最大傳輸單元,單次數據傳輸的最大長度(如以太網MTU=1500字節)。 |
MSS | Maximum Segment Size | 最大報文段長度,TCP數據段的最大負載(MSS = MTU - IP頭 - TCP頭)。 |
SYN | Synchronize Sequence Numbers | 同步序列號,用于建立連接(三次握手的第一步)。 |
ACK | Acknowledgment | 確認號,表示已成功接收數據(ACK=1時有效)。 |
FIN | Finish | 終止連接標志,用于正常關閉連接(四次揮手)。 |
RST | Reset | 重置連接標志,強制終止異常連接。 |
URG | Urgent | 緊急指針標志,表示數據需優先處理(如中斷命令)。 |
PSH | Push | 推送標志,要求接收方立即將數據提交給應用層。 |
ISN | Initial Sequence Number | 初始序列號,TCP連接開始時隨機生成的序列號。 |
RTT | Round-Trip Time | 往返時間,數據從發送到確認接收的時間。 |
RTO | Retransmission Timeout | 重傳超時時間,超時未收到ACK則觸發重傳。 |
RWND | Receive Window | 接收窗口,接收方當前可用的緩沖區大小(流量控制)。 |
CWND | Congestion Window | 擁塞窗口,發送方根據網絡擁塞程度動態調整的發送窗口。 |
SACK | Selective Acknowledgment | 選擇性確認,允許接收方告知發送方哪些數據已收到(優化重傳)。 |
MSS | Maximum Segment Size | 最大報文段長度,TCP單次傳輸的數據段最大值。 |
NAT | Network Address Translation | 網絡地址轉換,將私有IP映射為公有IP(解決IPv4地址不足)。 |
LAN | Local Area Network | 局域網,小范圍內的私有網絡(如家庭、辦公室)。 |
WAN | Wide Area Network | 廣域網,跨越長距離的網絡(如互聯網)。 |