1. 程式人生 > >【TCP/IP 協議】 TCP/IP 基礎

【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 比較

-- TCPTCP 協議提供了高可靠性的資料通訊, 應用層可以忽略資料傳輸可靠性的細節; 

-- 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 模組接收到資料包後, 首先計算校驗和, 判斷資料是否被破壞;

-- 校驗次序 : 檢查資料包的序號, 檢視是否在按照次序接收資料;

-- 校驗埠號 : 通過埠號獲取具體的應用程式;

-- 傳送回執 : 資料接收完畢後, 傳送一個回執給傳送端, 如果傳送端未收到回執, 傳送端會一直髮送資料給接收端;

-- 傳遞給應用層 : 資料被接收以後, 會根據埠號識別應用程式, 將資料傳遞給那個應用程式;