TCP協議小結

TCP協議的定義

TCP屬於傳輸層協議,提供了一種端到端的鏈接。緩存

  • 是面向鏈接的、可靠的的進程到進程通訊的協議
  • TCP提供全雙工服務,即數據可在同一時間雙向傳播
  • TCP將若干個字節構成一個分組,此分組稱爲報文段(Segment)

TCP的功能

  • 將數據進行分段打包傳輸
  • 對每一個數據包編號控制順序
  • 運輸中丟失、重發和丟棄處理
  • 流量控制避免擁塞

TCP數據包封裝 

image.png

  • 源端口號和目標端口號,計算機經過端口號識別訪問哪一個服務,好比http服務或ftp服務,發送方端口號是進行隨機端口,目標端口號決定了接收方哪一個程序來接收
  • 32位序列號 TCP用序列號對數據包進行標記,以便在到達目的地後從新重裝,假設當前的序列號爲 s,發送數據長度爲 l,則下次發送數據時的序列號爲 s + l。在創建鏈接時一般由計算機生成一個
  • 確認應答號 它等於下一次應該接收到的數據的序列號。假設發送端的序列號爲 s,發送數據的長度爲 l,那麼接收端返回的確認應答號也是 s + l。發送端接收到這個確認應答後,能夠認爲這個位置之前全部的數據都已被正常接收。
  • 首部長度:TCP 首部的長度,單位爲 4 字節。若是沒有可選字段,那麼這裏的值就是 5。表示 TCP 首部的長度爲 20 字節。
  • 控制位 TCP的鏈接、傳輸和斷開都受這六個控制位的指揮網絡

    • URG 緊急指針:控制位爲 1 時有效。表示緊急數據的末尾在 TCP 數據部分中的位置。一般在暫時中斷通訊時使用(好比輸入 Ctrl + C)。
    • ACK(acknowledgement 確認)爲1表示確認號
    • PSH(push急迫位) 緩存區將滿,馬上傳輸速度
    • RST(reset重置位) 鏈接斷了從新鏈接
    • SYN(synchronous創建聯機) 同步序號位 TCP創建鏈接時要將這個值設爲1學習

      • FIN發送端完成位,提出斷開鏈接的一方把FIN置爲1表示要斷開鏈接
  • 窗口大小:用於表示從應答號開始可以接受多少個 8 位字節。若是窗口大小爲 0,能夠發送窗口探測。 窗口值 說明本地可接收數據段的數目,這個值的大小是可變的。當網絡通暢時將這個窗口值變大加快傳輸速度,當網絡不穩定時減小這個值能夠保證網絡數據的可靠傳輸。它是來在TCP傳輸中進行流量控制的
  • 校驗和: 用來作差錯控制,TCP校驗和的計算包括TCP首部、數據和其它填充字節。在發送TCP數據段時,由發送端計算校驗和,當到達目的地時又進行一次檢驗和計算。若是兩次校驗 和一致說明數據是正確的,不然 將認爲數據被破壞,接收端將丟棄該數據
  • 緊急指針:盡在 URG(urgent緊急) 控制位爲 1 時有效。表示緊急數據的末尾在 TCP 數據部分中的位置。一般在暫時中斷通訊時使用(好比輸入 Ctrl + C)

TCP的握手與斷開

image.png

 創建鏈接時的三次握手

  • 第一次握手主機A經過一個標識爲SYN標識位的數據段發送給主機B請求鏈接,經過該數據段告訴主機B但願創建鏈接,須要B應答,並告訴主機B傳輸的起始序列號
  • 第二次握手是主機B用一個確認應答ACK和同步序列號SYNC標誌位的數據段來響應主機A,一是發送ACK告訴主機A收到了數據段,二是通知主機A從哪一個序列號作標記。
  • 第三次握手是主機A確認收到了主機B的數據段並能夠開始傳輸實際數據。

斷開鏈接時的四次請求

    • 主機A發送FIN控制位發出斷開鏈接的請求
    • 主機B進行響應,確認收到斷開鏈接請求
    • 主機B提出反方向的關閉要求
    • 主機A確認收到的主機B的關閉鏈接請求

    爲何要四次分手?

    TCP協議是一種面向鏈接的、可靠的、基於字節流的運輸層通訊協議。TCP是全雙工 模式,這就意味着,當主機1發出FIN報文段時,只是表示主機1已經沒有數據要發送了,主機1告訴主機2, 它的數據已經所有發送完畢了;可是,這個時候主機1仍是能夠接受來自主機2的數據;當主機2返回ACK報文 段時,表示它已經知道主機1沒有數據發送了,可是主機2仍是能夠發送數據到主機1的;當主機2也發送了FIN 報文段時,這個時候就表示主機2也沒有數據要發送了,就會告訴主機1,我也沒有數據要發送了,以後彼此 就會愉快的中斷此次TCP鏈接。spa

    結尾

    TCP是一個很是複雜的協議,這裏稍微總結了一下,隨着學習時間增長,繼續補充。指針

    相關文章
    相關標籤/搜索