tft每日頭條

 > 生活

 > 簡述tcpip五層模型各層對應的協議

簡述tcpip五層模型各層對應的協議

生活 更新时间:2025-02-03 03:10:24

詳解TCP/IP協議之:TCP/IP實際結構、以太網協議、IP協議

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)1

引言

最近一枚網絡運維老狗被00後小鮮肉憋的高血壓都犯了。

原因是公司某業務突發故障,老狗零延遲響應,驗證網絡正常,推斷是業務的應用層面有問題。結果被00後業務運維小鮮肉在大群中急速怼了回來,說:怎麼可能!!IP地址都PING不通,不是網絡出問題了?!

領導神補刀後,老狗半天沒喘上氣。領導說各方都不要甩鍋,甩鍋者季度績效得C。

老狗上有老小有小,不敢得罪大領導。隻能憋的血壓升高,吐血整理出了關于TCP/IP協議的知識總結,供大家學習,特别是希望00後小鮮肉能看到。

上篇主要帶大家看看TCP/IP實際結構和實際結構中底層協議(以太網和IP協議),因為本老狗發現目前網上各種介紹TCP/IP協議的文章中,重點都會放在TCP協議上,卻忽略了對下層協議的詳細講解。

借此機會好在本篇文章中填補空白,給同學們詳細道來。

一.TCP/IP實際結構

這裡說的TCP/IP實際結構,是通過分析數據包看到實際結構。有别于TCP/IP參考模型和OSI參考模型中的标準結構。

TCP/IP實際結構、TCP/IP參考模型和OSI參考模型三者的對比圖如下,可以看到TCP/IP實際結構分了五層。

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)2

TCPIP實際結構

通過抓取的數據包驗證TCP/IP實際的五層結構。可以看到最外層物理層,之後依次是數據鍊路層、網絡層、傳輸層和應用層。截圖如下圖所示:

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)3

TCP/IP五層結構

對于TCP/IP的五層結構,除了物理層不詳細講解外(其實也沒啥講的,就是一句話:物理層的作用就是透明的傳輸比特流), 其他四層都會進行詳細介紹。

數據包的封裝形式

要詳細說TCP/IP實際的五層結構,得先知道這五層結構中的每一層是怎麼組合在一起的。這裡有必要先提一下數據包的封裝形式。

說的通俗點,數據包封裝形式和洋蔥類似,都是一層一層包起來的。咱們展開數據包進行分析時,就像是在剝洋蔥,總有一層能讓你流淚的(玩笑)。

下圖直觀的展示了數據包的封裝形式:

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)4

數據包的封裝

下面通過分析數據包中各層級字節數情況從另外一個側面來展示數據包的封裝形式。

選取一幀數據包(第4幀),看到此幀為HTTP請求,說明此數據包中有完整的五層信息。此幀的大小是448字節(不包含CRC循環校驗位),并且此幀不含有IP選項和TCP頭部選項。預測此幀中TCP的數據部分(即HTTP頭部即數據部分)的大小應該為448-14(以太網首部)-20(IP首部)-20(TCP首部)= 394字節。展開數據包後,看到TCP的數據部确實是394字節。具體如下圖所示。

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)5

數據表字節數

分用

秒懂了什麼是數據包的封裝形式後,還需要了解在撥開數據包某一層時如何确認下一層的協議類型,這就要明确一個概念了:分用。

TCP首部和UDP首部都有端口号字段,用于标識應用層的協議。其中1-1023為知名端口号和預留端口号。1024-65535為臨時端口号,分配給應用臨時使用。

這種在低層級的首部中用于标識高一層級的協議類型的方式即為分用,這樣網絡設備和程序在拆解數據包時就能根據特定的标識正确的将數據包傳輸正确的地方。

分用的示意圖下圖所示:

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)6

分用示意圖

有了上面的解釋和示意圖,我們再來具體分下分用的抓包分析。

以太網幀首部有一個2字節的幀類型域。幀類型域用于标識其網絡層為何種協議(以太網的協議号)(如,IP:0x0800,ARP:0X0806,RARP:0X0835)。幀類型域的标識下圖所示:

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)7

幀類型域标識

IP首部中有一個1字節的協議域,也用于标識傳輸層為何種協議(如ICMP:1,TCP:6,UDP:17,GRE:50)。協議域的标識下圖所示:

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)8

協議域标識(ICMP)

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)9

協議域标識(TCP)

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)10

協議域标識(UDP)

二、以太網協議

以太網是最早是美國施樂公司和前DEC公司設計的一種通信方式,之後由IEEE802.3委員會将其規範化。但是兩者之間對以太網幀的格式定義有所不同。為區别兩種封裝方式,一般都使用802.3封裝和以太網封裝來進行稱呼。本老狗的網絡環境多用以太網協議,所以這裡隻對以太網封裝做詳細介紹。

撥開第一層,可以看到以太網的首部,格式如下圖所示:

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)11

以太網首部

以太網各字段主要含義:

(1) 目的地址和源地址

以太網格式采用48 比特的目的地址和源地址作為通信地址,這就是我們說的硬件地址。

(2) 類型

标識以太網封裝中的類型标識上一層(即網絡層)使用的協議:0X0800為IP數據報;0X0806為ARP請求/應答;0X8035為RARP請求/應答。

(3) 數據部分

數據部分長度必須在46-1500字節之間。為了保證這一點,必須在不足的空間插入填充字節。

