HOME 首頁
SERVICE 服務產品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關于我們
CONTACT 聯系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    tcp協議怎么抓包

    發(fā)布時間:2023-03-19 01:41:14     稿源: 創(chuàng)意嶺    閱讀: 63        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于tcp協議怎么抓包的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網頁版、PC客戶端

    官網:https://ai.de1919.com

    本文目錄:

    tcp協議怎么抓包

    一、本地進程間通過tcp通信,Wireshark 可以抓包么?

    其實可以的,在WindowsXp下我嘗試過,設置本地IP的靜態(tài)路由至網關,可以使用Wireshark抓包。

    這樣設置你訪問本地地址,報文就要到網關那里走一個回路。

    二、tcpdump抓包工具

    tcpdump和ethereal可以用來獲取和分析網絡通訊活動,他們都是使用libpcap庫來捕獲網絡封包的。

    在混雜模式下他們可以監(jiān)控網絡適配器的所有通訊活動并捕獲網卡所接收的所有幀。

    要想設置網絡接口為混雜模式并執(zhí)行這些命令來捕獲所有的網絡封包,需要具有超級用戶的權限。

    你可以使用這些工具來探究網絡相關問題。你可以發(fā)現TCP/IP重發(fā)、窗口大小的縮放、名字解析的問題、網絡配置錯誤等。

    注意這些工具只能監(jiān)控網絡適配器所接收到的幀,并不能監(jiān)控到整個網絡的通訊情況。

    三、詳解 TCP(上)

    讓我們來看看這張圖

    首先來了解每個部分的意義

    其他部分解釋在這里:

    為什么建鏈接要 3 次握手,斷鏈接需要 4 次揮手?

    另有一些需要注意的地方:

    Again,使用tcp_tw_reuse和tcp_tw_recycle來解決TIME_WAIT的問題是非常非常危險的,因為這兩個參數違反了TCP協議(RFC 1122)

    SeqNum 的增加是和傳輸的字節(jié)數相關的 。上圖中,三次握手后,來了兩個 Len:1440 的包,而第二個包的 SeqNum 就成了 1441。然后第一個 ACK 回的是 1441,表示第一個 1440 收到了。

    注意 :如果你用 Wireshark 抓包程序看 3 次握手,你會發(fā)現 SeqNum 總是為 0,不是這樣的,Wireshark 為了顯示更友好,使用了 Relative SeqNum ——相對序號,你只要在右鍵菜單中的 protocol preference 中取消掉就可以看到“Absolute SeqNum”了

    TCP 要保證所有的數據包都可以到達,所以,必需要有重傳機制。

    比如:發(fā)送端發(fā)了 1,2,3,4,5 五個包,接收端收到了 1,2 于是返回 ack 3,然后收到了 4(3 沒收到)。此時的 TCP 會怎么辦?因為正如前面所說的, SeqNum 和 Ack 是以字節(jié)數為單位,所以 ack 的時候,不能跳著確認,只能確認最大的連續(xù)收到的包 ,不然,發(fā)送端就以為之前的都收到了。

    有這樣一個簡單的辦法:不回 ack,死等 3。當發(fā)送方發(fā)現收不到 3 的 ack 超時后,會重傳 3。一旦接收方收到 3 后,會 ack 回 4——意味著 3 和 4 都收到了。

    但是這樣有個非常大的 BUG,不回 ACK 那收到的 4,5 也不告訴發(fā)送方,這樣發(fā)送方很有可能會認為 4,5 也沒有到。導致 4,5 的重傳

    于是,TCP引入了一種叫 Fast Retransmit 的算法, 不以時間驅動,而以數據驅動重傳 。也就是說,如果,包沒有連續(xù)到達,就 ack 最后那個可能被丟了的包,如果發(fā)送方連續(xù)收到 3 次相同的ack,就重傳。Fast Retransmit 的好處是不用等 timeout 了再重傳。

    比如說:

    我收到了 3 沒收到 2,返回 ack2

    我又收到了 4 但還是沒收到 2,返回 ack2

    但是 TMD 我又收到了 5 就是沒收到 2,還是返回 ack2

    這個時候,不用等 timeout 的發(fā)送方就知道了 2 怕是掉了。于是會重新發(fā) 2。然后我接收到了我就返回 ack6

    **快速重傳只解決了一個問題:不再需要等 timeout 就可以重新傳包了。那重傳多少呢?我知道 4 丟了,那要不要重傳 5,6,7 呢? **

    所以就有了另一個更好的辦法: Selective Acknowledgment (SACK) 。這種方式需要在 TCP 頭里加一個 SACK 的東西,ACK 還是 Fast Retransmit 的 ACK,SACK 則是匯報收到的數據碎版。參看下圖:

    這樣,在發(fā)送端就可以根據回傳的 SACK 知道哪些數據到了,哪些數據沒有到。于是就優(yōu)化了 Fast Retransmit 的算法。當然,這個協議需要兩邊都支持。在 Linux下,可以通過 tcp_sack 參數打開這個功能(Linux 2.4后默認打開)。

    這里還需要注意一個問題—— 接收方 Reneging,所謂 Reneging 的意思就是接收方有權把已經報給發(fā)送端 SACK 里的數據給丟了 。這樣干是不被鼓勵的,因為這個事會把問題復雜化了,但是,接收方這么做可能會有些極端情況,比如要把內存給別的更重要的東西。 所以,發(fā)送方也不能完全依賴 SACK,還是要依賴 ACK,并維護 Time-Out,如果后續(xù)的 ACK 沒有增長,那么還是要把 SACK 的東西重傳,另外,接收端這邊永遠不能把 SACK 的包標記為 Ack。

    注意:SACK 會消費發(fā)送方的資源,試想,如果一個攻擊者給數據發(fā)送方發(fā)一堆 SACK 的選項, 這會導致發(fā)送方開始要重傳甚至遍歷已經發(fā)出的數據,這會消耗很多發(fā)送端的資源。 詳細的東西請參看《 TCP SACK的性能權衡 》

    Duplicate SACK 又稱 D-SACK, 其主要使用了 SACK 來告訴發(fā)送方有哪些數據被重復接收了 。

    D-SACK 使用了 SACK 的第一個段來做標志

    下面的示例中,丟了兩個 ACK,所以,發(fā)送端重傳了第一個數據包(3000-3499),于是接收端發(fā)現重復收到,于是回了一個SACK=3000-3500,因為 ACK 都到了 4000 意味著收到了 4000 之前的所有數據,所以這個 SACK 就是 D-SACK——旨在告訴發(fā)送端我收到了重復的數據,而且我們的發(fā)送端還知道,數據包沒有丟,丟的是 ACK 包。

    下面的示例中,網絡包(1000-1499)被網絡給延誤了,導致發(fā)送方沒有收到 ACK,而后面到達的三個包觸發(fā)了“Fast Retransmit算法”,所以重傳,但重傳時,被延誤的包又到了,所以,回了一個SACK=1000-1500,因為 ACK 已到了3000,所以,這個 SACK 是D-SACK——標識收到了重復的包。

    這個案例下,發(fā)送端知道之前因為“Fast Retransmit算法”觸發(fā)的重傳不是因為發(fā)出去的包丟了,也不是因為回應的 ACK 包丟了,而是因為網絡延時了。

    可見,引入了D-SACK,有這么幾個好處:

    知道這些東西可以很好得幫助TCP了解網絡情況,從而可以更好的做網絡上的流控。Linux 下的 tcp_dsack 參數用于開啟這個功能(Linux 2.4后默認打開)

    陳皓大神講的真的非常非常好,我仔仔細細把這篇文章過了一遍。

    四、求大神解答 TCP過程分析 Wireshark 抓包分析

    (1)TCPClient向TCPServer發(fā)送連接請求SYN

    (2)TCPServer收到連接請求后反饋SYN+ACK

    (3)TCPClient收到SYN+ACK后反饋ACK,三次握手完成,連接建立

    (4)TCPClient向TCPServer發(fā)送100字節(jié)的數據

    (5)TCPServer收到(4)后確認并發(fā)送78字節(jié)的數據,即捎帶確認

    (6)TCPClient收到(5)后,發(fā)送ACK進行確認

    (7)TCPClient發(fā)送100字節(jié)的數據

    (8)TCPClient發(fā)送RST報文,終止連接

    以上就是關于tcp協議怎么抓包相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。


    推薦閱讀:

    itchat怎么一直登錄(無法用itchat登錄網頁微信)

    簡述TCPIP協議(簡述tcpip協議的特點)

    ns怎么用paypal付款(switch怎么用paypal付款)

    小學學校外墻標語大全

    山東景觀設計大賽獲獎名單(山東景觀設計大賽獲獎名單公示)