電腦網路作為一門電腦專業課,平時都是各種抽象的協議和各種發送接收,很難具體的去感受其含義,因此也是藉助wireshark對發送的包進行一個分析。 ...
介紹
電腦網路作為一門電腦專業課,平時都是各種抽象的協議和各種發送接收,很難具體的去感受其含義,因此也是藉助wireshark對發送的包進行一個分析。
抓包分析
三次握手驗證
在第一次訪問到182.254.242.96這個ip時,首先是建立了TCP的三次握手。與書上寫的一樣:
- 客戶端發起握手請求,初始化一個SYN報文,將seq初始化一個值然後發送包給服務端。
- 服務端收到SYN報文後,也會建立一個SYN-ACK報文,同時初始化一個seq,並將ack置為發送來的SYN報文的seq+1。
- 客戶端收到服務端發送的報文,會回一個ACK報文,其中ack為SYN-ACK報文的seq+1。
註意:在抓包軟體中,初始的seq顯示為0,但書上說是隨機初始化的一個值。後來經過查詢資料,原來是抓包軟體做了優化,顯示的是相對的seq,而不是實際的。
HTTP請求交互
四次揮手
- 首先客戶端發起關閉請求,發送一個FIN報文給服務端,請求斷開TCP連接。然後客戶端進入FIN_WAIT_1狀態
- 服務端收到FIN報文後,先回一個ACK報文,然後進入CLOSE_WAIT狀態,準備將沒有發送的數據最後進行發送,發送完畢後會回一個FIN報文,然後進入LAST_ACK狀態。
- 客戶端收到ACK報文後進入FIN_WAIT_2狀態,等待FIN報文的到來。收到後會回覆一個ACK,然後進入TIME_WAIT狀態,等待2MSL時間後完全關閉連接。
- 服務端收到ACK後就直接進入CLOSE狀態,關閉了連接。
在抓包這裡可以看到,第二和第三次握手是連著的,也就是說四次揮手一下成了三次揮手。這裡其實是因為一個TCP的延遲等待機制,因為單個ACK如果不帶其他數據進行發送,那麼它將會造成一個浪費,比較TCP固定20位元組的頭部開銷還是比較大,因此會希望儘量能帶著數據一起發送,避免一個資源浪費。TCP的延遲等待機制就是為此而設計。在第二次揮手發送ACK時,如果有數據它會直接就發送走ACK,如果沒有數據要發送,它會等一下,然後和FIN報文一起發送,降低了這樣一個發送開銷。但前提是開啟了該機制。
PING命令抓包
ping命令底層實際是用的ICMP協議,在IP層。
ICMP 全稱是 Internet Control Message Protocol,也就是互聯網控制報文協議。
網路包在複雜的網路傳輸環境里,常常會遇到各種問題。
當遇到問題的時候,不能死個不明不白,沒頭沒腦的作風不是電腦網路的風格。所以需要傳出消息,報告遇到了什麼問題,這樣才可以調整傳輸策略,以此來控制整個局面。
ICMP
主要的功能包括:確認 IP 包是否成功送達目標地址、報告發送過程中 IP 包被廢棄的原因和改善網路設置等。
在 IP
通信中如果某個 IP
包因為某種原因未能達到目標地址,那麼這個具體的原因將由 ICMP 負責通知。