【TCP/IP 協議】 TCP/IP 基礎
總結 :
通過學習 TCP/IP 基礎, 並總結相關筆記 和 繪製思維導圖 到部落格上, 對 TCP/IP 框架有了大致瞭解, 之後開始詳細學習資料鏈路層的各種細節協議, 並作出筆記;
一. TCP/IP 分層
思維導圖 :
TCP / IP 四層簡介 :
-- 應用層 : Telnet, FTP, SMTP, SNMP, DNS, URI, HTML, HTTP 等協議;
-- 運輸層 : TCP, UDP, SCTP, DCCP, UDP-Lite 協議;
-- 網路層 : IP, ICMP, IGMP, ARP 協議;
-- 鏈路層 : 裝置驅動程式 與 網路介面 (網絡卡);
1. 鏈路層 (資料鏈路層 / 網路介面層)
鏈路層 (資料鏈路層 / 網路介面層) 簡介 :
-- 驅動程式 : 鏈路層包括 網路相關的裝置 的驅動程式, 驅動程式是作業系統與硬體之間進行互動的軟體, 相當與橋樑;
-- 網絡卡 : 一臺計算機有多個網絡卡 例如 eth0, wlan0 等;
-- 作用 : 該層主要處理與物理傳輸介質 (電纜, 光線, 無線) 相關的 物理介面細節相關問題;
-- 鏈路層提供者 : 鏈路層功能一般由 硬體 (網路裝置) 及其 驅動程式 提供;
2. 網路層 (網際網路層)
(1) 網路層簡介
網路層 (網際網路層) 簡介 :
-- 作用 : 處理分組在網路中的活動, 如包傳輸的相關活動 分組選路, 通過該層, 傳輸層及以上的層次
-- 包含的協議 : IP協議 (網際協議), ICMP 協議 (Internet 網際網路控制報文協議), IGMP 協議 (Internet 組管理協議);
-- 網路層提供者 : 網路層 和 傳輸層的功能 一般由 作業系統提供;
網路層相關裝置分析 :
-- 實現網路層的裝置 : 網際網路 就是 實現了 網路層 功能的網路, 網際網路的所有 主機 和 路由器 必須實現 IP 功能, 路由器 必須實現通過網際網路層 轉發分組資料包的功能;
-- 無須實現網路層裝置 : 對於其它的網路裝置 網橋, 中繼器, 集線器 就不用實現 IP 或者 TCP 功能;
(2) IP 協議
IP 協議 : 該協議 基於 IP 地址 轉發分包資料;
-- 使用 IP 地址標識 : 該協議 跨網路傳送資料包, 整個網際網路可以通過 IP 地址作為主機的標識, 能夠傳送接收資料;
-- IP 協議隱含功能 : IP 協議對上層透明, 該協議隱含 資料鏈路層 功能, 相互通訊的主機 不管經過了 什麼種類的資料鏈路層, 都可以進行通訊;
-- 協議可靠性 : IP 協議是分組交換協議, 但是不具備重發機制, 分組資料包未打到目的主機也不會重發, 該協議屬於非可靠性傳輸協議;
(3) ICMP 協議
ICMP 協議 : IP 協議附屬協議, 用於主機 和 路由器間交換錯誤報文 和 其它重要資訊;
-- 作用 : 當 IP 資料包在傳送過程中無法到達目標主機時, 需要給傳送端發一個異常通知, 就是 ICMP 資料包;
-- 使用場景 : 診斷網路的健康狀況;
(4) ARP 協議 和 RARP 協議
ARP 協議 :
-- 作用 : 從分組資料包 IP 地址解析實體地址 (MAC 地址) 協議;
RARP 協議 : 逆地址解析協議;
(5) IGMP 協議
IGMP 協議 (Internet 組網管理協議) : 把一個 UDP 資料報多播到多個主機;
3. 運輸層
(1) 運輸層簡介
運輸層簡介 :
-- 作用 : 為兩臺主機上的應用程式提供端到端的通訊, 通過 埠號 識別兩臺主機上哪些程式在跟哪些程式進行通訊;
-- 包含的協議 : TCP 協議 (傳輸控制協議), UDP 協議 (使用者資料報協議);
(2) TCP 協議
TCP 協議 (傳輸控制協議) : 面向連結協議, 該協議為兩臺主機提供可靠的資料通訊;
-- 分塊傳網路層 : 在 運輸層 中將 應用層 傳下來的資料分成資料塊;
-- 確認分組 : 確認接收到資料的分組;
-- 設定超時時間 : 為資料塊設定超時時間, 一旦超過超時時間就重新發送;
TCP 協議優點 和 侷限性 :
-- 優點 : 保證兩個主機間通訊可達, 能正確處理在傳輸過程中丟包, 亂序等異常情況, 其能夠有效利用頻寬, 緩解網路擁堵;
-- 侷限 : TCP 連線建立 和 斷開 至少需要 7次發包 和 收包, 導致流量浪費, TCP 中定義的各種為了提高網路效率的規範 不理於視訊, 音訊傳輸;
(3) UDP 協議
UDP 協議 (使用者資料報協議) : 無連線協議;
-- 作用 : 提供服務簡單, 只將資料報分組傳送到另一臺主機, 不關心資料報能否到達;
-- 使用場景 : 分組資料較少, 多播, 廣播, 多媒體領域;
(4) TCP 與 UDP 比較
TCP 和 UDP 比較 :
-- TCP : TCP 協議提供了高可靠性的資料通訊, 應用層可以忽略資料傳輸可靠性的細節;
-- UDP : 使用該協議 必須在應用層考慮資料可靠性;
4. 應用層
(1) 應用層簡介
應用層簡介 :
-- 作用 : 處理應用程式中的細節;
-- 包含的協議 : Telnet 遠端登入, FTP 檔案傳輸協議, SMTP 簡單郵件傳輸協議, SNMP 簡單網路管理協議;
(2) HTTP 協議
HTTP 協議 : 該協議是 WEB 通訊中的 瀏覽器 與 伺服器 端通訊所用的協議, 傳輸資料的格式是 HTML;
-- 協議所在層 : HTTP 屬於 WWW 協議中的一種, HTTP 協議對應 OSI 七層協議中的 表示層協議, 在 TCP/IP 協議中屬於 應用層協議;
(3) FTP 協議 (檔案傳輸協議)
FTP 協議簡介 :
-- 傳輸過程 : FTP 協議檔案傳輸會建立兩個 TCP 連線, 一個是 傳輸請求時需要的控制連線, 一個是傳輸實際檔案資料用的資料連線;
(4) TELNET 和 SSH 協議 (遠端登入協議)
TELNET 協議 和 SSH 協議 : 這兩種協議是 TCP/IP 網路中常用的兩種遠端登入協議;
(5) SNMP 協議 (網路管理協議)
SNMP 協議介紹 :
-- 具體的管理過程 : 通過 網路管理終端 (SNMP 管理器) 管理 伺服器, 路由器 交換機等, 管理內容有 資訊通知, 故障通知, 通知設定, 操作檢查, 配置變化 等;
-- 主要作用 : SNMP 協議可以對網路上的裝置進行遠端修改配置, 可以對大範圍複雜網路進行有效管理, 檢查 SNMP 代理 是否正常執行, 可以讓管理員及時發現故障;
SNMP 協議組成 :
-- SNMP 代理 (Agent) : SNMP 管理的 路由器, 伺服器, 交換機, PC機 等裝置叫做 SNMP 代理;
-- 管理器 (Manager) : SNMP 中進行管理的那部分, 即網路管理終端;
MIB 協議 (Manager Infomation Base) : SNMP 代理端 (即 主機, 路由器, 交換機) 儲存 網路介面資訊, 通訊資料量, 異常資料量 以及 裝置溫度 等資訊, 訪問這些資料的協議是 MIB 協議;
5. 每層之間的關係
示例 : 網頁瀏覽, 在瀏覽器端瀏覽網頁;
-- 應用層 : 使用 HTTP 協議;
-- 運輸層 : 使用 TCP 協議;
-- 網路層 : 使用 IP 協議;
-- 鏈路層 : 網路裝置驅動程式, 和網絡卡物理介面;
協議執行位置 :
-- 使用者空間 : 應用層協議 一般是在使用者進行中處理, 執行在使用者空間;
-- 核心空間 : 運輸層 網路層 鏈路層 一般執行在核心空間中;
下層協議對上層透明 : 高層的協議不關心 也不處理 低層協議 相關資料, 對下層協議一無所知;
5. 網路層 和 運輸層的區別
TCP/IP 四層協議的作用 和 區別 :
-- 鏈路層 和 應用層 的明顯作用 : 鏈路層處理物理介質相關的傳輸媒介 以及物理裝置相關的細節, 應用層 處理與應用程式相關的資料;
-- 網路層 和 運輸層 區別不明顯 : 兩層主要是網路傳輸相關, 這兩層區分並不是很明確;
不同型別網路連線 : 乙太網, 令牌環網, FDDI (光線分散式資料介面), 點對點連結, 這些網路中的主機互相都可以通訊;
-- 路由器 : 路由器可以將多個不同型別的網路連線起來;
-- 路由器介面 : 路由器必須有多個網路介面,
網橋與路由器區別 :
-- 網橋 : 網橋 在鏈路層 連線網路;
-- 路由器 : 路由器 是在網路層連線網路;
端系統 和 中間系統 : 網路層是個中間系統, 傳輸層是個端系統;
-- 端系統 (End System) : 應用層 和 傳輸層 使用端到端 (End-to-end) 協議;
-- 中間系統 (Intermediate System) : 網路層 使用逐跳 (Hop-by-hop) 協議;
網路層 和 運輸層作用 : 傳輸層 和 網路層負責的功能不同;
-- 網路層 : IP 協議提供不可靠服務, 將分組從源節點 送到 目的節點;
-- 傳輸層 : TCP 協議採用超時重傳 和 端到端分組確認等機制, 保證可靠性;
二. TCP / IP 相關網路知識
1. 網際網路地址
(1) 按照 IP 地址格式分類
IP 地址分類 : IP 地址長度 32bit, 4 個位元組, 每個 IP 地址都由 標識位, 網路號, 和 主機號三部分組成;
-- 點分十進位制 : 32 位二進位制數, 每個十進位制整數對應一個位元組;
-- 網路區分 : 第一個十進位制整數即可區分 IP 地址型別, 0 ~ 127 A類, 128 ~ 191 B類, 192 ~ 223 C類, 224 ~ 239 D類, 240 ~ 225 E類;
A類地址 :
-- 組成 : 標識位 0, 網路號 7 位, 主機號 24 位,
-- 十進位制取值範圍 : 0.0.0.0 ~ 127.255.255.255;
-- 二進位制取值範圍 : 0(標識位) 0000000(網路號) 00000000 00000000 00000000(主機號) ~ 0(標識位) 1111111(網路號) 11111111 11111111 11111111(主機號);
B類地址 :
-- 組成 : 標識位 10, 網路號 14 位, 主機號 16 位;
-- 十進位制取值範圍 : 128.0.0.0 ~ 191.255.255.255;
-- 二進位制取值範圍 : 10(標識位) 000000 00000000(網路號) 00000000 00000000(主機號) ~ 10(標識位) 111111(網路號) 11111111 11111111 11111111(主機號);
C類地址 :
-- 組成 : 標識位 110, 網路號 21位, 主機號 8位;
-- 十進位制取值範圍 : 192.0.0.0 ~ 223.255.255.255;
-- 二進位制取值範圍 : 110(標識位) 00000 00000000 00000000(網路號) 00000000(主機號) ~ 110(標識位) 11111 11111111 11111111(網路號) 11111111(主機號)
D類地址 :
-- 組成 : 標識位 1110, 多播組號 28 位;
-- 十進位制取值範圍 : 224.0.0.0 ~ 239.255.255.255;
-- 二進位制取值範圍 : 1110(標識位) 0000 00000000 00000000 00000000 00000000(多播組號) ~ 1110(標識位) 1111 11111111 11111111 11111111(多播組號);
E類地址 :
-- 組成 : 標識位 11110, 保留 27 位;
-- 十進位制取值範圍 : 240.0.0.0 ~ 255.255.255.255;
-- 二進位制取值範圍 : 11110(標識位) 000 00000000 00000000 00000000(保留位) ~ 11110(標識位) 111 11111111 11111111 11111111(保留位);
(2) 按照 目的地址 分類
按目的地址分類 IP 地址 :
-- 單播地址 : 目的端為單個主機;
-- 廣播地址 : 目的端是給定網路的所有主機;
-- 多播地址 : 目的端是同一組的所有主機;
(3) IP 地址管理機構
網際網路絡資訊中心 (Internet Network Information Center) 簡稱 InterNIC, 職責是 分配網路號;
2. 域名
DNS (域名系統) : DNS 是一個分散式資料庫, 提供 IP 地址 和 主機名之間的對映;
地址解析函式 :
-- 正函式 : 給定主機名, 查詢主機 IP 地址;
-- 逆函式 : 給定主機 IP 地址, 查詢主機名;
3. 埠號
埠號簡介 : 埠號是 TCP UDP 協議識別主機上的應用程式用的;
-- 埠號位數 : 埠號是 16 bit 的數字, 取值範圍 1 ~ 65535;
-- 埠號所在層 : 埠號是 運輸層 使用的, 主要配合 TCP UDP 使用, 脫離這兩個協議埠號將毫無用處;
客戶埠號 (臨時埠號) : TCP/IP 提供給客戶端的臨時埠號是 1024 ~ 5000;
-- 臨時埠不重要 : 客戶端對臨時埠號不關心, 保證埠號唯一即可;
服務埠號 :
-- 埠號定義位置 : 在 UNIX 系統的檔案的 /etc/services 包含了系統服務的埠號, 使用 sudo vim /etc/services 命令檢視 Ubuntu 系統的埠號;
-- 服務埠號規律 : TCP/IP 提供的服務埠號都使用的 知名埠號, 即 1 ~ 1023 之間;
-- 服務埠號示例 : FTP 服務 TCP 埠號 : 21, Telnet 服務 TCP 埠號 : 23, TFTP 服務 UDP 埠號 : 69;
tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users
daytime 13/tcp
daytime 13/udp
netstat 15/tcp
qotd 17/tcp quote
msp 18/tcp # message send protocol
msp 18/udp
chargen 19/tcp ttytst source
chargen 19/udp ttytst source
ftp-data 20/tcp
ftp 21/tcp
fsp 21/udp fspd
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp
telnet 23/tcp
smtp 25/tcp mail
三. TCP/IP 分層通訊處理過程
1. 資料包首部資訊
(1) 首部資訊結構
首部資訊結構 : TCP/IP 中每個分層都會對資料附加一個首部, 首部包含了該層的相關資訊;
-- 傳輸層 : (TCP 包首部)(TCP 中的資料) ;
-- 網路層 : (IP 包首部)( IP 資料 : (TCP 包首部)(TCP 中的資料)) ;
-- 鏈路層 : (乙太網 包首部) ( 乙太網資料 : (IP 包首部)( IP 資料 : (TCP 包首部)(TCP 中的資料))) ;
(2) TCP/IP 資料相關概念
包 : TCP / IP 協議中, 每一層的資料都可以成為包, 是一個全能術語;
幀 (乙太網資料幀) : 鏈路層包的單位;
資料包 (IP資料報) : 網路層以上包的單位, IP 給 鏈路層的資料包稱為 IP 資料報 (IP datagram);
段 (TCP 報文段) : TCP 資料包, TCP 傳遞給 IP 的資料包成為 TCP 報文段 (TCP segment);
訊息 : 應用層的資料包;
2. 封裝 和 分用
(1) 封裝
乙太網資料幀 : 鏈路層的 資料幀長度在 46 ~ 1500 位元組之間;
每個首部的大小 : 乙太網首部 | IP 首部 | TCP 首部 | 應用資料(Appl | 使用者資料) | 乙太網尾部 ;
-- 乙太網首部 : 14位元組, 需要傳送 接收 IP ARP RARP 資料, 上面三種資料包需要標識;
-- IP 首部 : 20位元組, 該首部 有一個 8bit 的數值, 用於標識 TCP(標識6) UDP(標識17) ICMP(標識1) IGMP(標識2) 協議;
-- TCP 首部 : 20位元組, 這裡也可以是 UDP 首部, 由於 UDP 首部是不可靠的, 資料量比較少, 只有 8位元組, TCP 和 UDP 需要 16bit 的埠號標識應用程式;
(2) 分用
分用定義 : 主機在鏈路層接收到 乙太網資料幀, 該資料會逐層上升, 在每層都去掉該層的首部資訊, 並校驗首部資訊是否正確, 該過程就是分用;
(3) 封裝 和 分用 總結
封裝分用總結 : 傳送資料 從應用層到鏈路層 逐層加資料包 是封裝, 接收資料 從鏈路層到應用層 逐層解包 是分用;
四. TCP / IP 通訊示例
1. 資料包傳送過程
(1) 應用層處理
準備資料 : 應用層經過使用者應用程式處理, 準備要傳送的資訊;
(2) 傳輸層處理 (TCP模組)
TCP 連線管理 : 應用層傳送資料時, TCP 模組建立連線, 使用這個連線傳送資料, 傳送完畢之後斷開連線;
封裝 TCP 首部 : 為了實現可靠的 TCP 傳輸, 需要在應用層的資訊的前端附加一個 TCP 首部;
-- TCP 首部組成 : 源埠號, 目的埠號, 序號, 校驗和;
(3) 網路層處理 (IP 模組)
封裝 IP 首部 : TCP 模組將 TCP首部 和 TCP 資料合成 TCP 報文段, 傳入到 IP 模組, IP 模組在 TCP 報文段前端加上 IP 首部;
-- IP 首部組成 : 接收端 IP 地址, 傳送端 IP 地址, 緊隨其後的是 UDP/TCP 協議識別標識;
送到鏈路層 :
-- 查詢路徑 : IP 資料報 生成後, 參考路由控制表決定該 IP 資料報的 路由 或 主機 路徑;
-- 查詢 MAC 地址 : 利用 ARP 查詢 MAC 地址;
-- 提交到鏈路層 : IP 資料報提交給鏈路層 需要將 MAC 地址 和 IP 地址一起提交到下一層;
(4) 鏈路層處理
封裝 乙太網 首部 : 網路層傳遞 IP 資料報到鏈路層, 在該層給 IP 資料報附加 乙太網首部 併發送出去;
-- 乙太網首部組成 : 傳送端 MAC 地址, 接收端 MAC 地址, 標識乙太網型別(PPP, 令牌環等)的乙太網資料協議;
封裝 乙太網 尾部 : 封裝完首部之後, 還需要加上一個 FCS 尾部, 該 FCS 由硬體計算生成, 判斷是否因為物理介質干擾而導致資料被破壞;
(5) 包首部新增流程
新增流程 : 應用層資訊 -> TCP (UDP) 包首部 -> IP 包首部 -> 乙太網包首部 -> 乙太網包尾部;
包首部資訊規律 : 每層新增的包首部 一般都包含 傳送 和 接收 地址資訊, 上一層的協議型別;
-- 鏈路層 : 使用 傳送端 和 接收端的 MAC 地址;
-- 網路層 : 使用 傳送段 和 接收端的 IP 地址, 該層還需要一個 協議型別, 說明在傳輸層使用的是 TCP 還是 UDP 協議;
-- 傳輸層 : 使用 傳送段 和 接收端的 埠號;
2. 資料包接收過程
(1) 鏈路層處理
鏈路層處理流程 : 判定地址有效行 -> 確定上層協議型別 -> 傳遞給上層對應協議處理模組;
-- 判定地址有效性 : 主機收到 乙太網資料幀後, 解析乙太網包頭, 檢視 目的端 MAC 地址是否為本機地址, 如果不是丟棄該 幀;
-- 判定協議型別 : 查詢 乙太網資料包首部中的 型別域, 確定該資料包是 IP 資料報, 還是 ARP 協議, 如果無法識別協議型別, 丟棄;
-- 傳遞給對應模組處理 : 如果是 IP 資料報, 傳遞給 IP 模組處理, 如果是 ARP 協議, 就傳遞給 ARP 模組處理;
(2) 網路層處理 (IP 模組)
IP 模組處理流程 (沒有路由器的情況) : 判定 IP 地址 -> 判定協議;
-- 判定 IP : 分析 IP 包首部的 目的 IP 地址, 如果 IP 地址是本機地址, 就進行下面的操作;
-- 判定協議 : 判定 上層協議是 TCP 還是 UDP, 交給對應模組處理;
有路由器的情況 : 如果有路由器, 接收端地址一般是 路由器的 IP 地址, 需要查詢路由表, 查詢到 目的主機 或 路由器 後在轉發資料包;
(3) 傳輸層處理 (TCP 模組)
傳輸層處理流程 : 校驗資料完整性 -> 校驗資料次序 -> 校驗程式埠 -> 傳送回執 -> 送到應用層;
-- 校驗完整性 : TCP 模組接收到資料包後, 首先計算校驗和, 判斷資料是否被破壞;
-- 校驗次序 : 檢查資料包的序號, 檢視是否在按照次序接收資料;
-- 校驗埠號 : 通過埠號獲取具體的應用程式;
-- 傳送回執 : 資料接收完畢後, 傳送一個回執給傳送端, 如果傳送端未收到回執, 傳送端會一直髮送資料給接收端;
-- 傳遞給應用層 : 資料被接收以後, 會根據埠號識別應用程式, 將資料傳遞給那個應用程式;