TCP/IP協議簇學習篇三

(1)ICMP協議定義與數據包類型,抓包分析ICMP;

(2)初步認識運用ping,tracert方法;

(3)VLAN的基礎知識與access跟trunk口的初步認識;

(4)TCP的三次握手四次揮手的過程且抓包分析(但其實好像還是停留在字面跟理論上的熟悉)

**ICMP協議

ICMP(Internet Control Message Protocol):從英語直譯爲Internet控制報文協議。**
ICMP會提供出錯報告信息。發送的出錯報文返回到發送原數據的設備,因爲只有發送設備纔是出錯報文的接受者。發送設備隨後可根據ICMP報文確定發生錯誤的類型,並確定如何才能更好地重發失敗的數據包。只不過ICMP唯一的功能是報告問題,而不是糾正錯誤,糾正錯誤的任務由我們自己(發送方)完成。
ICMP數據包類型字段和代碼字段

類型 代碼 名稱
0 0 迴應應答
3 目的不可達
0 網絡不可達
1 主機不可達
2 協議不可達
3 端口不可達
4 需要分段和不需要分段標記置位
5 源路由失敗
6 目的網絡未知
7 目的主機未知
8 源主機被隔離
9 與目的網絡的通信被禁止
10 目的主機的通信被禁止
11 對請求的服務類型,目的網絡不可達
12 對請求的服務類型,目的主機不可達
4 0 源抑制
5 重定向
0 爲網路(子網)重定向數據報
1 爲主機重定向數據報
2 爲網絡和服務類重定向數據報
3 爲主機和服務類型重定向數據報
6 0 選擇主機地址
8 0 迴應
9 0 路由器通告
10 0 路由器選擇
11 超時
0 傳輸中超出TTL
1 超出分段重組時間
12 參數問題
0 指定錯誤的指針
1 缺少需要的選項
2 錯誤長度
13 0 時間戳
14 0 時間戳回覆
15 0 信息請求(廢棄)
16 0 信息回覆(廢棄)
17 0 地址掩碼請求(即將廢棄)
18 0 地址掩碼回覆(即將廢棄)
30 - 路由跟蹤

Wrieshark抓包分析ICMP協議數據包與ping方法的運用

ping的原理:
向指定的網絡地址發送一定長度的數據包,按照約定,若指定網絡地址存在的話,會返回同樣大小的數據包,當然,若在特定時間內沒有返回,就是“超時”,會被認爲指定的網絡地址不存在。

(1)首先ping www.baidu.com  

在這裏插入圖片描述
**(2)抓包我們可以發現有8個報文,上圖可知,ping默認發送了4個請求報文,應答4個報文**
在這裏插入圖片描述
(3)我們可以分析一下請求報文
在這裏插入圖片描述
**(4)分析一下回應報文**
在這裏插入圖片描述
Tracerout的練習

Traceroute基本原理:這個程序利用報文的TTL信息實現路由的獲取。首先主機向目的主機發送一個TTL=1的數據報,當數據報到達第一個路由器時,TTL=0,這時路由器會發送一個ICMP報文返回給主機,說明數據報超時。由此得到第一個路由地址,然後令TTL=2,再次發送一個數據報,會得到第二個路由返回的ICMP,由此一次次增加TTL就可以得到主機到目的主機之間所經過的路由信息。
在這裏插入圖片描述
在這裏插入圖片描述

**VLAN

VLAN,是英文Virtual Local Area Network的縮寫**,中文名爲"虛擬局域網", VLAN是一種將局域網(LAN)設備從邏輯上劃分成一個個網段(或者說是更小的局域網LAN),從而實現虛擬工作組(單元)的數據交換技術

(1)訪問鏈接(Access Link)
Access端口只能屬於1個VLAN,一般用於連接計算機的端口。
Access端口收到一個報文,判斷是否有VLAN信息,如果沒有則打上端口的PVID,並進行交換轉發,如果有則判斷是否與端口的PVID一致,與端口的PVID一致則可以接收並進入交換機內部,否則丟棄。
Access端口發送一個報文,將報文的VLAN信息剝離,直接發送出去。

(2)匯聚鏈接(Trunk Link)
Trunk端口可以允許多個VLAN通過,可以接收和發送多個VLAN的報文,一般用於交換機之間連接的端口。、
Trunk端口接收一個報文,判斷是否有VLAN信息,如果沒有則打上端口的PVID,並進行轉發,如果有則判斷該trunk端口的是否允許該VLAN的數據進入,可以則轉發,否則丟棄。
Trunk端口發送一個報文,比較端口的PVID和將要發送報文的VLAN信息,如果兩者相等則剝離VLAN信息,再發送,不相等則直接發送。

TCP三次握手四次揮手

三次握手

首先Client端發送連接請求報文,Server段接受連接後回覆ACK報文,併爲這次連接分配資源。Client端接收到ACK報文後也向Server段發生ACK報文,並分配資源,這樣TCP連接就建立了
在這裏插入圖片描述
最初兩端的TCP進程都處於CLOSED關閉狀態,A主動打開連接,而B被動打開連接。(A、B關閉狀態CLOSED——B收聽狀態LISTEN——A同步已發送狀態SYN-SENT——B同步收到狀態SYN-RCVD——A、B連接已建立狀態ESTABLISHED)

B的TCP服務器進程先創建傳輸控制塊TCB,準備接受客戶進程的連接請求。然後服務器進程就處於LISTEN(收聽)狀態,等待客戶的連接請求。若有,則作出響應。
**1)第一次握手:**A的TCP客戶進程也是首先創建傳輸控制塊TCB,然後向B發出連接請求報文段,(首部的同步位SYN=1,初始序號seq=x),(SYN=1的報文段不能攜帶數據)但要消耗掉一個序號,此時TCP客戶進程進入SYN-SENT(同步已發送)狀態。
**2)第二次握手:**B收到連接請求報文段後,如同意建立連接,則向A發送確認,在確認報文段中(SYN=1,ACK=1,確認號ack=x+1,初始序號seq=y),測試TCP服務器進程進入SYN-RCVD(同步收到)狀態;
**3)第三次握手:**TCP客戶進程收到B的確認後,要向B給出確認報文段(ACK=1,確認號ack=y+1,序號seq=x+1)(初始爲seq=x,第二個報文段所以要+1),ACK報文段可以攜帶數據,不攜帶數據則不消耗序號。TCP連接已經建立,A進入ESTABLISHED(已建立連接)。
當B收到A的確認後,也進入ESTABLISHED狀態。

四次揮手

假設Client端發起中斷連接請求,也就是發送FIN報文。Server端接到FIN報文後,意思是說"我Client端沒有數據要發給你了",但是如果你還有數據沒有發送完成,則不必急着關閉Socket,可以繼續發送數據。所以你先發送ACK,“告訴Client端,你的請求我收到了,但是我還沒準備好,請繼續你等我的消息”。這個時候Client端就進入FIN_WAIT狀態,繼續等待Server端的FIN報文。當Server端確定數據已發送完成,則向Client端發送FIN報文,“告訴Client端,好了,我這邊數據發完了,準備好關閉連接了”。Client端收到FIN報文後,"就知道可以關閉連接了,但是他還是不相信網絡,怕Server端不知道要關閉,所以發送ACK後進入TIME_WAIT狀態,如果Server端沒有收到ACK則可以重傳。“,Server端收到ACK後,“就知道可以斷開連接了”。Client端等待了2MSL後依然沒有收到回覆,則證明Server端已正常關閉,那好,我Client端也可以關閉連接了。Ok,TCP連接就這樣關閉了!
在這裏插入圖片描述
數據傳輸結束後,通信的雙方都可釋放連接,A和B都處於ESTABLISHED狀態。(A、B連接建立狀態ESTABLISHED——A終止等待1狀態FIN-WAIT-1——B關閉等待狀態CLOSE-WAIT——A終止等待2狀態FIN-WAIT-2——B最後確認狀態LAST-ACK——A時間等待狀態TIME-WAIT——B、A關閉狀態CLOSED)

1)A的應用進程先向其TCP發出連接釋放報文段(FIN=1,序號seq=u),並停止再發送數據,主動關閉TCP連接,進入FIN-WAIT-1(終止等待 1)狀態,等待B的確認。
2)B收到連接釋放報文段後即發出確認報文段,(ACK=1,確認號ack=u+1,序號seq=v),B進入CLOSE-WAIT(關閉等待)狀態,此時的TCP處於半關閉狀態,A到B的連接釋放。
3)A收到B的確認後,進入FIN-WAIT-2(終止等待2)狀態,等待B發出的連接釋放報文段。
4)B沒有要向A發出的數據,B發出連接釋放報文段(FIN=1,ACK=1,序號seq=w,確認號ack=u+1),B進入LAST-ACK(最後確認)狀態,等待A的確認。
5)A收到B的連接釋放報文段後,對此發出確認報文段(ACK=1,seq=u+1,ack=w+1),A進入TIME-WAIT(時間等待)狀態。此時TCP未釋放掉,需要經過時間等待計時器設置的時間2MSL後,A才進入CLOSED狀態。

抓包分析三次握手

在這裏插入圖片描述
第一次握手:
在這裏插入圖片描述
第二次握手:
在這裏插入圖片描述

第三次握手:
在這裏插入圖片描述

四次揮手抓包分析(略)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章