第三次實驗報告:使用Packet Tracer分析TCP鏈接創建過程

姓名:江舒銘算法

學號:201821121109緩存

班級:計算1814網絡

1 實驗目的

  • 使用路由器鏈接不一樣的網絡
  • 使用命令行操做路由器
  • 經過抓取HTTP報文,分析TCP鏈接創建的過

2 實驗內容

使用Packet Tracer,正確配置網絡參數,經過抓取HTTP數據包,分析TCP鏈接創建過程。dom

  • 創建網絡拓撲結構
  • 配置參數
  • 抓包
  • 分析數據包

3. 實驗報告

3.1 創建網絡拓撲結構

網絡拓撲圖以下圖所示:ssh

 

 

3.2 配置參數

  • 客戶端的IP地址爲192.168.1.109
  • 服務端的IP地址爲192.168.1.110

參數配置的詳細操做:tcp

配置參數,PC端,設置默認網關(Deafult Gateway):spa

 

 

 配置參數,服務端,設置默認網關(Deafult Gateway):命令行

 

 

 配置路由器參數:3d

 

 

 清除路由器上的現有配置;指針

 

 

使用命令erase startup-config清除路由器上的現有配置:
• Router>enable                   # 進入特權執行模式

• Router#erase startup-config     # 清除路由器上的現有配 置

• Router#configure terminal       # 進入全局配置模式

• Router(config)#no ip domain-lookup  # 禁用DNS查找

 在實驗環境中禁用DNS查找的目的是提升操做響應時間,由於鍵 入錯誤的命令,路由器會把錯誤命令當成域名進行查找。

 配置並激活端口:

 

 

• Router>enable                   # 進入特權執行模式

• Router#configure terminal       # 進入全局配置模式

• Router(config)#hostname R      # 將路由器名稱配置爲R

配置Fa0/0接口;

 

 

 • R(config)#interface Fa0/0

• R(config-if)#ip address 192.168.1.110 255.255.255.0

• R(config-if)#no shutdown                               # 激活接口

激活接口後,發現Fa0/0接口的箭頭由紅變綠

 

 

 一樣方法激活Fa0/1接口;

 

激活接口後,發現Fa0/1接口的箭頭由紅變綠 

 

 配置路由算法

 

啓用動態路由

• R(conf)# router rip

• R(conf)#version   2 使用rip 2版本

• R(conf)#no auto-summary   關閉自動路由彙總 

指定網絡

• R(conf)#network 192.168.1.0

• R(conf)#network 192.168.2.0

驗證參數配置是否正確

• 檢驗IP地址正確而且接口處於激活狀態

• show ip interface brief

 

 

• 查看路由表

• show ip route

 

• 任意兩臺機器能ping成功

• ping 192.168.2.109

 

3.3 抓包,分析TCP鏈接創建過程

抓包:

 

 

 

 

 

IP報文格式:

VER4:4位版本號:指IP協議的版本。通訊雙方使用的IP協議版本必須一致,對於IPv4來講,就是4。
IHL:4位首部長度:可表示的最大十進制數是15,注意首部長度字段所表示數的單位是32位字(也就是4字節),因此IP頭部最大長度是60字節(最小20字節)。
DSCP:8位區分服務:由3位優先權字段(已棄用),4位TOS字段和1位保留字段(必須置爲0)組成。4位TOS分別表示:最小延遲、最大吞吐量、最高可靠性、最小成本。這四者相互衝突,只能選一個。對於ssh/telnet 這樣的應用程序,最小延遲比較重要;對於ftp這樣的程序,最大吞吐量比較重要。
TL:16位總長度: IP數據報(首部+數據)總體佔多少字節。該字段爲16位,因此數據報最大長度爲 216−1=65535
字節。
ID:16位標識:惟一的標識主機發送的報文。IP軟件在儲存器中維護一個計數器,每產生一個數據報,計數器就+1,並將此值賦值給標識字段。當數據報長度超過網絡的MTU而必須分片時,這個標識字段的值就被複制到全部的數據報片的標識字段中。
FLAGS:3位標誌字段:第一位保留(如今不用,但說不定之後要用到);第二位DF,意思是「不能分片」,只有當DF=0時,才容許分片;第三位(最低位)MF,MF=1表示後面還有分片的數據報,MF=0表示這是若干數據報片中的最後一個。
FRAG OFFSET:13位片偏移:較長的報文在分片以後,某片在原報文中的相對位置。片偏移以8字節爲單位,這就是說除了最後一個分片,每一個分片的長度是8字節的整數倍。
TTL:8位生存時間(Time To Live, TTL):數據報到達目的地的最大報文跳數,通常是64。每通過一個路由,TTL 就會 -1,一直減到0尚未到達,那就丟棄了。這個字段主要是防止出現路由循環。
PRO:8位協議:表示上層協議的類型。
CHKSUM:16位首部檢驗和:用來鑑別頭部是否損壞(不檢驗數據部分),並非使用CRC進行校驗。
SRC IP、DST IP:32位源地址和32位目標地址:表示發送端和接收端的IP地址。
OPT:可變字段:就是一個選項長度,大小從1字節到40字節不等。

