🌈?個人主頁:十二月的貓-CSDN博客
🔥?系列專欄:?🏀計算機網絡_十二月的貓的博客-CSDN博客💪🏻?十二月的寒冬阻擋不了春天的腳步,十二點的黑夜遮蔽不住黎明的曙光
目錄
1. 實驗目的
2. 實驗環境
3. 實驗過程
3.1?Capture a Trace?捕獲
3.2?Inspect?the?Trace?檢查捕獲
3.3?TCP Segment?Structure
3.4?TCP三次握手
3.5 TCP四次揮手
?3.6?TCP數據傳輸?
4. 問題回答
5. 自我探索
6. 總結?
本系列重點針對山東大學-軟件學院-計算機網絡實驗的任務。
希望通過實驗,一方面加強大家對理論知識的認識,另一方面提升大家的動手能力。
也希望我的博客能夠給學弟學妹們的學習提供一些幫助。
1. 實驗目的
- 熟悉使用wireshark軟件進行抓取TCP數據包 ;
- 分析抓取到的TCP數據包,掌握TCP數據包結構、TCP數據包各字段的含義;
- 掌握TCP連接建立和釋放的步驟;
- 掌握TCP數據傳輸過程;
2. 實驗環境
·?wireshark;·?wget :獲取web資源。
·?Browser:本次實驗用web瀏覽器獲得頁面作為工作負載,查找、獲取頁面。
3. 實驗過程
3.1?Capture a Trace?捕獲
1.使用一個中等大小的資源URL,且是HTTP(非HTTPS):提供的資源URL(http://p4.qhimg.com/bdm/0_0_100/t010fae11f356641191.jpg)
2.命令行下載資源:
使用 wget
命令來下載該資源。輸入以下命令:
wget http://p4.qhimg.com/bdm/0_0_100/t010fae11f356641191.jpg
這條命令會使用 HTTP 協議從指定的 URL 下載該 JPEG 圖片。
3.?打開 Wireshark 并設置過濾器:
在 Wireshark 中,設置一個過濾器以捕獲與該 URL 相關的 TCP 流量。您可以使用以下過濾器:
tcp and host p4.qhimg.com
該過濾器會顯示所有與 p4.qhimg.com
主機進行 TCP 通信的網絡包。
4. 開始捕獲數據包:
- 打開 Wireshark。
- 選擇合適的網絡接口進行數據包捕獲。
- 在 Wireshark 的過濾框中輸入?
tcp and host p4.qhimg.com
,然后按回車鍵應用過濾器。 - 點擊“開始捕獲”按鈕,Wireshark 將捕獲和顯示所有與?
p4.qhimg.com
?的 TCP 連接相關的數據包。
??
3.2?Inspect?the?Trace?檢查捕獲
選取一個TCP報文,檢查結果如下:
??
可以知道:
- source port 源端口 2B:很有可能是80,因為web服務器的端口號是80;
- destination port 目的端口 2B:source port 和 destination port是TCP在IP地址以外添加的地址。
- sequence number 序號4B:保證TCP可靠性傳輸的關鍵,記錄第一個有效負載字節在字節流中的位置;
- acknowledge number 確認號 4B:每一個ACK對應一個確認號,指明下一個期待收到的字節序號,同時表明該序號之前的所有數據都已經正確接收。只有當ACK位=1時有效。建連時SYN報文的ACK位=0;
- TCP header length TCP首部長度 4b:TCP header 有多少個4B,例如這個TCP數據包的TCP header length顯示為0101,說明這個TCP header長度為5(0101)*4 = 20B。TCP報文默認大小為20B。
- flags 標志位 6b:CWR、ECE用于IP header的ECN字段;
- ? ? ? ? URG:標志緊急指針是否有效;
- ? ? ? ? ACK標志確認號是否有效;
- ? ? ? ? PSH提示接收端應用程序立即將接收緩沖區數據取走;
- ? ? ? ? RST處理異常連接,告知連接不一致的一方連接還沒有建立好要求重新建連,RST=1復位報文段
- ? ? ? ? SYN用于同步,SYN=1 稱為同步報文段;(1、2握手)
- ? ? ? ? FIN通知對方要關閉連接,FIN=1稱為結束報文段。(1、3揮手)
- window size 窗口大小 2B:流量控制,發送方發送大量數據時,接收方利用滑動窗口進行緩沖。
- checksum 校驗和 2B:和UDP檢驗相同;
- options選項:建連時用于協調雙方支持的內容;
3.3?TCP Segment?Structure
在跟蹤中間的任何地方選擇一個協議列為TCP的長包。在中間面板中展開TCP協議部分(通過使用“+”擴展器或圖標)。除HTTP響應的第一個HTTP GET包和最后一個HTTP響應包外,所有的報文都應該被列為TCP。選擇一個長數據包可以確保我們看到的是從服務器到你的計算機的下載數據包。查看協議層,在TCP塊之前看到一個IP塊。這是因為TCP段是在IP中攜帶的。下表是TCP部分的各字段解釋。??
??
3.4?TCP三次握手
記sequence number為Seq;acknowledge number為Ack;
- 第一次握手:客戶端發送一個SYN同步報文段(SYN=1的TCP數據包,包含初始序列號Seq=J),請求與服務器建立連接;
- 第二次握手:服務器發送SYN+ACK段(SYN=ACK=1的TCP數據包,序列號Seq=K,確認號Ack=J+1),確認號=J+1表明前J+1之前的0~J都已經正確接收,已經接收了客戶端發來的SYN段;
- 第三次握手:客戶端發送一個ACK段給服務器(ACK=1,Ack=K+1),表示已經正確接收服務器發來的SYN+ACK段;
具體圖如下:
?在WireShark中如下:
3.5 TCP四次揮手
四次揮手的過程:
- 第一次揮手:客戶端發送結束報文段(FIN=1,Seq=U)給服務器。
- 第二次揮手:服務器收到第一次揮手的數據包之后,向客戶端發送確認報文(ACK=1,Seq=V,Ack=U+1),允許斷開連接;
- 第三次揮手:服務器發送確認報文之后,繼續發送結束報文段(FIN=1,ACK=1,Seq=V,Ack=U+1)給客戶端;
- 第四次揮手:客戶端接收到FIN結束報文段之后,發送確認報文(ACK=1,Seq=U+1,Ack=W+1)給服務器,告知服務器已經接收到結束報文。
服務器接收到這條ACK確認報文之后,釋放TCP連接的相關資源(緩存和變量),客戶端等待一段時間之后,釋放處于客戶端的緩存和變量。
等待一段時間TIME-WAIT:① 保證第四次揮手。客戶端不確認第四次揮手時發送給服務器的ACK確認報文是否順利到達服務器。如果沒有順利到達,服務器會重新進行第三次揮手,直到正確接收客戶端第四次揮手的ACK確認報文段。所以不可以立即釋放客戶端資源,這會導致服務器重新進行的第三次揮手失敗。② 防止新連接中出現舊連接的報文段。四次揮手完成之后,不代表之前通過這個連接發送的所有數據都已經處理完了,有些可能在網絡中傳輸。如果立即釋放資源,然后再在用一對源端口、目的端口建立TCP連接,可能導致上一次連接中遺留在網絡中的報文在新連接中到達,會被當成是新連接的數據進行處理,這就產生了錯誤。所以需要等待2MSL時長,確保舊連接的報文都從網絡中消失。
四次揮手:TCP是全雙工的,當客戶端要關閉連接時,服務器要發送的數據不一定發完了,所以第二、三次揮手都是服務器完成的,第二次確認知道要關閉連接,第三次告知客戶端服務器數據也發送完畢可以斷開;CLOSE-WAIT等待服務器發送完數據;第四次揮手返回ACK報文段完才進入TIME-WAIT。因為結束時涉及數據有沒有傳送完這個問題,所以不同于建立連接時只用三次握手。
?3.6?TCP數據傳輸?
在wireshark里面點擊統計-IO圖標。彈出界面如下:??
接下來依次進行以下操作
- ?間隔選擇1分鐘
- Y軸單位改為Bits
- Display Filter:填入tcp.srcport==80
- 點擊“+”,在新的條目的Display Filter里面填入tcp.dstport==80。最終得到兩條線,青色的表示下載速率,紅色的表示上傳速率,如下所示:?
4. 問題回答
問題1:在SYN數據包上,TCP包含了哪些選項字段以供跟蹤。
答:ACK字段和SYN字段。
問題2:當TCP連接正常的時候,下載方向的粗略數據速率(以包/秒或位/秒為單位)是多少?
答:大約是50000bps
問題3:內容占下載率的百分比是多少?展示你的計算。
答:使用tcp.srcport==80 進行過濾,找到任意一個中間位置的大型包。可以看到,總的數據量為1514B=12112bits。而TCP攜帶的內容占1460B。所以內容占下載率的96.43%。
問題4:由于ACK報文,上傳方向的粗略速率(比特/秒)是多少?
答:縮放坐標軸后可以看到,速率大約為21.7Kbps。
問題5:如果最近從服務器接收到的TCP段的序列號是X,那么下一個傳輸的TCP段攜帶的ACK號是什么?
答:下一個報文ACK號是X加上這個報文的長度segment length。
5. 自我探索
TCP擁塞控制:擁塞窗口cwnd(congestion window):發送方維護一個狀態變量(即擁塞窗口),大小取決于網絡的擁塞程度且動態變化。發送方自己的發送窗口=擁塞窗口;如果要考慮接收方的接受能力,發送窗口可能<擁塞窗口。
原則:只要網絡沒有出現擁塞(發送方沒有按時收到ACK確認報文),就增大窗口;若出現擁塞減少擁塞窗口。
探索TCP可靠性機制:
1. 超時重傳機制:超過時間還未收到ACK則重新發送。
2. 校驗和:校驗和錯誤時重傳。
3. 序列號:序列號能夠確認缺少了哪個位置的數據,保證按序到達,同時篩除重復數據。
4. 確認應答機制:ACK標志位=1時,檢查Ack=U+1,說明前U個數據包都正確接收。
SACK: TCP的一個選項,允許TCP單獨確認非連續片段,用于告知真正丟失的包,只重傳丟失的片段。options字段中:SACKpermitted 當發送序列中某個數據包丟失,可通過SACK報文通知發送方這個丟了,發送方于是重新傳丟失的包,而不是全部重發。
6. 總結?
本文到這里就結束啦~~
如果覺得對你有幫助,辛苦友友點個贊哦~