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