1. 程式人生 > 其它 >UDP和TCP首部格式 學習筆記

UDP和TCP首部格式 學習筆記

一. UDP首部格式

UDP的首部由源埠號,目標埠號,包長及校驗和組成.

  • 源埠號 (source port) 傳送端埠. 欄位長度16位,是可選項. 沒有源埠號時設定為0 . 如用於某些單方面傳送更新訊息不需要接收端任何返回和應答.
  • 目標埠號(destination port) 接收端埠. 欄位長度16位
  • 包長度(length) 儲存了UDP首部的長度跟資料的長度之和. 單位為位元組(8位位元組)
  • 校驗和(checksum) 是為了提供可靠的UDP首部和資料而設計. (計算略複雜,此處不贅述)

二. TCP首部格式

TCP的首部相比於UDP要複雜的多. 另外,TCP中沒有表示包長度和資料長度的欄位. 可以由IP層獲知TCP的包長,由TCP的包長可知資料的長度. 它的首部格式由以下幾個部分組成:

  • 源埠號. 傳送端埠,欄位長16位.
  • 目標埠號 接收端埠,欄位長16位
  • 序列號(sequence number) 欄位長32位,有時也叫序號,是指傳送資料的位置. 每傳送一次資料,就累加一次該資料位元組的大小. 序號不會從0或者1開始,而是建立連線時由計算機生成的隨機數作為其初始值,通過SYN包傳給接收端主機. 然後再將每轉發過去的位元組數累加到初始值上表示資料的位置. 此外,再建立和埠連線時傳送的SYN包和FIN包雖然並不攜帶資料,但是也會作為一個位元組增加對應的序列號.
  • 確認應答號(acknowledgement number) 欄位長32位. 是指下一次應該接收到的資料的序列號. 實際上,它是指已收到確認應答號減一為止的資料. 傳送端收到這個確認應答以後可以認為在這個序號以前的資料都已經被正常接收.
  • 資料偏移(data offset) 該欄位表示TCP所傳輸的資料部分應該從TCP包的哪個位開始計算,當然也可以把它看作TCP首部的長度. 該欄位長4位,單位為4位元組(即32位).
  • 保留(reserved) 該欄位主要是為了以後擴充套件時使用,其長度為4位. 一般設定為0,但即使收到的包在該欄位不為0,此包也不會被丟棄.
  • 控制位(control flag) 欄位長度為8位,每一位從左至右分別為CWR,ECE,URG,ACK,PSH,RST,SYN,FIN. 這些控制標誌也叫做控制位. 當它們對應位上的值為1時, 代表了不同的資訊如下:
    • CWR (congestion window reduced)
      與後面的ECE標誌都用於IP首部的ECN欄位. ECE標誌為1時, 則通知對方已將擁塞視窗縮小.
    • ECE 表示ECN-Echo. 置為1會通知通訊對方,從對方到這邊的網路有擁塞. 在收到資料包的IP首部中ECN為1時將TCP首部中的ECE設定為1.
    • URG (urgent flag) 為1時,表示包中有緊急處理的資料. 在緊急指標中會涉及到
    • ACK (acknowledgement flag) 為1時,確認應答的欄位變為有效. TCP規定除了最初建立連線時的SYN包之外該位必須設定為1.
    • PSH (push flag) 為1時,表示需要將接受到的資料立刻上傳給上層應用協議. PSH為0時,則不需要理解傳而是先進行快取.
    • RST (reset flag) 該位為1時,表示TCP連線中出現異常必須強制埠連線.
    • SYN (synchronize flag)用於建立連線. SYN為1時表示希望建立連線,並在其序列號的欄位進行序列號初始值的設定.(synchronize本身有同步的意思.也就意味著建立連線的雙方,序列號和確認應答號需要保持同步)
    • FIN (fin flag) 該位為1時,表示今後不會再有資料傳送,希望斷開連線. 當通訊結束希望斷開連線時,通訊雙方的主機之間就可以相互交換FIN位置為1的TCP段. 每個主機又對對方的FIN包進行確認應答以後就可以斷開連線. 不過,主機收到FIN設定為1對TCP段以後不必馬上回復一個FIN包,而是可以等到緩衝區中所有的資料都因已成功傳送而被自動刪除之後再發.
  • 視窗大小(window size)。該欄位長度為16位. 用於通知從相同TCP首部的確認應答號所指位置開始能夠接收的資料大小(8位元組). TCP不允許傳送超過此處所示大小的資料. 不過,如果視窗位0,則表示可以傳送視窗探測,以瞭解最新的視窗大小. 但這個資料必須是1個位元組.
  • 校驗和(checksum) 和UDP一樣,也是為了校驗資料的正確性. 不同的是TCP的校驗和無法關閉.
  • 緊急指標(urgent pointer) 欄位長為16位. 只有在URG控制位為1時有效.該欄位的數值表示本報文段中緊急資料的指標. 如何處理緊急指標屬於應用的問題. 一般在暫時中斷通訊,或中斷通訊的情況下使用. 例如在web瀏覽器中點選停止按鈕,或者使用telnet輸入c t r l+c時都會有URG為1的包. 此外, 緊急指標也用作表示資料流分段的標誌.
  • 選項(options)選項欄位用於提高TCP的傳輸效能. 因為根據資料偏移(首部長度)進行控制, 所以其最大長度為40位元組.