(4) 校驗

CRC字段用于幀内後續字節差錯的循環冗餘碼檢驗(檢驗和)(也被稱為FCS或幀檢驗序列)。

MTU

剛才提到以太網數據部分長度必須在46-1500字節之間。估計有同學會問本老狗了,為什麼長度有這個規定呢?

這是一個曆史性問題了,在設計以太網的年代,帶寬還不是實時雙向的。就像過獨木橋,同一時間,隻能允許一個方向的人流通過。但如果一個方向的人一直在通過,對面方向豈不無法通行。這就需要定個規則,規定一個方向一次最多通行幾人,然後再讓對面方向的人通過。

所以在設計以太網時,人為規定了每個幀的最大長度1500字節 (即除去以太網幀首部的數據部分),作為每次數據傳輸的最大傳輸單元(即MTU)。

三.IP協議

IP是TCP/IP協議中最為核心的協議,所有的TCP/UDP/ICMP等數據都以IP數據包格式傳輸。IP提供的數據報傳輸服務是不可靠、無連接的。

不可靠的意思是它不能保證IP數據報能成功地到達目的地。IP僅提供最好的傳輸服務。如果發生某種錯誤時,IP有一個簡單的錯誤處理算法,即丢棄該數據報,然後發送ICMP消息報給信源端。任何要求的可靠性必須由上層來提供(如TCP協議)。

無連接的意思是IP并不維護任何關于後續數據報的狀态信息。每個數據報的處理是相互獨立的。這也說明, IP數據報可以不按發送順序接收。如果某一源地址向相同的目的地址發送兩個連續的數據報(先是A,然後是B),每個數據報都是獨立地進行路由選擇,可能選擇不同的路線,因此B可能在A到達之前先到達。

撥開第二層,可以看到IP的首部。IP首部排版格式如下圖所示,每行代表32比特(即四個字節)。最高位在左邊,記為0 比特;最低位在右邊,記為31 比特。

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)12

IP首部

IP首部各字段主要含義:

(1) 版本号(4位):目前版本号是4。

老狗後續會專門寫一篇關于IPV6文章,再詳細介紹IPV6内容。

(2) 首部長度( 4位):

首部長度指的是首部占32比特(4字節)的數目。如下圖所示,首部長度是5,即首部長度是5*4字節=20字節。

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)13

版本首部長度

(3) 服務類型(8位)

服務類型字段通常在QoS中用的到,這裡暫做忽略。

(4) 總長度(16位):整個IP數據報的長度(包括IP首部),以字節為單位。

舉個例子,請看下圖。該截圖中,總長度字段在十六進制中的标識為"05 9C",可轉換成16位的二進制的"0000 0101 1001 1100",或者十進制的"1436"

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)14

總長度

(5)标識字段(16位):

标識字段唯一地标識主機發送的每一份數據報。通常每發送一份報文它的值就會加1。主要用于分片重組,該值在數據報分片時被複制到每個片中。此外,如果标識ID相同,但是源地址/目标地址/協議/端口不同,也是不同的分片。

有的同學有疑惑,發現一個數據流中标識字段不是按順序增加的。

老狗在這裡做個答疑。這位同學的數據應該是個多會話的業務,各會話之間并行傳輸。如果隻展開一個會話,看到的标識字段不是按順序增加的。但是從總體看,從幀的順序來看,标識字段是按順序增加的(前提抓包時要抓全量的數據)。

下圖可以看到一個TCP流中的同一個方向連續兩幀(1825,1828)的标識字段并不是連續的。

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)15

TCP流中一個方向連續兩幀

下圖是從整體分析,1825和1827是一個方向的連續兩幀,展開看到标識字段是連續的。

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)16

整個幀中一個方向連續兩幀

(6)标志字段(3位)

标志字段用其中一個bit來表示"更多的片 MF (More fragement)"; 标志字段中有一個bit稱作"不分片 DF(Don't fragment)"位;如果将這一比特置1,IP将不對數據報進行分片。相反會把數據報丢棄并發送一個ICMP差錯報文給起始端。标志字段如下圖所示:

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)17

标志字段

(7)偏偏移(13位)

片偏移字段指的是該片偏移原始數據報開始處的位置。相對用戶數據字段的起點,該片從何處開始,單位是字節。片偏移如下圖所示。UDP的分片分析,老狗回來後續的UDP文章中展開分析。

簡述tcpip五層模型各層對應的協議(一文秒懂TCPIP實際五層結構)18

片偏移

(8)生存時間(8位)

TTL标識能夠經過多少條路由器,每經過一個路由器,TTL減1。

(9)協議字段(8位)

協議字段指出此數據報攜帶的數據是使用何種協議。

常用的IP協議号:ICMP-1,TCP-6,UDP-17,GRE-47,ESP-50,AH-51

(10)首部檢驗和(16位)

首部檢驗和字段是根據IP首部計算的檢驗和碼,它不對首部後面的數據進行計算。ICMP、UDP和TCP在它們各自的首部中均含有同時覆蓋首部和數據檢驗和碼。

(11)源IP地址和目的IP地址 (32位)

(12)選項部分

該部分長度可變,一般不在實際生産中使用。包括源路由、路徑記錄、時間戳等。

上篇完結

--喜歡的同學請點擊關注哦--

下篇文章:

我為什麼學IT

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved