(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狀態。
抓包分析三次握手
第一次握手:
第二次握手:
第三次握手: