第一組 尋找伺服器
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地址的擁有者,請將你的硬體地址告訴我”。
第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應答是直接送到請求端主機的。
表2
下表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)解釋資料包
這三行資料是兩機建立串連的過程。
這三行的核心意思就是TCP協議的三向交握。TCP的資料包是靠IP協議來傳輸的。但IP協議是只管把資料送到出去,但不能保證IP資料報能成功地到達目的地,保證資料的可靠傳輸是靠TCP協議來完成的。當接收端收到來自發送端的資訊時,接受端詳發送短髮送一條應答資訊,意思是:“我已收到你的資訊了。”第三組資料將能看到這個過程。TCP是一個連線導向的協議。無論哪一方向另一方發送資料之前,都必須先在雙方之間建立一條串連。建立串連的過程就是三向交握的過程。
這個過程就像要我找到了張三向他借幾本書,第一步:我說:“你好,我是擔子”,第二步:張三說:“你好,我是張三”,第三步:我說:“我找你借幾本書。”這樣通過問答就確認對方身份,建立了聯絡。
下面來分析一下此例的三向交握過程。
1))請求端208號機發送一個初始序號(SEQ)987694419給1號機。
2))伺服器1號機收到這個序號後,將此序號加1值為987694419作為應答訊號(ACK),同時隨機產生一個初始序號(SEQ)1773195208,這兩個訊號同時發回到請求端208號機,意思為:“訊息已收到,讓我們的資料流以1773195208這個數開始。”
3))請求端208號機收到後將確認序號設定為伺服器的初始序號(SEQ)1773195208加1為1773195209作為應答訊號。
以上三步完成了三向交握,雙方建立了一條通道,接下來就可以進行資料轉送了。
下面分析TCP頭資訊就可以看出,在握手過程中TCP頭部的相關欄位也發生了變化。
3)頭資訊分析
12所示,第3資料包包含了三頭資訊:乙太網路(Ethernet)和IP和TCP。
頭資訊少了ARP多了IP、TCP,下面的過程也沒有ARP的參與,可以這樣理解,在區域網路內,ARP負責的是在眾多連網的電腦中找到需要找的電腦,找到工作就完成了。
乙太網路的頭資訊與第1、2行不同的是框架類型為0800,指明該框架類型為IP。
圖12
IP協議頭資訊
IP是TCP/IP協議族中最為核心的協議。從圖5可以看出所有的TCP、UDP、ICMP及IGMP資料都以IP資料報格式傳輸的,有個形象的比喻IP協議就像運貨的卡車,將一車車的貨物運向目的地。主要的貨物就是TCP或UDP分配給它的。需要特別指出的是IP提供不可靠、不需連線的資料報傳送,也就是說I P僅提供最好的傳輸服務但不保證IP資料報能成功地到達目的地。看到這你會不會擔心你的E_MAIL會不會送到朋友那,其實不用擔心,上文提過保證資料正確到達目的地是TCP的工作,稍後我們將詳細解釋。
如表4是IP協議的頭資訊。
表4 IP資料報格式及首部中的各欄位
圖12中所宣布分45 00—71 01為IP的頭資訊。這些數是十六進位表示的。一個數佔4位,例如:4的二進位是0100
4位版本:表示目前的協議版本號碼,數值是4表示版本為4,因此IP有時也稱作IPv4;
4位首部長度:頭部的是長度,它的單位是32位(4個位元組),數值為5表示IP頭部長度為20位元組。
8位服務類型(TOS):00,這個8位欄位由3位的優先權子欄位,現在已經被忽略,4位的TOS子欄位以及1 位的未用欄位(現在為0)構成。4位的TOS子欄位包含:最小延時、最大輸送量、最高可靠性以及最小費用構成,這四個1位最多隻能有一個為1,本例中都為0,表示是一般服務。
16位總長度(位元組數):總長度欄位是指整個IP資料報的長度,以位元組為單位。數值為00 30,換算為十進位為48位元組,48位元組=20位元組 的IP頭+28位元組的TCP頭,這個資料報只是傳送的控制資訊,還沒有傳送真正的資料,所以目前看到的總長度就是前序的長度。
16位標識:識別欄位唯一地標識主機發送的每一份資料報。通常每發送一份報文它的值就會加1,第3行為數值為30 21,第5行為30 22,第7行為30 23。分區時涉及到標誌欄位和片位移欄位,本文不討論這兩個欄位。
8位存留時間(TTL):TTL(time-to-live)存留時間欄位設定了資料報可以經過的最多路由器數。它指定了資料報的存留時間。ttl的初始值由源主機設定,一旦經過一個處理它的路由器,它的值就減去1。可根據TTL值判斷伺服器是什麼系統和經過的路由器。本例為80,換算成十進位為128,WINDOWS作業系統TTL初始值一般為128,UNIX作業系統初始值為255,本例表示兩個機器在同一網段且作業系統為WINDOWS。
8位協議:表示協議類型,6表示傳輸層是TCP協議。
16位首部檢驗和:當收到一份I P資料報後,同樣對首部中每個16 位進行二進位反碼的求和。由於接收方在計算過程中包含了發送方存在首部中的檢驗和,因此,如果首部在傳輸過程中沒有發生任何差錯,那麼接收方計算的結果應該為全1。如果結果不是全1,即檢驗和錯誤,那麼IP就丟棄收到的資料報。但是不產生差錯報文,由上層去發現丟失的資料報並進行重傳。
32位源IP地址和32位目的IP地址:實際這是IP協議中核心的部分,但介紹這方面的文章非常多,本文搭建的又是一個最簡單的網路結構,不涉及路由,本文對此只做簡單介紹,相關知識請參閱其它文章。32位的IP地址由一個網路ID和一個主機ID組成。本例源IP地址為C0 A8 71 D0,轉換為十進位為:192.168.113.208; 目的IP地址為C0 A8 71 01,轉換為十進位為:192.168.113.1。網路地址為192.168.113,主機地址分別為1和208,它們的網路地址是相同的所以在一個網段內,這樣資料在傳送過程中可直接到達。
TCP協議頭資訊
如表5是ICP協議的頭資訊。
表5 TCP包首部
第三行TCP的頭資訊是:04 28 00 15 3A DF 05 53 00 00 00 00 70 02 40 00 9A 8D 00 00 02 04 05 B4 01 01 04 02
連接埠號碼:常說FTP佔21連接埠、HTTP佔80連接埠、TELNET佔23連接埠等,這裡指的連接埠就是TCP或UDP的連接埠,連接埠就像通道兩端的門一樣,當兩機進行通訊時門必須是開啟的。源連接埠和目的連接埠各佔16位,2的16次方等於65536,這就是每台電腦與其它電腦聯絡所能開的“門”。一般作為服務一方每項服務的連接埠號碼是固定的。本例目的連接埠號碼為00 15,換算成十進位為21,這正是FTP的預設連接埠,需要指出的是這是FTP的控制連接埠,資料傳送時用另一連接埠,第三組的分析能看到這一點。用戶端與伺服器聯絡時隨機開一個大於1024的連接埠,本例為04 28,換算成十進位為1064。你的電腦中了木馬也會開一個服務連接埠。觀察連接埠非常重要,不但能看出本機提供的正常服務,還能看出不正常的串連。Windows察看連接埠的命令時netstat。
32位序號:也稱為順序號(Sequence Number),簡寫為SEQ,從上面三向交握的分析可以看出,當一方要與另一方聯絡時就發送一個初始序號給對方,意思是:“讓我們建立聯絡吧?”,服務方收到後要發個獨立的序號給發送方,意思是“訊息收到,資料流將以這個數開始。”由此可看出,TCP串連完全是雙向的,即雙方的資料流可同時傳輸。在傳輸過程中雙方資料是獨立的,因此每個TCP串連必須有兩個順序號分別對應不同方向的資料流。
32位確認序號:也稱為應答號(Acknowledgment Number),簡寫為ACK。在握手階段,確認序號將發送方的序號加1作為回答,在資料轉送階段,確認序號將發送方的序號加發送的資料大小作為回答,表示確實收到這些資料。在第三組的分析中將看到這一過程。
4位首部長度:。這個欄位佔4位,它的單位時32位(4個位元組)。本例值為7,TCP的頭長度為28位元組,等於正常的長度2 0位元組加上可選項8個位元組。,TCP的頭長度最長可為60位元組(二進位1111換算為十進位為15,15*4位元組=60位元組)。
6個標誌位。
URG 緊急指標,告訴接收TCP模組緊要指標域指著緊要資料
ACK 置1時表示確認號(為合法,為0的時候表示資料區段不包含確認資訊,確認號被忽略。
PSH 置1時請求的資料區段在接收方得到後就可直接送到應用程式,而不必等到緩衝區滿時才傳送。
RST 置1時重建串連。如果接收到RST位時候,通常發生了某些錯誤。
SYN 置1時用來發起一個串連。
FIN 置1時表示發端完成發送任務。用來釋放串連,表明發送方已經沒有資料發送了。
圖13的3個圖分別為3-5行TCP協議的頭資訊,這三行是三向交握的過程,我們看看握手的過程標誌位發生了什嗎?
13-1請求端208號機發送一個初始序號(SEQ)987694419給1號機。標誌位SYN置為1。
13-2伺服器1號機收到這個序號後,將應答訊號(ACK)和隨機產生一個初始序號(SEQ)1773195208發回到請求端208號機,因為有應答訊號和初始序號,所以標誌位ACK和SYN都置為1。
13-3請求端208號機收到1號機的訊號後,發回資訊給1號機。標誌位ACK置為1,其它標誌為都為0。注意此時SYN值為0,SYN是標示發起串連的,上兩部串連已經完成。
16位視窗大小:TCP的流量控制由串連的每一端通過聲明的視窗大小來提供。視窗大小為位元組數,起始於確認序號欄位指明的值,這個值是接收端正期望接收的位元組。視窗大小是一個16位元組欄位,因而視窗大小最大為65535位元組。
16位檢驗和:檢驗和覆蓋了整個的TCP報文段: TCP首部和TCP資料。這是一個強制性的欄位,一定是由發端計算和儲存,並由收端進行驗證。
16位緊急指標:只有當U R G標誌置1時緊急指標才有效。緊急指標是一個正的位移量,和序號欄位中的值相加表示緊急資料最後一個位元組的序號。
選項:圖13-1和圖13-2有8個位元組選項,圖13-3沒有選項。最常見的可選欄位是最長報文大小,又稱為MSS (Maximum Segment Size)。每個串連方通常都在握手的第一步中指明這個選項。它指明本端所能接收的最大長度的報文段。圖13-1可以看出208號機可以接受的最大位元組數為1460位元組,1460也是乙太網路預設的大小,在第三組的資料分析中可以看到資料傳送正是以1460位元組傳送的。
握手小結
上面我們分開講了三向交握,看著有點散,現在小結一下。