確保可靠性的TCP協(xié)議
按層次分,TCP位于傳輸層,提供可靠的字節(jié)流服務(wù)。
所謂的字節(jié)流服務(wù)是指,為了方便傳輸,將大塊數(shù)據(jù)分割成以報文段為單位的數(shù)據(jù)包進(jìn)行管理。而可靠的服務(wù)是指,能夠把數(shù)據(jù)準(zhǔn)確可靠的傳送給對方。
三次握手
為了確保無誤地將數(shù)據(jù)發(fā)送到目標(biāo)處,TCP協(xié)議采用三次握手策略。用TCP協(xié)議把數(shù)據(jù)包發(fā)送出去后,TCP不會對傳送后的情況置之不理,它一定會向?qū)Ψ酱_認(rèn)是否出成功送達(dá)。握手過程中使用了TCP的標(biāo)志——SYN和ACK。
第一次握手:客戶機(jī)A發(fā)送標(biāo)識位SYN = 1,隨機(jī)產(chǎn)生序列號seq = x的數(shù)據(jù)包到服務(wù)器B,服務(wù)器B由SYN = 1知道客戶機(jī)A要建立連接,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);;
第二次握手:服務(wù)器B收到請求并確認(rèn)聯(lián)機(jī)信息后,向客戶機(jī)A發(fā)送標(biāo)識位SYN = 1,ACK = 1和隨機(jī)產(chǎn)生的序列號seq = y, 確認(rèn)碼ack number = x+1(客戶機(jī)A發(fā)送的seq+1)的數(shù)據(jù)包,此時服務(wù)器進(jìn)入SYN_RECV狀態(tài);
第三次握手:客戶機(jī)A收到后檢查確認(rèn)碼ack number是否正確,即和第一次握手發(fā)送的序列號加1結(jié)果是否相等,以及ACK標(biāo)識位是否為1;若正確,客戶機(jī)A發(fā)送標(biāo)識位ACK = 1、seq = x + 1和確認(rèn)碼ack number = y + 1(服務(wù)器B發(fā)送的seq+1)到服務(wù)器B,服務(wù)器B收到后確認(rèn)ACK=1和seq是否正確,若正確則完成建立連接,此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手,客戶端與服務(wù)器開始傳送數(shù)據(jù).。

四次揮手
第一次揮手:客戶端A發(fā)送一個FIN = 1、初始化序列號seq = u,到服務(wù)器B,用來主動關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送,客戶機(jī)A進(jìn)入FIN-WAIT-1狀態(tài),等待服務(wù)器B發(fā)送FIN;
第二次揮手:服務(wù)器B收到這個FIN,它發(fā)回ACK = 1、確認(rèn)序號ack number為收到的序號加1(ack number=u+1);和SYN一樣,一個FIN將占用一個序號seq = v,客戶機(jī)A進(jìn)入FIN-WAIT-2,稍后關(guān)閉連接,服務(wù)器B進(jìn)入CLOSE_WAIT,等待關(guān)閉連接;
第三次揮手:服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)回標(biāo)識位FIN = 1,ACK = 1,seq = w和確認(rèn)碼ack number=u+1給客戶端A,服務(wù)器B進(jìn)入LAST_ACK,等待最后一次ACK確認(rèn);
第四次揮手:客戶端A發(fā)送ACK = 1報文確認(rèn),并將確認(rèn)序號設(shè)置為收到序號加1(ack number=w+1)到服務(wù)器B,客戶機(jī)A進(jìn)入TIME-WAIT等待2MAL后進(jìn)入CLOSE可用狀態(tài),服務(wù)器B進(jìn)入CLOSE可用狀態(tài)。

TCP協(xié)議的特點
- TCP是面向連接的端到端協(xié)議。
- TCP連接是點到點的。TCP連接是在單個發(fā)送方與單個接收方之間的連接。
- TCP連接提供的是全雙工服務(wù)。如果一臺主機(jī)上的進(jìn)程A與另一臺主機(jī)上的進(jìn)程B存在一條TCP連接,那么應(yīng)用層數(shù)據(jù)在從B流向A的同時也能從A流向B。
- TCP提供可靠的交付服務(wù)。通過TCP連接傳輸?shù)臄?shù)據(jù),能夠保證無差錯、不丟失、不重復(fù)并且按序地到達(dá)。
- TCP連接采用的是客戶/服務(wù)器模式。
- TCP報文段的劃分。
- 面向字節(jié)流。