一、網絡通信基礎
(一)網絡通信的概念
網絡通信是指終端設備之間通過計算機網絡進行的信息傳遞與交流。它類似于現實生活中的物品傳遞過程:數據(物品)被封裝成報文(包裹),通過網絡設備(集散中心)在不同的終端設備(收發點)之間傳輸。
(二)常見術語
-
數據載荷:最終需要傳遞的信息。
-
報文:網絡中交換與傳輸的數據單元。
-
頭部和尾部:在數據載荷前后添加的信息段,用于標識和控制數據傳輸。
-
封裝與解封裝:封裝是將數據載荷添加頭部和尾部形成報文的過程,而解封裝則是獲取數據載荷的過程。
-
網關與路由器:網關提供協議轉換和路由選擇功能,路由器則根據報文的目的地址選擇最優路徑進行轉發。
二、網絡設備與功能
(一)交換機
交換機是距離終端用戶最近的網絡設備,主要用于終端用戶的網絡接入和數據幀的交換。它工作在數據鏈路層,能夠有效地隔離廣播域,減少網絡中的廣播流量。
(二)路由器
路由器是網絡層設備,負責在不同網絡之間轉發數據報文。它通過維護路由表來選擇最佳路徑,實現不同網絡之間的通信。路由器還可以隔離廣播域,支持廣域網接入和網絡地址轉換(NAT)。
(三)防火墻
防火墻是一種網絡安全設備,用于控制兩個網絡之間的安全通信。它通過監測和限制數據流,保護網絡內部的信息安全。防火墻的主要功能包括:
-
隔離不同安全級別的網絡。
-
實現訪問控制和用戶身份認證。
-
提供數據加密和虛擬專用網(VPN)功能。
-
執行網絡地址轉換(NAT)。
(四)無線設備
無線設備包括無線控制器(AC)、胖AP(Fat Access Point)和瘦AP(Fit Access Point)。它們通過Wi-Fi信號實現有線終端和無線終端之間的通信,是現代網絡中不可或缺的一部分。
三、網絡類型與拓撲結構
(一)網絡類型
根據地理覆蓋范圍,網絡可以分為:
-
局域網(LAN):覆蓋范圍較小,通常在幾千米以內,如公司辦公網絡或家庭網絡。
-
城域網(MAN):覆蓋范圍為一個城市,如寬帶城域網或教育城域網。
-
廣域網(WAN):覆蓋范圍廣泛,連接多個城市甚至國家,如Internet。
(二)網絡拓撲結構
網絡拓撲是指網絡設備之間的連接方式。常見的拓撲結構包括:
-
星型拓撲:所有設備都連接到一個中心節點,易于管理和擴展。
-
總線型拓撲:所有設備共享一條通信線路,成本低但可靠性較差。
-
環型拓撲:設備按環形連接,數據沿一個方向傳輸。
-
樹型拓撲:類似星型拓撲的擴展,適用于大規模網絡。
-
網狀拓撲:設備之間有多條連接路徑,可靠性高但成本高。
四、OSI與TCP/IP協議模型
(一)OSI七層模型
-
物理層:負責比特流在物理介質上的傳輸。
-
數據鏈路層:負責組幀、物理編址和差錯控制。
-
網絡層:負責數據包的尋徑和轉發。
-
傳輸層:建立端到端的連接,確保數據可靠傳輸。
-
會話層:管理通信雙方的會話。
-
表示層:負責數據格式的轉換。
-
應用層:為應用程序提供接口,如HTTP、FTP等。
OSI七層模型中,應用層、表示層和會話層直接提供用戶所需的功能,屬于用戶層;傳輸層和網絡層負責數據的端到端傳輸和路由,屬于操作系統層;鏈路層和物理層處理數據的物理傳輸和設備間的通信,屬于驅動與硬件層。
(二)TCP/IP模型
TCP/IP模型是互聯網的主流協議模型,它簡化了OSI模型,分為四層:
-
鏈路層:對應OSI模型中的物理層和數據鏈路層。
-
網絡層:主要協議為IP,負責數據包的轉發。
-
傳輸層:主要協議為TCP和UDP,負責端到端的通信。
-
應用層:提供各種網絡服務,如HTTP、FTP、SMTP等。
TCP連接的建立與關閉
三次握手
TCP連接建立過程中,客戶端和服務器通過三次報文交換來確認彼此的接收和發送能力,使用Wireshark抓包分析可以清晰地觀察到這個過程。
-
客戶端發送SYN報文:客戶端向服務器發送一個SYN報文,表示請求建立連接,Wireshark會顯示一個帶有SYN標志位的TCP報文,序列號為客戶端的初始序列號(ISN)。
-
服務器響應SYN-ACK報文:服務器接收到SYN報文后,回復一個SYN-ACK報文,表示接受連接請求,同時確認客戶端的SYN報文。Wireshark中,這個報文將包含SYN和ACK標志位,ACK確認號為客戶端的序列號加1,服務器還會生成自己的初始序列號(ISN)。
-
客戶端發送ACK報文:客戶端收到服務器的SYN-ACK報文后,發送一個帶ACK標志位的報文,確認服務器的響應并完成連接建立。Wireshark中會顯示客戶端發出的ACK報文,確認號為服務器的ISN加1,連接正式建立。
四次揮手
由于TCP半雙工,半關閉的特性,雙方都需要獨立的確認自己已經完成了數據的發送且雙方都不能立刻關閉接收通道,所以需要四次揮手
-
第一次揮手: 客戶端發送FIN報文表示沒有數據要發送,此時,客戶端進入半關閉狀態,仍然可以接收服務器發送的剩余數據;
-
第二次揮手: 服務器收到客戶端的FIN報文后,發送ACK報文確認客戶端的關閉請求,此時,服務器仍然可以繼續向客戶端發送數據;
-
第三次揮手:當服務器的發送數據也完成時,會發送FIN報文,此時服務器進入半關閉狀態,仍然可以接收客戶端的數據。
-
第四次揮手: 客戶端收到服務器的FIN報文后,發送一個ACK報文確認服務器的關閉請求。此時,客戶端的接收方向也關閉,連接被完全斷開。
為什么不能合并為三次揮手?
如果服務器在收到客戶端的FIN報文后沒有數據要發送,理論上,可以通過合并第二次和第三次揮手為三次進行關閉。然而,在TCP協議的標準操作中,即使服務端沒有數據要發送,也必須遵循四次揮手的過程。這是因為TCP協議設計上強調可靠性和連接狀態的準確同步。
原因:確保關閉請求的獨立性,即使服務端沒有數據要發送,它仍然需要先確認客戶端的關閉請求(發送ACK報文),然后才能開始自己的關閉過程(發送FIN報文)
在實際驗證中,為了模擬“服務端有剩余數據”的場景,我通過在服務端代碼中加入sleep
(睡眠)操作,故意延遲發送數據。在服務端完成初步的響應后,繼續發送剩余數據。與“無剩余數據”對比,都抓取到了4次揮手的報文。