姓名:江舒銘算法
學號:201821121109緩存
班級:計算1814網絡
使用Packet Tracer,正確配置網絡參數,經過抓取HTTP數據包,分析TCP鏈接創建過程。dom
網絡拓撲圖以下圖所示:ssh
192.168.1.109
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
抓包:
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是一個雙向通訊協議, 通訊雙方都有能力發送信息,並接收響應,所以,通訊雙方都須要隨機產生一個初始的序列號,而且把這個起始值告訴對方。
(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通常都會分開發送。