TCP報文格式:

 

源端口:佔2個字節,源端口和IP的做用是標記報文的返回地址。
目的端口:佔2個字節,指明接收方計算機上的應用程序接口。

序號:佔4個字節,是TCP可靠傳輸的關鍵部分。

確認序號:即ack,佔4個字節,指明下一個期待收到的字節序號,代表該序號以前的全部數據已經正確無誤的收到。

數據偏移:佔4位,它指出TCP報文的數據距離TCP報文段的起始處有多遠。

保留:爲未來定義新的用途保留,通常置爲0。

控制位:

  URG:緊急指針標誌。1:緊急指針有效;0:忽略緊急指針。
  ACK:確認序號標誌。1:確認號有效;0:忽略確認號段。
  PSH:push標誌。1:帶有push標誌的數據,表示接收方在接收到該報文後應儘快將這個報文段交給應用程序,而不是緩衝區排隊。
  RST:重置鏈接標誌。用於重置因爲主機崩潰或其餘緣由而出現錯誤的鏈接。或者用於拒絕非法的報文段和拒絕鏈接請求。
  SYN:同步序號,用於創建鏈接過程,在鏈接請求中,SYN=1和ACK=0表示該數據段沒有使用捎帶的確認域,而鏈接應答捎帶一個確認,即SYN=1和ACK=1。
  FIN:結束標誌,用於釋放鏈接,爲1時表示發送方已經沒有數據發送了,即關閉本方數據流。

窗口:滑動窗口大小,用來告知發送端接收端的緩存大小,以此控制發送端發送數據的速率,從而達到流量控制。

校驗和:奇偶校驗,此校驗和是針對整個TCP報文段的,包括TCP報頭和TCP報文數據段,以2個字節進行計算所得。

緊急指針:只有當URG標誌置1時緊急指針纔有效,TCP的緊急方式是發送端向另外一端發送緊急數據的一種方式。

選項和填充:最多見的可選字段是最長報文大小,它表示本端所能接受的最大報文段的長度。

數據部分:TCP報文段中的數據部分是可選的。

 

(1)TCP鏈接創建示意圖

 

 

(2)分析序號和確認號的變化

TCP的三次握手:

  (1)第一次握手:Client將標誌位SYN置爲1,隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。

  (2)第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求創建鏈接,Server將標誌位SYN和ACK都置爲1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認鏈接請求,Server進入SYN_RCVD狀態。

  (3)第三次握手:Client收到確認後,檢查ack是否爲J+1,ACK是否爲1,若是正確則將標誌位ACK置爲1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否爲K+1,ACK是否爲1,若是正確則鏈接創建成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間能夠開始傳輸數據了。

(3)解答:爲何鏈接創建須要第三次握手

   a、首先,TCP是可靠通訊協議,爲了實現可靠傳輸, 通訊雙方須要判斷本身已經發送的數據包是否都被接收方收到, 若是沒收到, 就須要重發。 爲了實現這個需求, 很天然地就會引出序號和 確認號 的使用。

  b、爲了實現可靠傳輸,發送方和接收方始終須要同步SYN序號。 序號並非從 0 開始的,而是由發送方隨機選擇的初始序列號ISN開始 。因爲TCP是一個雙向通訊協議, 通訊雙方都有能力發送信息,並接收響應,所以,通訊雙方都須要隨機產生一個初始的序列號,而且把這個起始值告訴對方。

 

4. 拓展

(1)分析TCP鏈接釋放

示意圖:

 

 TCP四次揮手

  因爲TCP鏈接時全雙工的,所以,每一個方向都必需要單獨進行關閉,這一原則是當一方完成數據發送任務後,發送一個FIN來終止這一方向的鏈接,收到一個FIN只是意味着這一方向上沒有數據流動了,即不會再收到數據了,可是在這個TCP鏈接上仍然可以發送數據,直到這一方向也發送了FIN。首先進行關閉的一方將執行主動關閉,而另外一方則執行被動關閉,上圖描述的便是如此。
        (1)第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。
        (2)第二次揮手:Server收到FIN後,發送一個ACK給Client,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。
        (3)第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。
        (4)第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號爲收到序號+1,Server進入CLOSED狀態,完成四次揮手。

疑問:爲何創建鏈接是三次握手,而關閉鏈接倒是四次揮手呢?

解答:由於服務端在LISTEN狀態下,收到創建鏈接請求的SYN報文後,把ACK和SYN放在一個報文裏發送給客戶端。而關閉鏈接時,當收到對方的FIN報文時,僅僅表示對方再也不發送數據了可是還能接收數據,己方也未必所有數據都發送給對方了,因此己方能夠當即close,也能夠發送一些數據給對方後,再發送FIN報文給對方來表示贊成如今關閉鏈接,所以,己方ACK和FIN通常都會分開發送。

相關文章
相關標籤/搜索