【計算機網絡】lab7 TCP協議

🌈?個人主頁:十二月的貓-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. 實驗目的

  1. 熟悉使用wireshark軟件進行抓取TCP數據包 ;
  2. 分析抓取到的TCP數據包,掌握TCP數據包結構、TCP數據包各字段的含義;
  3. 掌握TCP連接建立和釋放的步驟;
  4. 掌握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. ?間隔選擇1分鐘
  2. Y軸單位改為Bits
  3. Display Filter:填入tcp.srcport==80
  4. 點擊“+”,在新的條目的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. 總結?

本文到這里就結束啦~~
如果覺得對你有幫助,辛苦友友點個贊哦~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65890.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65890.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65890.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaRestClient 客戶端初始化+索引庫操作

1. 介紹 ES官方提供了各種不同語言的客戶端&#xff0c;用來操作ES。這些客戶端的本質就是組裝DSL語句&#xff0c;通過http請求發送給ES。 Elasticsearch目前最新版本是8.0&#xff0c;其java客戶端有很大變化。不過大多數企業使用的還是8以下版本 2. 客戶端初始化 在elastic…

【JVM-2.2】使用JConsole監控和管理Java應用程序:從入門到精通

在Java應用程序的開發和運維過程中&#xff0c;監控和管理應用程序的性能和資源使用情況是非常重要的。JConsole是Java Development Kit&#xff08;JDK&#xff09;自帶的一款圖形化監控工具&#xff0c;它可以幫助開發者實時監控Java應用程序的內存、線程、類加載以及垃圾回收…

基于html5實現音樂錄音播放動畫源碼

源碼介紹 基于html5實現音樂錄音播放動畫源碼是一款類似Shazam的UI&#xff0c;點擊按鈕后&#xff0c;會變成為一個監聽按鈕。旁邊會有音符飛入這個監聽按鈕&#xff0c;最后轉換成一個音樂播放器。 效果預覽 源碼獲取 基于html5實現音樂錄音播放動畫源碼

《自動駕駛與機器人中的SLAM技術》ch1:自動駕駛

目錄 1.1 自動駕駛技術 1.2 自動駕駛中的定位與地圖 1.1 自動駕駛技術 1.2 自動駕駛中的定位與地圖 L2 在技術實現上會更傾向于實時感知&#xff0c;乃至可以使用感知結果直接構建鳥瞰圖&#xff08;bird eye view, BEV&#xff09;&#xff0c;而 L4 則依賴離線地圖。 高精地…

抖音矩陣是什么

抖音矩陣是指在同一品牌或個人IP下&#xff0c;通過創建多個不同定位的抖音賬號&#xff08;如主號、副號、子號等&#xff09;&#xff0c;形成一個有機的整體&#xff0c;以實現多維度、多層次的內容覆蓋和用戶互動。以下是關于抖音矩陣的詳細介紹&#xff1a; 抖音矩陣的類…

【開發日記】Docker修改國內鏡像源

1、問題&#xff1a; docker pull鏡像時提示以下內容&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)2、解決 ①…

Centos7 解決Maven scope=system依賴jar包沒有打包到啟動jar包中的問題(OpenCV-4.10)

最近項目中遇到問題,OpenCV的Jar包在程序打包后,找不到相關的類,比如MAT,這個時候懷疑OpenCV_4.10的Jar沒有和應用程序一起打包,后面排查到確實是沒有打包進去,特此記錄,便于日后查閱。 <!-- 加載lib目錄下的opencv包 --> <dependency><groupId>org…

【后端面試總結】Golang可能的內存泄漏場景及應對策略

Golang可能的內存泄漏場景及應對策略 一、引言 Golang作為一種高性能、并發友好的編程語言&#xff0c;其內置的垃圾回收機制極大地簡化了內存管理。然而&#xff0c;這并不意味著開發者可以完全忽視內存泄漏問題。在實際開發中&#xff0c;由于不當的資源管理、循環引用、以…

【LeetCode】:刪除回文子數組【困難】

