什么是TCP協(xié)議

發(fā)布時(shí)間:2018/7/13 9:40:00

TCP協(xié)議

TCP協(xié)議基本定義;
   TCP位于TCP/IP模型的傳輸層,它是一種面向連接的端到端協(xié)議。TCP作為傳輸控制協(xié)議,可以為主機(jī)提供可靠的數(shù)據(jù)傳輸。

TCP協(xié)議連接方式;
   TCP允許一個(gè)主機(jī)同時(shí)運(yùn)行多個(gè)應(yīng)用進(jìn)程。每臺(tái)主機(jī)可以擁有多個(gè)應(yīng)用端口,每對(duì)端口號(hào)、源和目標(biāo)IP地址的組合唯一地標(biāo)識(shí)了一個(gè)會(huì)話。
   TCP通常使用IP作為網(wǎng)絡(luò)層協(xié)議,這時(shí)TCP數(shù)據(jù)段被封裝在IP數(shù)據(jù)包內(nèi)。TCP數(shù)據(jù)段由TCP Header(頭部)和TCP Data(數(shù)據(jù))組成。TCP最多可以有60個(gè)字節(jié)的頭部,如果沒(méi)有Options字段,正常的長(zhǎng)度是20字節(jié)。(TCP是一種可靠的,面向連接的全雙工傳輸層協(xié)議)
   TCP連接的建立是一個(gè)三次握手的過(guò)程。
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的數(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)。
(目的設(shè)備接收到源設(shè)備發(fā)送的數(shù)據(jù)段時(shí),會(huì)向源端發(fā)送確認(rèn)報(bào)文,源設(shè)備收到確認(rèn)報(bào)文后,繼續(xù)發(fā)送數(shù)據(jù)段,如此重復(fù))
注:TCP支持全雙工模式傳輸數(shù)據(jù),這意味著同一時(shí)刻兩個(gè)方向都可以進(jìn)行數(shù)據(jù)的傳輸。在傳輸數(shù)據(jù)之前,TCP通過(guò)三次握手建立的實(shí)際上是兩個(gè)方向的連接,因此在傳輸完畢后,兩個(gè)方向的連接必須都關(guān)閉。
TCP連接的建立是一個(gè)三次握手的過(guò)程,而TCP連接的終止則要經(jīng)過(guò)四次握手。

TCP狀態(tài)
1.CLOSED:表示初始狀態(tài).

2.LISTEN:表示服務(wù)器端的某個(gè)SOCKET處于監(jiān)聽(tīng)狀態(tài),可以接受連接。

3.SYN_RCVD:這個(gè)狀態(tài)表示接受到了SYN報(bào)文,在正常情況下,這個(gè)狀態(tài)是服務(wù)器端的SOCKET在建立TCP連接時(shí)的三次握手會(huì)話過(guò)程中的一個(gè)中間狀態(tài),很短暫,基本上用netstat你是很難看到這種狀態(tài)的,除非你特意寫(xiě)了一個(gè)客戶端測(cè)試程序,故意將三次TCP握手 過(guò)程中最后一個(gè)ACK報(bào)文不予發(fā)送。因此這種狀態(tài)時(shí),當(dāng)收到客戶端的ACK報(bào)文后,它會(huì)進(jìn)入到ESTABLISHED狀態(tài)。

4.SYN_SENT:這個(gè)狀態(tài)與SYN_RCVD有關(guān),當(dāng)客戶端發(fā)送SYN報(bào)文,因此也隨即會(huì)進(jìn)入到了SYN_SENT狀態(tài),并等待服務(wù)端的發(fā)送三次握手中的第2個(gè)報(bào)文。SYN_SENT狀態(tài)表示客戶端已發(fā)送SYN報(bào)文。

5.ESTABLISHED:表示連接已經(jīng)建立了。

6.FIN_WAIT_1:其實(shí)FIN_WAIT_1和FIN_WAIT_2狀態(tài)的真正含義都是表示等待對(duì)方的FIN報(bào)文。FIN_WAIT_1狀態(tài)實(shí)際上是當(dāng)SOCKET在ESTABLISHED狀態(tài)時(shí),它想主動(dòng)關(guān)閉連接,向?qū)Ψ桨l(fā)送了FIN報(bào)文,此時(shí)該SOCKET即進(jìn)入到FIN_WAIT_1狀態(tài)。而當(dāng)接受到對(duì)方回應(yīng)ACK報(bào)文后,則進(jìn)入到FIN_WAIT_2狀態(tài)。

7.FIN_WAIT_2:實(shí)際上FIN_WAIT_2狀態(tài)下的SOCKET,表示半連接,也即有一方要求關(guān)閉連接,另外還告訴對(duì)方,我暫時(shí)還有點(diǎn)數(shù)據(jù)需要傳送給你,稍后再關(guān)閉連接。

