一、前言
目前,網絡的速度發展非常快,學習網絡的人也越來越多,稍有網絡常識的人都知道TCP/IP協議是網絡的基礎,是Internet的語言,可以說沒有TCP/IP協議就沒有互聯網的今天。目前號稱搞網的人非常多,許多人就是從一把夾線鉗,一個測線器聯網開始接觸網絡的,如果只是聯網玩玩,知道幾個Ping之類的命令就行了,如果想在網絡上有更多的發展不管是黑道還是紅道,必須要把TCP/IP協議搞的非常明白。
學習過TCP/IP協議的人多有一種感覺,這東西太抽象了,沒有什麼數據實例,看完不久就忘了。本文將介紹一種直觀的學習方法,利用協議分析工具學習TCP/IP,在學習的過程中能直觀的看到數據的具體傳輸過程。
爲了初學者更容易理解,本文將搭建一個最簡單的網絡環境,不包含子網。
二、試驗環境
1、網絡環境
如圖1所示
圖1
爲了表述方便,下文中208號機即指地址爲192.168.113.208的計算機,1號機指地址爲192.168.113.1的計算機。
2、操作系統
兩臺機器都爲Windows 2000 ,1號機機器作爲服務器,安裝FTP服務
3、協議分析工具
Windows環境下常用的工具有:Sniffer Pro、Natxray、Iris以及windows 2000自帶的網絡監視器等。本文選用Iris作爲協議分析工具。
在客戶機208號機安裝IRIS軟件。
三、測試過程
1、測試例子:將1號機計算機中的一個文件通過FTP下載到208號機中。
2、IRIS的設置。
由於IRIS具有網絡監聽的功能,如果網絡環境中還有其它的機器將抓很多別的數據包,這樣爲學習帶來諸多不便,爲了清楚地看清楚上述例子的傳輸過程首先將IRIS設置爲只抓208號機和1號機之間的數據包。設置過程如下:
1)用熱鍵CTRL+B彈出如圖所示的地址表,在表中填寫機器的IP地址,爲了對抓的包看得更清楚不要添主機的名字(name),設置好後關閉此窗口。
圖2
2)用熱鍵CTRL+E彈出如圖所示過濾設置,選擇左欄「IP address」,右欄按下圖將address book中的地址拽到下面,設置好後確定,這樣就這抓這兩臺計算機之間的包。
圖3
3、抓包
按下IRIS工具欄中 開始按鈕。在瀏覽器中輸入:[url]FTP://192.168.113.1[/url],找到要下載的文件 ,鼠標右鍵該文件,在彈出的菜單中選擇「複製到文件夾」開始下載,下載完後在IRIS工具欄中按 按鈕停止抓包。圖4顯示的就是FTP的整個過程,下面我們將詳細分析這個過程。
圖4
說明:爲了能抓到ARP協議的包,在WINDOWS 2000 中運行arp –d 清除arp緩存。
四、過程分析
1、TCP/IP的基本原理
本文的重點雖然是根據實例來解析TCP/IP,但要講明白下面的過程必須簡要講一下TCP/IP的基本原理。
A.網絡是分層的,每一層分別負責不同的通信功能。
TCP/IP通常被認爲是一個四層協議系統,TCP/IP協議族是一組不同的協議組合在一起構成的協議族。儘管通常稱該協議族爲TCP/IP,但TCP和IP只是其中的兩種協議而已,如表1所示。每一層負責不同的功能:
表1
分層的概念說起來非常簡單,但在實際的應用中非常的重要,在進行網絡設置和排除故障時對網絡層次理解得很透,將對工作有很大的幫助。例如:設置路由是網絡層IP協議的事,要查找MAC地址是鏈路層ARP的事,常用的Ping命令由ICMP協議來做的。
圖5顯示了各層協議的關係,理解它們之間的關係對下面的協議分析非常重要。
圖5
b.數據發送時是自上而下,層層加碼;數據接收時是自下而上,層層解碼。
當應用程序用TCP傳送數據時,數據被送入協議棧中,然後逐個通過每一層直到被當作一串比特流送入網絡。其中每一層對收到的數據都要增加一些首部信息(有時還要增加尾部信息),該過程如圖6所示。TCP傳給IP的數據單元稱作TCP報文段或簡稱爲TCP段。I P傳給網絡接口層的數據單元稱作IP數據報。 通過以太網傳輸的比特流稱作幀(Frame)。
數據發送時是按照圖6自上而下,層層加碼;數據接收時是自下而上,層層解碼。
圖6
c. 邏輯上通訊是在同級完成的
垂直方向的結構層次是當今普遍認可的數據處理的功能流程。每一層都有與其相鄰層的接口。爲了通信,兩個系統必須在各層之間傳遞數據、指令、地址等信息,通信的邏輯流程與真正的數據流的不同。雖然通信流程垂直通過各層次,但每一層都在邏輯上能夠直接與遠程計算機系統的相應層直接通信。
從圖7可以看出,通訊實際上是按垂直方向進行的,但在邏輯上通信是在同級進行的。
圖7
2、過程描述
爲了更好的分析協議,我們先描述一下上述例子數據的傳輸步驟。如圖8所示:
1)FTP客戶端請求TCP用服務器的IP地址建立連接。
2)TCP發送一個連接請求分段到遠端的主機,即用上述IP地址發送一份IP數據報。
3) 如果目的主機在本地網絡上,那麼IP數據報可以直接送到目的主機上。如果目的主機在一個遠程網絡上,那麼就通過IP選路函數來確定位於本地網絡上的下一站路由器地址,並讓它轉發IP數據報。在這兩種情況下,IP數據報都是被送到位於本地網絡上的一臺主機或路由器。
4) 本例是一個以太網,那麼發送端主機必須把32位的IP地址變換成48位的以太網地址,該地址也稱爲MAC地址,它是出廠時寫到網卡上的世界唯一的硬件地址。把IP地址翻譯到對應的MAC地址是由ARP協議完成的。
5) 如圖的虛線所示,ARP發送一份稱作ARP請求的以太網數據幀給以太網上的每個主機,這個過程稱作廣播。ARP請求數據幀中包含目的主機的IP地址,其意思是「如果你是這個IP地址的擁有者,請回答你的硬件地址。」
6) 目的主機的ARP層收到這份廣播後,識別出這是發送端在尋問它的IP地址,於是發送一個ARP應答。這個ARP應答包含I P地址及對應的硬件地址。
7) 收到ARP應答後,使ARP進行請求—應答交換的IP數據包現在就可以傳送了。
8) 發送IP數據報到目的主機。
圖8
3、實例分析
下面通過分析用iris捕獲的包來分析一下TCP/IP的工作過程,爲了更清晰的解釋數據傳送的過程,我們按傳輸的不同階段抓了四組數據,分別是查找服務器、建立連接、數據傳輸和終止連接。每組數據,按下面三步進行解釋。
顯示數據包
解釋該數據包
按層分析該包的頭信息
第一組 查找服務器
1)下圖顯示的是1、2行的數據
圖9
2)解釋數據包
這兩行數據就是查找服務器及服務器應答的過程。
在第1行中,源端主機的MAC地址是00:50:FC:22:C7:BE。目的端主機的MAC地址是FF:FF:FF:FF:FF:FF,這個地址是十六進制表示的,F換算爲二進制就是1111,全1的地址就是廣播地址。所謂廣播就是向本網上的每臺網絡設備發送信息,電纜上的每個以太網接口都要接收這個數據幀並對它進行處理,這一行反映的是步驟5)的內容,ARP發送一份稱作ARP請求的以太網數據幀給以太網上的每個主機。網內的每個網卡都接到這樣的信息「誰是192.168.113.1的IP地址的擁有者,請將你的硬件地址告訴我」。
在第1行中,源端主機的MAC地址是00:50:FC:22:C7:BE。目的端主機的MAC地址是FF:FF:FF:FF:FF:FF,這個地址是十六進制表示的,F換算爲二進制就是1111,全1的地址就是廣播地址。所謂廣播就是向本網上的每臺網絡設備發送信息,電纜上的每個以太網接口都要接收這個數據幀並對它進行處理,這一行反映的是步驟5)的內容,ARP發送一份稱作ARP請求的以太網數據幀給以太網上的每個主機。網內的每個網卡都接到這樣的信息「誰是192.168.113.1的IP地址的擁有者,請將你的硬件地址告訴我」。
第2行反映的是步驟6)的內容。在同一個以太網中的每臺機器都會"接收"到這個報文,但正常狀態下除了1號機外其他主機應該會忽略這個報文,而1號的主機的ARP層收到這份廣播報文後,識別出這是發送端在尋問它的IP地址,於是發送一個ARP應答。告知自己的IP地址和MAC地址。第2行可以清楚的看出1號回答的信息__自己的MAC地址00:50:FC:22:C7:BE。
這兩行反映的是數據鏈路層之間一問一答的通信過程。這個過程就像我要在一個坐滿人的教室找一個叫「張三」的人,在門口喊了一聲「張三」,這一聲大家都聽見了,這就叫廣播。張三聽到後做了迴應,別人聽到了沒做迴應,這樣就與張三取得了聯繫。
3)頭信息分析
如下圖左欄所示,第1數據包包含了兩個頭信息:以太網(Ethernet)和ARP。
圖10
下表2是以太網的頭信息,括號內的數均爲該字段所佔字節數,以太網報頭中的前兩個字段是以太網的源地址和目的地址。目的地址爲全1的特殊地址是廣播地址。電纜上的所有以太網接口都要接收廣播的數據幀。兩個字節長的以太網幀類型表示後面數據的類型。對於ARP請求或應答來說,該字段的值爲0806。
第2行中可以看到,儘管ARP請求是廣播的,但是ARP應答的目的地址卻是1號機的(00 50 FC 22 C7 BE)。ARP應答是直接送到請求端主機的。
下表3是ARP協議的頭信息。硬件類型字段表示硬件地址的類型。它的值爲1即表示
以太網地址。協議類型字段表示要映射的協議地址類型。它的值爲0800即表示IP地址。它的值與包含I P數據報的以太網數據幀中的類型字段的值相同。接下來的兩個1字節的字段,硬件地址
長度和協議地址長度分別指出硬件地址和協議地址的長度,以字節爲單位。對於以太網上IP地址的ARP請求或應答來說,它們的值分別爲6和4。Op即操作(Opoperation),1是ARP請求、2是ARP應答、3是RARP請求和4爲RARP應答,第二行中該字段值爲2表示應答。接下來的四個字段是發送端的硬件地址、發送端的IP地址、目的端的硬件地址和目的端IP地址。注意,這裏有一些重複信息:在以太網的數據幀報頭中和ARP請求數據幀中都有發送端的硬件地址。對於一個ARP請求來說,除目的端硬件地址外的所�ica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微軟雅黑', Arial, sans-serif;font-size:16px;color:rgb(51,51,51);" />
如下圖左欄所示,第1數據包包含了兩個頭信息:以太網(Ethernet)和ARP。
圖10
下表2是以太網的頭信息,括號內的數均爲該字段所佔字節數,以太網報頭中的前兩個字段是以太網的源地址和目的地址。目的地址爲全1的特殊地址是廣播地址。電纜上的所有以太網接口都要接收廣播的數據幀。兩個字節長的以太網幀類型表示後面數據的類型。對於ARP請求或應答來說,該字段的值爲0806。
第2行中可以看到,儘管ARP請求是廣播的,但是ARP應答的目的地址卻是1號機的(00 50 FC 22 C7 BE)。ARP應答是直接送到請求端主機的。
下表3是ARP協議的頭信息。硬件類型字段表示硬件地址的類型。它的值爲1即表示
以太網地址。協議類型字段表示要映射的協議地址類型。它的值爲0800即表示IP地址。它的值與包含I P數據報的以太網數據幀中的類型字段的值相同。接下來的兩個1字節的字段,硬件地址
長度和協議地址長度分別指出硬件地址和協議地址的長度,以字節爲單位。對於以太網上IP地址的ARP請求或應答來說,它們的值分別爲6和4。Op即操作(Opoperation),1是ARP請求、2是ARP應答、3是RARP請求和4爲RARP應答,第二行中該字段值爲2表示應答。接下來的四個字段是發送端的硬件地址、發送端的IP地址、目的端的硬件地址和目的端IP地址。注意,這裏有一些重複信息:在以太網的數據幀報頭中和ARP請求數據幀中都有發送端的硬件地址。對於一個ARP請求來說,除目的端硬件地址外的所有其他的字段都有填充值。
表3的第2行爲應答,當系統收到一份目的端爲本機的ARP請求報文後,它就把硬件地址填進去,然後用兩個目的端地址分別替換兩個發送端地址,並把操作字段置爲2,最後把它發送回去。
表3
第二組 建立連接
1)下圖顯示的是3-5行的數據
圖11
這兩行反映的是數據鏈路層之間一問一答的通信過程。這個過程就像我要在一個坐滿人的教室找一個叫「張三」的人,在門口喊了一聲「張三」,這一聲大家都聽見了,這就叫廣播。張三聽到後做了迴應,別人聽到了沒做迴應,這樣就與張三取得了聯繫。
3)頭信息分析
如下圖左欄所示,第1數據包包含了兩個頭信息:以太網(Ethernet)和ARP。
圖10
下表2是以太網的頭信息,括號內的數均爲該字段所佔字節數,以太網報頭中的前兩個字段是以太網的源地址和目的地址。目的地址爲全1的特殊地址是廣播地址。電纜上的所有以太網接口都要接收廣播的數據幀。兩個字節長的以太網幀類型表示後面數據的類型。對於ARP請求或應答來說,該字段的值爲0806。
第2行中可以看到,儘管ARP請求是廣播的,但是ARP應答的目的地址卻是1號機的(00 50 FC 22 C7 BE)。ARP應答是直接送到請求端主機的。
下表3是ARP協議的頭信息。硬件類型字段表示硬件地址的類型。它的值爲1即表示
以太網地址。協議類型字段表示要映射的協議地址類型。它的值爲0800即表示IP地址。它的值與包含I P數據報的以太網數據幀中的類型字段的值相同。接下來的兩個1字節的字段,硬件地址
長度和協議地址長度分別指出硬件地址和協議地址的長度,以字節爲單位。對於以太網上IP地址的ARP請求或應答來說,它們的值分別爲6和4。Op即操作(Opoperation),1是ARP請求、2是ARP應答、3是RARP請求和4爲RARP應答,第二行中該字段值爲2表示應答。接下來的四個字段是發送端的硬件地址、發送端的IP地址、目的端的硬件地址和目的端IP地址。注意,這裏有一些重複信息:在以太網的數據幀報頭中和ARP請求數據幀中都有發送端的硬件地址。對於一個ARP請求來說,除目的端硬件地址外的所有其他的字段都有填充值。
表3的第2行爲應答,當系統收到一份目的端爲本機的ARP請求報文後,它就把硬件地址填進去,然後用兩個目的端地址分別替換兩個發送端地址,並把操作字段置爲2,最後把它發送回去。
表3
第二組 建立連接
1)下圖顯示的是3-5行的數據
圖11
2)解釋數據包