?
目錄
第1層 鏈路/網絡接口層—幀(Frame)
1. 鏈路層功能
2. 常見協議
2.1. ARP(地址解析協議)
3. 常見設備
第2層 網絡層—數據包(Packet)
1. 網絡層功能
2. 常見協議
2.1. ICMP(互聯網控制消息協議)
3. 常見設備
第3層 傳輸層—TCP段或UDP數據報
1. 傳輸層功能
2. 常見協議
2.1. TCP
2.2. UDP
3. TCP三次握手與四次揮手
3.1. 名詞講解
3.2. 三次握手
3.3. 數據傳輸
3.4. 四次揮手
3.5. 整體流程
4. 常見設備
第4層 應用層
1. 應用層功能
2. 常見協議
3. 常見軟件
TCP/IP通信流程
1. 發送端
2. 接收端
TCP/IP數據解封裝?
TCP/IP協議(傳輸控制協議/互聯網協議,Transmission Control Protocol/Internet Protocol)是一組用于計算機網絡通信的協議集合,是互聯網和許多局域網的基礎。它定義了數據如何在網絡中傳輸、尋址、路由和接收。
第1層 鏈路/網絡接口層—幀(Frame)
負責將數據封裝成幀,通過物理介質傳輸,并包括地址解析和物理信號傳輸功能。
1. 鏈路層功能
- 幀的封裝與拆裝:將網絡層數據包封裝成幀,添加MAC地址和校驗字段,并在接收端解封裝。
- 幀邊界識別:通過前導碼、定界符或長度字段識別幀的開始和結束。
- 介質訪問控制(MAC):協調多設備對共享介質的訪問,防止數據沖突(如CSMA/CD、CSMA/CA)。
- 差錯檢測:通過CRC或校驗和檢測幀傳輸錯誤,丟棄出錯幀(通常不負責重傳,重傳一般由傳輸層負責)。
- 物理信號傳輸:將幀轉化為物理信號(如電信號、光信號)并通過介質發送和接收。
- 地址解析:通過ARP協議將IP地址映射為MAC地址。
2. 常見協議
Ethernet(以太網)、Wi-Fi(IEEE 802.11)、PPP(點對點協議)、ARP(地址解析協議)、HDLC(高級數據鏈路控制協議)
2.1. ARP(地址解析協議)
ARP負責在同一局域網內,將網絡層的IP地址(IPv4)映射到鏈路層的MAC地址。作為鏈路層協議,它為網絡層的IP尋址提供支持,通常被視為網絡層與鏈路層的接口協議。
ARP工作流程
- ARP請求(Request)
- 以廣播方式發送到本地網絡,目標MAC地址為FF:FF:FF:FF:FF:FF(全網廣播)。
- 請求包通過Ethernet幀傳輸(協議類型0x0806),包含:
- 發起者的IP地址和MAC地址。
- 目標MAC地址(填充為00:00:00:00:00:00,因為未知)。
- 目標IP地址(待解析的IP)。
- ARP回復(Reply)
- 以單播方式發送給請求者的MAC地址,通過Ethernet幀(協議類型0x0806)。
- 回復包包含:
- 回應者的IP地址和MAC地址。
- 發起者的IP地址和MAC地址(繼承自請求包)。
- 緩存與超時
- 主機收到ARP回復后,將IP?MAC映射存入ARP緩存(ARP table),減少后續請求。
- 緩存分為動態條目(通過ARP請求/回復生成)和靜態條目(手動配置,不超時)。
- 動態條目通常在1-20分鐘后超時(視操作系統而定,如Linux約20分鐘,Windows可能更短),超時后需重新發送ARP請求。
- 擴展功能
- 反向ARP(RARP):將MAC地址解析為IP地址,早期用于無盤工作站,現多被DHCP取代。
- 代理ARP(Proxy ARP):路由器代表其他網絡中的主機回復ARP請求,用于跨子網通信。
如何查看ARP緩存
Linux
查看:arp -n(顯示ARP表,不解析主機名)或ip neigh show(顯示鄰居表,包括ARP和IPv6的NDP)。
添加靜態:sudo arp -s 192.168.1.20 BB:BB:BB:BB:BB:BB(MAC地址使用冒號分隔)。
刪除:sudo arp -d 192.168.1.20。
Windows
查看:arp -a(顯示ARP緩存表)。
添加靜態:arp -s 192.168.1.20 BB-BB-BB-BB-BB-BB(MAC地址使用連字符分隔)。
刪除:arp -d 192.168.1.20。
注意:Linux使用冒號分隔的MAC地址(如BB:BB:BB:BB:BB:BB),Windows使用連字符分隔(如BB-BB-BB-BB-BB-BB)。
3. 常見設備
- 網卡(NIC):將數據轉換為物理信號(如電信號或無線信號),并具有唯一的MAC地址
- 交換機(Switch):根據MAC地址表轉發數據幀,支持全雙工通信,減少網絡沖突。
- 網橋(Bridge):連接兩個網絡段,根據MAC地址過濾和轉發數據,適用于小型網絡。
- 集線器:廣播所有接收到的信號,帶寬共享,易發生沖突,主要用于小型或早期網絡。
- 傳輸介質:如雙絞線、光纖、同軸電纜,用于承載物理信號。
第2層 網絡層—數據包(Packet)
負責將數據從源主機傳輸到目的主機,即使它們不在同一個網絡中。它通過邏輯尋址和路由選擇來實現這一點,確保數據包能夠跨越不同的網絡和子網到達目的地。
1. 網絡層功能
- 邏輯尋址:為每個網絡設備分配唯一的IP地址(IPv4或IPv6),用于標識主機和網絡。
- 路由選擇:根據路由表和路由協議(如RIP、OSPF)確定數據包從源到目的地的最佳路徑。
- 數據包轉發:路由器根據目標IP地址和路由表將數據包轉發到下一跳。
- 分片與重組:當數據包大小超過網絡路徑中的最大傳輸單元(MTU)時,網絡層在源端或中間路由器將數據包分片,并在目的端重組。
- 差錯檢測:IP包頭包含頭部校驗和,用于檢測頭部數據是否損壞(不檢查數據部分)。
- 協議支持:支持ICMP(用于網絡診斷,如ping)、IGMP(用于組播管理)等協議。
- 網絡地址轉換(NAT):在私有網絡和公共網絡之間轉換IP地址,允許多個設備共享一個公共IP。
- 擁塞反饋:通過ICMP協議報告網絡擁塞狀態,輔助傳輸層進行擁塞控制”。
2. 常見協議
- IP(Internet Protocol):提供無連接的數據包傳輸服務,包括IPv4和IPv6。
- ICMP:用于網絡診斷和錯誤報告,如ping和traceroute。
- IGMP:管理組播組成員,支持多播通信。
- ARP:為網絡層提供IP到MAC地址的解析,操作上依賴鏈路層(ARP歸屬為鏈路層協議)。
- RIP/OSPF:動態路由協議,輔助路由選擇
2.1. ICMP(互聯網控制消息協議)
ICMP用于差錯報告和網絡診斷。
- 錯誤報告:當 IP 數據包在傳輸過程中因目的地不可達、路由超時等原因不能被正常轉發或送達時,路由器或主機會利用 ICMP 向源主機發送差錯報文,告知其具體的失敗原因。
- 網絡診斷:通過 “Echo Request/Reply” 機制(即 ping 命令),可以測試兩臺主機之間的連通性、往返時延(RTT)以及丟包率。
注意:ICMP不負責數據傳輸,僅用于控制和診斷。ICMP報文封裝在IP數據包中,由網絡層處理。
3. 常見設備
- 路由器(Router):根據IP地址和路由表轉發數據包,支持NAT(網絡地址轉換)和防火墻功能。
- 三層交換機(Layer 3 Switch):結合鏈路層交換和網絡層路由功能,根據IP地址進行快速轉發。
第3層 傳輸層—TCP段或UDP數據報
負責在源主機和目的主機之間提供端到端的通信服務。根據所使用的協議,它可以確保數據的可靠傳輸(如TCP)或高效傳輸(如UDP)。傳輸層通過端口號標識應用程序,并提供流量控制、錯誤控制和連接管理等功能。
1. 傳輸層功能
- 端到端通信:在源設備和目的設備之間建立和管理通信會話。
- 數據分段與重組:將來自應用層的數據分割成適合網絡傳輸的塊(TCP稱為段,UDP稱為數據報),并在接收端按順序重組。
- 端口尋址:使用端口號區分不同的應用程序,實現數據的多路復用和解復用。
- 流量控制:通過滑動窗口機制(如TCP)調節數據發送速率,避免網絡擁塞。
- 錯誤控制:檢測數據包的丟失或損壞,并根據需要請求重傳(TCP支持,UDP不支持)。
- 連接管理:根據協議類型(如TCP面向連接,UDP無連接)建立、維護或終止連接。
2. 常見協議
2.1. TCP
是一種面向連接的、可靠的、基于字節流的傳輸層協議。
工作機制:通過三次握手建立連接,四次握手斷開連接。
- 面向連接:通信前必須“三次握手”建立連接,斷開前“四次揮手”
- 可靠性保障:通過序列號、確認號、重傳機制、校驗等方式
- 有序交付:數據按順序到達,不會亂(方法:序列號)
- 流量控制:控制發送速率(方法:滑動窗口)
- 擁塞控制:網絡擁堵時主動降低數據傳輸速率(TCP慢啟動等方法)
- 雙向通信:全雙工(雙向傳輸)
- 錯誤檢測:校驗和保證數據不出錯(方法:校驗和等方法)
場景示例:
應用 | 協議 | 為什么用TCP? |
網頁瀏覽 | HTTP/HTTPS | 要求完整、順序、可靠 |
郵件 | SMTP / IMAP / POP3 | 郵件不可丟 |
文件傳輸 | FTP | 數據不可丟 |
SSH遠程 | SSH | 丟包或錯包會導致斷開連接 |
2.2. UDP
是一種無連接、不可靠、傳輸效率高的傳輸層協議。
- 無連接:不建立連接,直接發包
- 不可靠:不確認、不重傳、不排順序
- 效率高:頭部小(8字節),資源消耗低
- 不保證順序:包可能亂序到達
場景示例:
應用 | 協議 | 為什么用UDP? |
視頻/音頻流 | RTP / VoIP | 一點丟包不影響整體體驗 |
DNS | DNS | 查詢快,包小,可靠性交給應用層 |
游戲 | 自定義UDP協議 | 掉一幀畫面也能玩 |
3. TCP三次握手與四次揮手
3.1. 名詞講解
Seq:序列號(用于標識發送的數據字節流的順序)每個 TCP 數據包(或段)都包含一個序列號。
SYN:表示該數據包用于發起連接請求或響應連接請求。
ACK:表示該數據包包含確認信息,用于通知發送方已成功接收某些數據。
FIN:表示發送方已完成數據發送,請求終止連接。
3.2. 三次握手
客戶端 <------------- 三次握手 -------------> 服務端| -------------> SYN, Seq=x -------------> | #客戶端發起連接,客戶端數據包的初始序列號為x| <------- SYN+ACK, Seq=y, Ack=x+1 ------- | #服務端響應客戶端的連接請求,并且告知客戶端我確認收到了請求。#服務端數據包的初始序列號為y,希望客戶端的下一個數據包使用x+1| -------> ACK, Seq=x+1, Ack=y+1 --------> |#客戶端響應服務端的連接請求,并告知服務端我確認收到了請求。#該數據包的序列號為x+1,希望服務端的下一個數據包使用y+1#連接建立,雙方進入ESTABLISHED(連接狀態)
3.3. 數據傳輸
客戶端 <------------- 數據傳輸 -------------> 服務端| -------> Seq=x+1, Ack=y+1 (1 byte) ----> |#客戶端發送1字節數據,希望服務端的下一個數據包使用y+1#該包的序列號為x+1,這里假設傳輸的是1字節數據,所以是x+1。#如果是100字節數據,那就是x+101。x+101是下一個包的起始序列號| <----------- ACK, Seq=y+1, Ack=x+2 ----- |#服務端確認收到數據,希望客戶端的下一個數據包使用x+2。#該包的序列號為y+1
3.4. 四次揮手
客戶端 <------------- 四次揮手 -------------> 服務端| ---------> FIN, Seq=x+2, Ack=y+1 ------> |# 客戶端發送FIN請求斷開連接,希望服務端的下一個數據包使用y+1# 該包的序列號為x+2,延續數據傳輸后的序列號# FIN占用一個序列號,類似數據傳輸的1字節| <-------- ACK, Seq=y+1, Ack=x+3 -------- |# 服務端確認收到客戶端的FIN,希望客戶端的下一個數據包使用x+3# 該包的序列號為y+1| <--------- FIN, Seq=y+1, Ack=x+3 ------- |# 服務端發送FIN請求斷開連接,希望客戶端的下一個數據包使用x+3# 該包的序列號為y+1,延續服務端的序列號| --------> ACK, Seq=x+3, Ack=y+2 -------> |# 客戶端確認收到服務端的FIN,希望服務端的下一個數據包使用y+2# 該包的序列號為x+3,連接即將關閉
3.5. 整體流程
客戶端 <------------- 三次握手 -------------> 服務端| -------------> SYN, Seq=x -------------> | | <------- SYN+ACK, Seq=y, Ack=x+1 ------- | | -------> ACK, Seq=x+1, Ack=y+1 --------> |
客戶端 <------------- 數據傳輸 -------------> 服務端| -------> Seq=x+1, Ack=y+1 (1 byte) ----> || <----------- ACK, Seq=y+1, Ack=x+2 ----- |
客戶端 <------------- 四次揮手 -------------> 服務端| ---------> FIN, Seq=x+2, Ack=y+1 ------> || <-------- ACK, Seq=y+1, Ack=x+3 -------- || <--------- FIN, Seq=y+1, Ack=x+3 ------- || --------> ACK, Seq=x+3, Ack=y+2 -------> |
4. 常見設備
- 網關:在傳輸層進行協議轉換,如將TCP/IP數據轉換為其他協議。
- 負載均衡:根據端口號分發流量,優化服務器性能。
第4層 應用層
負責為用戶應用程序提供網絡服務和通信接口。它處理數據的格式化、表示、加密以及會話管理,確保應用程序能夠通過網絡進行有效通信。
1. 應用層功能
- 網絡服務提供:為應用程序(如瀏覽器、郵件客戶端、文件傳輸工具)提供通信功能,支持網頁瀏覽、文件傳輸、電子郵件發送和接收等。
- 數據格式化:將應用程序的數據轉換為網絡可傳輸的格式(如HTTP請求、FTP命令),并在接收端將數據還原為應用程序可識別的格式。
- 會話管理:管理應用程序之間的通信會話,包括會話的建立、維護和終止。
- 安全性:通過協議內置的加密和認證機制(如HTTPS中的TLS/SSL)保護數據傳輸的安全性。
- 資源定位:通過DNS(域名系統)將域名解析為IP地址,幫助用戶訪問網絡資源。
- 用戶認證:通過協議(如FTP、SMTP、SSH)驗證用戶身份,確保訪問安全。
2. 常見協議
- HTTP/HTTPS(超文本傳輸協議/安全超文本傳輸協議):用于網頁瀏覽,HTTPS提供加密保護。
- DHCP(動態主機配置協議):動態分配IP地址,簡化網絡配置
- FTP(文件傳輸協議):用于在網絡上上傳和下載文件。
- SMTP(簡單郵件傳輸協議):用于發送電子郵件。
- POP3/IMAP(郵局協議/互聯網消息訪問協議):用于從郵件服務器接收電子郵件。
- DNS(域名系統):將域名(如www.baidu.com)解析為IP地址。
- Telnet/SSH(遠程登錄協議/安全Shell協議):用于遠程登錄到網絡設備,SSH提供加密保護。
3. 常見軟件
- Web服務器:如Apache、Nginx、IIS,提供網頁內容。
- DNS服務器:如BIND,負責域名解析。
- 客戶端應用程序:如瀏覽器(Chrome、Firefox)、郵件客戶端(Outlook、Thunderbird)
如果按照設備劃分的話可分為:
服務器(Server):提供網絡服務,如:Web服務器、郵件服務器等
客戶端(Client):請求服務的設備:如電腦或手機
TCP/IP通信流程
1. 發送端
- 應用層:在瀏覽器輸入某網址,瀏覽器通過HTTP協議生成請求數據(例如GET /index.html)。
- 若使用HTTPS,數據會通過SSL/TLS加密,準備發送給Web服務器。
- 傳輸層:數據被分割成小塊(Segment),添加TCP頭部,形成TCP段。
- TCP頭部包含源端口(隨機端口,如49152)、目標端口(通常為80或443)、序列號、確認號和校驗和,用于確保可靠傳輸。
- 網絡層:TCP段被封裝成IP數據包,添加IP頭部,包含源IP地址和目的IP地址。
- 若使用IPv4,頭部還包括協議類型(TCP)。
- 鏈路層:IP數據包被封裝成數據幀,添加鏈路層頭部(如以太網頭部,包含源MAC地址和目標MAC地址)和尾部(如CRC校驗),通過網卡準備發送到局域網。
- 數據幀通過物理介質(如網線、Wi-Fi)轉換為電信號、光信號或無線信號傳輸到網絡。
2. 接收端
- 鏈路層:接收電信號、光信號或無線信號,轉換為數據幀。
- 檢查MAC地址是否匹配,驗證幀的完整性(通過CRC校驗),剝離鏈路層頭部和尾部,提取IP數據包。
- 網絡層:解析IP數據包,檢查目的IP地址是否匹配本地設備,剝離IP頭部,提取TCP段,傳遞給傳輸層。
- 若需跨網絡,路由器會根據IP地址轉發數據包。
- 傳輸層:解析TCP段,檢查端口號(例如80或443)以確定目標應用,驗證序列號確保數據按序到達,剝離TCP頭部,重組數據段,傳遞給應用層。
- 若數據丟失,觸發重傳機制。
- 應用層:Web服務器接收HTTP請求數據(若為HTTPS,解密SSL/TLS數據),處理請求,生成響應數據(如HTML網頁內容),并通過相同流程返回給客戶端。