Tcp協議詳解

確保可靠性的TCP協議

按層次分,TCP位于傳輸層,提供可靠的字節流服務。
所謂的字節流服務是指,為了方便傳輸,將大塊數據分割成以報文段為單位的數據包進行管理。而可靠的服務是指,能夠把數據準確可靠的傳送給對方。

三次握手

為了確保無誤地將數據發送到目標處,TCP協議采用三次握手策略。用TCP協議把數據包發送出去后,TCP不會對傳送后的情況置之不理,它一定會向對方確認是否出成功送達。握手過程中使用了TCP的標志——SYN和ACK。
第一次握手:客戶機A發送標識位SYN = 1,隨機產生序列號seq = x的數據包到服務器B,服務器B由SYN = 1知道客戶機A要建立連接,并進入SYN_SEND狀態,等待服務器確認;;
第二次握手:服務器B收到請求并確認聯機信息后,向客戶機A發送標識位SYN = 1,ACK = 1和隨機產生的序列號seq = y, 確認碼ack number = x+1(客戶機A發送的seq+1)的數據包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶機A收到后檢查確認碼ack number是否正確,即和第一次握手發送的序列號加1結果是否相等,以及ACK標識位是否為1;若正確,客戶機A發送標識位ACK = 1、seq = x + 1和確認碼ack number = y + 1(服務器B發送的seq+1)到服務器B,服務器B收到后確認ACK=1和seq是否正確,若正確則完成建立連接,此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手,客戶端與服務器開始傳送數據.。

四次揮手

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

TCP協議的特點

  • TCP是面向連接的端到端協議。
  • TCP連接是點到點的。TCP連接是在單個發送方與單個接收方之間的連接。
  • TCP連接提供的是全雙工服務。如果一臺主機上的進程A與另一臺主機上的進程B存在一條TCP連接,那么應用層數據在從B流向A的同時也能從A流向B。
  • TCP提供可靠的交付服務。通過TCP連接傳輸的數據,能夠保證無差錯、不丟失、不重復并且按序地到達。
  • TCP連接采用的是客戶/服務器模式。
  • TCP報文段的劃分。
  • 面向字節流。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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