Tcp協(xié)議詳解

確保可靠性的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é)流。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、TCP狀態(tài)linux查看tcp的狀態(tài)命令:1)、netstat -nat 查看TCP各個狀態(tài)的數(shù)量2)、lso...
    北辰青閱讀 9,739評論 0 11
  • 為什么會有TCP/IP協(xié)議 在世界上各地,各種各樣的電腦運行著各自不同的操作系統(tǒng)為大家服務(wù),這些電腦在表達(dá)同一種信...
    RaphetS閱讀 280,220評論 12 294
  • TCP/IP詳解 網(wǎng)絡(luò)協(xié)議通常分不同層次進(jìn)行開發(fā),每一層分別負(fù)責(zé)不同的通信功能一個協(xié)議族,比如TCP/IP,是一組...
    謎碌小孩閱讀 1,363評論 0 5
  • 套接字選項SO_RESUEADDR 即使端口處于2MSL狀態(tài),使用該選項,仍然能夠在該端口建立連接。服務(wù)器常會設(shè)置...
    Myth52125閱讀 1,524評論 0 0
  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,390評論 6 174

友情鏈接更多精彩內(nèi)容