8.TIME_WAIT:表示收到了對(duì)方的FIN報(bào)文,并發(fā)送出了ACK報(bào)文,就等2MSL后即可回到CLOSED可用狀態(tài)了。如果FIN_WAIT_1狀態(tài)下,收到了對(duì)方同時(shí)帶FIN標(biāo) 志和ACK標(biāo)志的報(bào)文時(shí),可以直接進(jìn)入到TIME_WAIT狀態(tài),而無(wú)須經(jīng)過(guò)FIN_WAIT_2狀態(tài)。

9.CLOSING:這種狀態(tài)比較特殊,正常情況下,當(dāng)你發(fā)送FIN報(bào)文后,按理來(lái)說(shuō)是應(yīng)該先收到(或同時(shí)收到)對(duì)方的ACK報(bào)文,再收到對(duì)方的FIN報(bào)文。但是CLOSING狀態(tài)表示你發(fā)送FIN報(bào)文后,并沒(méi)有收到對(duì)方的ACK報(bào)文,反而卻收到了對(duì)方的FIN報(bào)文。(如果雙方幾乎在同時(shí)close一 個(gè)SOCKET的話,那么就出現(xiàn)了雙方同時(shí)發(fā)送FIN報(bào)文的情況,也即會(huì)出現(xiàn)CLOSING狀態(tài),表示雙方都正在關(guān)閉SOCKET連接)。

10.CLOSE_WAIT:這種狀態(tài)的含義其實(shí)是表示在等待關(guān)閉。當(dāng)對(duì)方close一個(gè)SOCKET后發(fā)送FIN報(bào)文給自己,系統(tǒng)毫無(wú)疑問(wèn)地會(huì)回應(yīng)一個(gè)ACK報(bào)文給對(duì)方,此時(shí)則進(jìn)入到CLOSE_WAIT狀態(tài)。并確認(rèn)是否還有數(shù)據(jù)發(fā)送給對(duì)方,如果沒(méi)有的話, 就可以close這個(gè)SOCKET,發(fā)送FIN報(bào)文給對(duì)方,也即關(guān)閉連接。在CLOSE_WAIT狀態(tài)下,需要完成的事情是等待你去關(guān)閉連接。

11.LAST_ACK: 被動(dòng)關(guān)閉一方在發(fā)送FIN報(bào)文后,最后等待對(duì)方的ACK報(bào)文。當(dāng)收到ACK報(bào)文后,即可以進(jìn)入到CLOSED可用狀態(tài)。

全部11種狀態(tài)
1. 客戶端獨(dú)有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。
2. 服務(wù)器獨(dú)有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。
3. 共有的:(1)CLOSED (2)ESTABLISHED 。

LISTEN - 偵聽(tīng)來(lái)自遠(yuǎn)方TCP端口的連接請(qǐng)求;   
SYN-SENT -在發(fā)送連接請(qǐng)求后等待匹配的連接請(qǐng)求;   
SYN-RECEIVED - 在收到和發(fā)送一個(gè)連接請(qǐng)求后等待對(duì)連接請(qǐng)求的確認(rèn);   
ESTABLISHED- 代表一個(gè)打開(kāi)的連接,數(shù)據(jù)可以傳送給用戶;   
FIN-WAIT-1 - 等待遠(yuǎn)程TCP的連接中斷請(qǐng)求,或先前的連接中斷請(qǐng)求的確認(rèn);  
FIN-WAIT-2 - 從遠(yuǎn)程TCP等待連接中斷請(qǐng)求;   
CLOSE-WAIT - 等待從本地用戶發(fā)來(lái)的連接中斷請(qǐng)求;   
CLOSING -等待遠(yuǎn)程TCP對(duì)連接中斷的確認(rèn);   
LAST-ACK - 等待原來(lái)發(fā)向遠(yuǎn)程TCP的連接中斷請(qǐng)求的確認(rèn);   
TIME-WAIT -等待足夠的時(shí)間以確保遠(yuǎn)程TCP接收到連接中斷請(qǐng)求的確認(rèn);   
CLOSED - 沒(méi)有任何連接狀態(tài);

TCP攻擊方式

1.完成三次握手后,不發(fā)送任何報(bào)文,一直維持這些TCP連接。
2.完成三次握手后,立刻發(fā)送FIN或RST報(bào)文,釋放本端連接,同時(shí)快速發(fā)起新的連接。
3.連接過(guò)程中呈現(xiàn)給服務(wù)器端很小的TCP windows size,導(dǎo)致服務(wù)器TCP協(xié)議棧資源耗盡。
4.發(fā)送大量TCP重傳請(qǐng)求,以很小的流量即可導(dǎo)致被攻擊網(wǎng)絡(luò)上行鏈路擁塞。



Copyright© 2004-2020 河南海騰電子技術(shù)有限公司 版權(quán)所有   經(jīng)營(yíng)性ICP/ISP證 備案號(hào):B1-20180452   豫公網(wǎng)安備 41019702002018號(hào)    電子營(yíng)業(yè)執(zhí)照