class Solution { public:// 思考:能否用滾動數組進行優化int minimumMoves(vector<int>& arr) {// 定義狀態dp[i][j]為i-j的最小步數int n arr.size();vector<vector<int>> dp(n, vector<int>(n, 1e9 7));// 可以把這 1 次理解為一種 最小操作單…

ChatGPT入門之文本情緒識別:先了解LSTM如何處理文字序列

文章目錄 0. 首先聊聊什么是RNN1. 理解LSTM&#xff0c;從數據如何喂給 LSTM開始2. LSTM每個門是如何處理序列數據的&#xff1f;2.1 遺忘門&#xff08;Forget Gate&#xff09;&#xff1a;該忘掉哪些信息&#xff1f;2.2 輸入門&#xff08;Input Gate&#xff09;&#xff…

AI學習路線圖-邱錫鵬-神經網絡與深度學習

1 需求 神經網絡與深度學習 2 接口 3 示例 4 參考資料

C#用直線和曲線抗鋸齒

使用 GDI 繪制一條線時&#xff0c;要提供線條的起點和終點&#xff0c;但不必提供有關線條上各個像素的任何信息。 GDI 與顯示驅動程序軟件協同工作&#xff0c;確定將打開哪些像素以在特定顯示設備上顯示該線條。 效果對比 代碼實現 關鍵代碼 e.Graphics.SmoothingMode Sm…

【opencv】第8章 圖像輪廓與圖像分割修復

8.1 查找并繪制輪廓 一個輪廓一般對應一系列的點&#xff0c;也就是圖像中的一條曲線。其表示方法可能 根據不同的情況而有所不同。在OpenCV 中&#xff0c;可以用findContours()函數從二值圖 像中查找輪廓 8.1.1 尋找輪廓&#xff1a; findContours() 函數 findContours) 函…

基于文件系統分布式鎖原理

分布式鎖&#xff1a;在一個公共的存儲服務上打上一個標記&#xff0c;如Redis的setnx命令&#xff0c;是先到先得方式獲得鎖&#xff0c;ZooKeeper有點像下面的demo,比較大小的方式判決誰獲得鎖。 package com.ldj.mybatisflex.demo;import java.util.*; import java.util.co…

Unity 大地圖功能 離線瓦片地圖

不使用第二個攝像機實現類似開放世界的大地圖功能。 功能如下&#xff1a; 按下M鍵打開/關閉大地圖功能 打開大地圖時&#xff0c;默認玩家位置居中 大地圖支持拖拽&#xff0c;可調節拖拽速度&#xff0c;支持XY軸翻轉 支持大地圖設置邊緣偏移量 可設置是否啟動拖拽邊界 …

Bootstrap 前端 UI 框架

Bootstrap官網&#xff1a;Bootstrap中文網 鉑特優選 Bootstrap 下載 點擊進入中文文檔 點擊下載 生產文件是開發響應式網頁應用&#xff0c;源碼是底層邏輯代碼&#xff0c;因為是要制作響應式網頁&#xff0c;所以下載開發文件 引入 css 文件&#xff0c; bootstrap.css 和 …

記一次sealos部署k8s集群之delete了第一臺master如何恢復

記一次sealos部署k8s集群之delete了第一臺master如何恢復 一、背景描述 使用sealos部署了一套K8S集群 master信息:172.27.100.1、172.27.100.2、172.27.100.3 node信息:172.27.100.4、172.27.100.5 sealos安裝在172.27.100.1節點,根目錄下/root/.sealos/文件還在! [root…

error: linker `link.exe` not found

開始學習rust&#xff0c;安裝好rust的環境&#xff0c;開始從hello world開始&#xff0c;結果用在win10環境下&#xff0c;使用vs code或cmd窗口編譯rust報錯&#xff1a; PS E:\study_codes\rust-demo\chart01> rustc hello.rs error: linker link.exe not found| note:…

用 HTML5 Canvas 和 JavaScript 實現雪花飄落特效

這篇文章將帶您深入解析使用 HTML5 Canvas 和 JavaScript 實現動態雪花特效的代碼原理。 1,效果展示 該效果模擬了雪花從天而降的動態場景,具有以下特點: 雪花數量、大小、透明度和下落速度隨機。雪花會在屏幕底部重置到頂部,形成循環效果。隨窗口大小動態調整,始終覆蓋…

django基于Python的校園個人閑置物品換購平臺

Django 基于 Python 的校園個人閑置物品換購平臺 一、平臺概述 Django 基于 Python 的校園個人閑置物品換購平臺是專為校園師生打造的一個便捷、環保且充滿活力的線上交易場所。它借助 Django 這一強大的 Python Web 開發框架&#xff0c;整合了校園內豐富的閑置物品資源&…