TCP協議以及常見問題報文分析
發布時間:2022-09-20作者:沒有棱角的日子閱讀:0
一、TCP的概念
TCP(Transmission Control Protocol傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,由IET💖F的RFC 793定義。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能。TCP在IP報文的協議號是6。
二、TCP的報文結構
Source Port:源端口,標識發送方的應用進程
Destination Port:目的端口,標識接收方的應用進程
Sequence Number:序列號:用于標識從發送端發出的不同的TCP數據段的序號。數據段在網絡中傳輸時,它們的順序可能會發生變化;接收端依據此序列號,便可按照正確的順序🉐重組數據。保證數據傳輸的有序性
Acknowledge Number:確認號:對收到的數據進行確認,確認序列號為成功收到的數據𝓰序列號加1。
Header length:表示頭部占32bit字的數目,它能表達的TCP頭部最大長度為60字節
FLAG字段(8位)
ACK:確認號標志,置1表示確認號有效,表示收到端對端的特定數據
RST:復位標志,
1、置1表示拒絕錯誤和非法𓆉的數據包,如果接收到RST位時候,通常💦發生了某些錯誤2、復位錯誤的連接也用來拒絕非法數據和請求。
3、RST可能被接收方或者中間設備置位
RST置位的原因
1、服務器端口沒有打開(listen)
2、服務器響應太慢,用戶終止連接
3、網絡攻擊
4、其他
所以,正常關閉TCP連接的方法有兩種:四次揮手和RST置位的報文
SYN:同步序號標志,置1表示同步序號,用來建立連接
FIN:結束標志,置1表示連接將被斷開,用于拆除連接
URG:緊急標志,置1的會先發送
window:窗口,表示接收端期望通過單次確認而收到的數據的大小。由于該字段為16位,所以窗🐠口大小的最大值為65535♍字節,該機制通常用來進行流量控制。
checksum:校驗整個TCP報文💮段,包括TCP頭部和TCP數據。該值由發送端計算和記錄并由接收端進行驗證。
三、TCP的傳輸過程
1、TCP建立連接的過程(三次握手)
tcp是可靠的傳輸,需要通過三次握手來建立連接。
(1)主機A(通常也稱為客戶端)發送一個標識了SYN的數據段,表示期望與服務器A建立🔜連接,此數據段的序列號(seq)為a。
(2)服務器A回復標識了SYN+ACK(回應主機A的SYN報文,并發送SYN請💜求建立連接報文)的數據段,此數據段的序列號(se﷽q)為b,確認序列號為主機A的序列號加1(a+1),以此作為對主機A的SYN報文的確認。
(3)主機A發𝕴送一個標識了ACK的數據段,此數據段的序列號(seq)為a+1,確認序列號為服務器A的序列號加1(b+🍸1),以此作為對服務器A的SYN報文的確認。
即過程為:主機A發送建立連接請求🦄,然后服務器A回應并發送服務器A建立連接請求,最后主機A進行回應,建立完成。
2、TCP的流量控制
(1)TCP滑動窗口技術通過動態改變窗口大小來實現對端到端設備之間的數據傳輸進行流量控制。
(2)主機A和服務器A之間通過滑動窗口來實現流量控制。如圖只考慮主機A發送數據給服務器A時,服務器A通過滑動𒊎窗口進行流量控制。
主機A向服務器發送4個長度為1024字節的數據段,其中主機的窗口大小為4096個字節。
服務器A收到第3個數據段后,緩存區滿,第4個數據段被丟棄。
服務器以ACK൩ 3073響應,窗口大小調整為3072,表明服務器的緩沖區只能處理3072個字節的數據段。于是主機ꦡA改變其發送速率,發送窗口大小為3072的數據段。
3、TCP關閉連接的過程(四次揮手)
TCP支持全雙工模式傳輸數據,同一時刻兩個方向都可以進行數據的傳輸。在傳輸數據之🔯前,TCP通過三次握手建立的實際上是兩個方向的連接,因此在傳輸完畢后,兩個方向的連接必須都關閉。TCP連接的建立是一個三次握手的過程,而TCP連接的終止則要經過四次握手。
如圖所示:
(1)主機A想終止連接,于是發送一個標識了FIN,ACK的數據段,序列號為a,確認序列號為b。
(2)服務器A回🎐應一個標識了ACK的數據段,序列號為b,確認序號為a+1,作為對主機A的FIN報文的確認。
(3)服務器A想🦩終止連接,于是ꦰ向主機A發送一個標識了FIN,ACK的數據段,序列號為b,確認序列號為a+1。
(4)主機A回ꦚ應一個標識了ACK的數據段,序列號為🍌a+1,確認序號為b+1,作為對服務器A的FIN報文的確認。
以上四次交互便完成了兩個方向連接的關閉。
4、TCP的狀態總結
四、TCP抓包常見問題分析
1、TCP Previous segment not captured
在TCP傳輸過程中,同一臺主機發出的數據段應該是連續的,即后一個包的Seq號等于前一個包的Seq + Len。如果Wireshark發現后一個包的Seq號大于前一個包的Seq+Len,就知道中間缺失了一段數據。如圖所示例:72752 之后應該是74160,之后是75568、769♓76。此時未收到75568,提示TCP Previous segment not captured。
前一個分片丟失,有可能是網絡中確實丟失了,𒈔或者晚到了,也有可能是wireshark本身并沒有抓到2、TCP Out-Of-Order
TCP Out-Of-Order指的是TCP發送端傳輸過程中報文亂序了。Wireshark判斷TCP out-of-order是基于TCP包中SEQ number并非期望收到的下一個SEQ number,則判斷為out-of-order。因此,出現TCP out-of๊-order時,很大可能是TCP存在亂序或丟包,導致接收端的seq number不連續。接上圖分析:74160出現在76976之后,所以被判定為亂序有可能因為網絡擁塞的情況下,TCP包不能按順序到達,如果抓包中出現大量的out-of-order包,則說明網絡存在較大的TCP亂序𒊎或丟包。
3、TCP Dup ack XXX #X
TCP dup ack XXX#X表示第幾次重新請求某一個包,#前🍰面的XXX表示第幾個包(不是Seq),#后的X表示第幾次請求。重復ack,當網絡中存在亂序或者丟包時,將會導致接收端接收到的seq number不連續。此時接收端會向發送端回復重復ack,ack值為期望收到的下一個seq number💃。重復ack數大于等于3次將會觸發快速重傳重復ACK標志,丟包或者亂序的情況下,會出現該標志。
4、TCP Retransmission
TCP超時重傳。當同時抓到2次同一數據報文,且沒有抓到初傳包的反饋ack,wireshark就會判斷發生了重傳,標記為TCP Retransmissi⭕on。
如果一個包丟了,又沒有后續包可以在接收方觸發Dup Ack,或♓者Dup Ack也丟失的話就不會快速重傳。這種情況下發送方只能等到超時再重傳。
5、TCP Fast Retransmission
TCP快速重傳,一般快速重傳算法꧑在收到三次冗余的Ack,即三次TCP dup ack XXX#3后,發送端進行快速重傳。
6、TCP Spurious Retransmission
TCP虛假重傳。當抓到2次同一包數據時,wireshark判斷網絡發生了重傳,同時,wireshark抓到初傳包的反饋ack,因此wireshark⛦判斷初傳包實際并沒有丟失,因此稱為虛假重傳。
7、TCP RST
是TCP協議結束異常連接的一種方式,通過flag中的reset=1標記。當TCP連接無法通過正常的4次揮手結束時,一方可以通過發送攜帶reset標志的TCP包結束TཧCP連接。
旁掛設備進行阻斷可以偽造RST報文達到阻斷的效果收到RST置位報文可能的原因:
1、被安全設備攔截;
2、對方端口未打開,發生在連接建立;
3、全連接隊列滿,發生在連接建立;
4、長時間無流量超時,導致連接被清除
5、超過超時重傳次數、網絡暫時不可達
6、非正常報文等
8、TCP acked unseen segment
ACK指向未知的TCP片段。wireshark上反饋是ACK指到不存在的TCP包。很𒆙可能是wiresಌhark漏抓了這個包,但卻抓到了對端反饋的該報文的ack包。如圖。
9、TCP port numbers reused
tcp端口重復使用。在高并發的場景下,TIME_WAIT連接存在,屬于正常現象。 線上場景中,持續的高并發場景一些部分TIME_WAIT連接被回收,但新的TIME꧃_WAIT連接產生;一些極端情況下,會出現大量的TIME_WAIT。在出現大量TIME_WAIT的情況下,可能就會發生此種現象
以上就是TCP協議以及常見問題報文分析的介紹。如果你還有其他問題,歡迎進行咨詢探討,希望億聯云的專業的解決方案,可以解決你目前遇到的問題。億聯云提供主機托管、服務器租用、mpls專線接入、SD-WAN組網等方面的專業服務,資源覆蓋全球。歡迎咨詢。
免責聲明:本站發布的內容(圖片、視頻和文字▨)以原創、轉載和分享為主,文章觀點不代表本網站立場,請聯系站長郵箱:shawn♉[email protected]進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。
標題:TCP協議以及常見問題報文分析
TAG標簽:網絡傳輸
地址://beijingyml.cn/article/20210922103549.html