TCP協議基礎

TCP(Transmission Control Protocol 傳輸控制協議是一種面向連接(連接導向)的、可靠的、基於IP的傳輸層協議,由IETF的RFC 793說明(specified)。TCP在IP報文的協議號是6。

  • 源端口和目的端口:  各佔 2 字節.端口是傳輸層與應用層的服務接口.傳輸層的複用和分用功能都要通過端口才能實現
  • 序號:  佔 4 字節.TCP 連接中傳送的數據流中的每一個字節都編上一個序號.序號字段的值則指的是本報文段所發送的數據的第一個字節的序號
  • 確認號:  佔 4 字節,是期望收到對方的下一個報文段的數據的第一個字節的序號
  • 數據偏移/首部長度:  佔 4 位,它指出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠.“數據偏移”的單位是 32 位字(以 4 字節爲計算單位)
  • 保留:  佔 6 位,保留爲今後使用,但目前應置爲 0
  • 緊急URG:  當 URG=1 時,表明緊急指針字段有效.它告訴系統此報文段中有緊急數據,應儘快傳送(相當於高優先級的數據)
  • 確認ACK:  只有當 ACK=1 時確認號字段纔有效.當 ACK=0 時,確認號無效
  • PSH(PuSH):  接收 TCP 收到 PSH = 1 的報文段,就儘快地交付接收應用進程,而不再等到整個緩存都填滿了後再向上交付
  • RST (ReSeT):  當 RST=1 時,表明 TCP 連接中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連接,然後再重新建立運輸連接
  • 同步 SYN:  同步 SYN = 1 表示這是一個連接請求或連接接受報文
  • 終止 FIN:  用來釋放一個連接.FIN=1 表明此報文段的發送端的數據已發送完畢,並要求釋放運輸連接
  • 檢驗和:  佔 2 字節.檢驗和字段檢驗的範圍包括首部和數據這兩部分.在計算檢驗和時,要在 TCP 報文段的前面加上 12 字節的僞首部
  • 緊急指針:  佔 16 位,指出在本報文段中緊急數據共有多少個字節(緊急數據放在本報文段數據的最前面)
  • 選項:  長度可變.TCP 最初只規定了一種選項,即最大報文段長度 MSS.MSS 告訴對方 TCP:“我的緩存所能接收的報文段的數據字段的最大長度是 MSS 個字節.” [MSS(Maximum Segment Size)是 TCP 報文段中的數據字段的最大長度.數據字段加上 TCP 首部纔等於整個的 TCP 報文段]
  • 填充:  這是爲了使整個首部長度是 4 字節的整數倍
  • 其他選項:
    • 窗口擴大:  佔 3 字節,其中有一個字節表示移位值 S.新的窗口值等於TCP 首部中的窗口位數增大到(16 + S),相當於把窗口值向左移動 S 位後獲得實際的窗口大小
    • 時間戳:  佔10 字節,其中最主要的字段時間戳值字段(4字節)和時間戳回送回答字段(4字節)
    • 選擇確認:  接收方收到了和前面的字節流不連續的兩2字節.如果這些字節的序號都在接收窗口之內,那麼接收方就先收下這些數據,但要把這些信息準確地告訴發送方,使發送方不要再重複發送這些已收到的數據


    • 步驟:
      • A 的 TCP 向 B 發出連接請求報文段,其首部中的同步位 SYN = 1,並選擇序號 seq = x,表明傳送數據時的第一個數據字節的序號是 x
      • B 的 TCP 收到連接請求報文段後,如同意,則發回確認(B 在確認報文段中應使 SYN = 1,使 ACK = 1,其確認號ack = x﹢1,自己選擇的序號 seq = y)
      • A 收到此報文段後向 B 給出確認,其 ACK = 1,確認號 ack = y﹢1(A 的 TCP 通知上層應用進程,連接已經建立,B 的 TCP 收到主機 A 的確認後,也通知其上層應用進程:TCP 連接已經建立)


    • 步驟:
      • 數據傳輸結束後,通信的雙方都可釋放連接.現在 A 的應用進程先向其 TCP 發出連接釋放報文段,並停止再發送數據,主動關閉 TCP 連接(A 把連接釋放報文段首部的 FIN = 1,其序號seq = u,等待 B 的確認)
      • B 發出確認,確認號 ack = u+1,而這個報文段自己的序號 seq = v(TCP 服務器進程通知高層應用進程.從 A 到 B 這個方向的連接就釋放了,TCP 連接處於半關閉狀態.B 若發送數據,A 仍要接收)
      • 若 B 已經沒有要向 A 發送的數據,其應用進程就通知 TCP 釋放連接
      • A 收到連接釋放報文段後,必須發出確認,在確認報文段中 ACK = 1,確認號 ack=w﹢1,自己的序號 seq = u + 1

參考文章:

http://www.cnblogs.com/kzloser/articles/2582957.html

發佈了125 篇原創文章 · 獲贊 39 · 訪問量 63萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章