网络编程 数据报是什么?TCP、UDP数据报结构
數據報
數據報是通過網絡傳輸的數據的基本單元,包含一個報頭(header)和數據本身,其中報頭描述了數據的目的地以及和其它數據之間的關系。數據報是完備的、獨立的數據實體,該實體攜帶要從源計算機傳遞到目的計算機的信息,該信息不依賴以前在源計算機和目的計算機以及傳輸網絡間交換。
參考文章:數據報
TCP數據報結構
32位端口號:
源端口和目的端口各占16位,2的16次方等于65536,看端口的命令:netstat。
32位序號:
也稱為順序號(Seqence Nmber),簡寫為SEQ,
32位確認序號:
也稱為應答號(Acknowledgment Nmber),簡寫為ACK。在握手階段,確認序號將發送方的序號加1作為回答。
4位首部長度:
這個字段占4位,它的單位時32位(4個字節)。本例值為7,TCP的頭長度為28字節,等于正常的長度2 0字節加上可選項8個字節。,TCP的頭長度最長可為60字節(二進制1111換算為十進制為15,15*4字節=60字節)。
6位標志字段:
ACK 置1時表示確認號(為合法,為0的時候表示數據段不包含確認信息,確認號被忽略。
RST 置1時重建連接。如果接收到RST位時候,通常發生了某些錯誤。
SYN 置1時用來發起一個連接。
FIN 置1時表示發端完成發送任務。用來釋放連接,表明發送方已經沒有數據發送了。
URG 緊急指針,告訴接收TCP模塊緊要指針域指著緊要數據。注:一般不使用。
PSH 置1時請求的數據段在接收方得到后就可直接送到應用程序,而不必等到緩沖區滿時才傳送。注:一般不使用。
16位檢驗和:
檢驗和覆蓋了整個的TCP報文段: TCP首部和TCP數據。這是一個強制性的字段,一定是由發端計算和存儲,并由收端進行驗證。
16位緊急指針:
注:一般不使用。
只有當U R G標志置1時緊急指針才有效。緊急指針是一個正的偏移量,和序號字段中的值相加表示緊急數據最后一個字節的序號。
可選與變長選項:
通常為空,可根據首部長度推算。用于發送方與接收方協商最大報文段長度(MSS),或在高速網絡環境下作窗口調節因子時使用。首部字段還定義了一個時間戳選項。
最常見的可選字段是最長報文大小,又稱為MSS (Maximm Segment Size)。每個連接方通常都在握手的第一步中指明這個選項。它指明本端所能接收的最大長度的報文段。1460是以太網默認的大小。
UDP數據報結構
源端口號和目的端口號如上和TCP的相同。
UDP長度:UDP報文的字節長度(包括首部和數據)。
UDP校驗和: 檢驗UDP首部和數據部分的正確性。
參考文章:TCP、UDP報文結構與區別
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的网络编程 数据报是什么?TCP、UDP数据报结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pycharm 波浪线报绿 Typo:
- 下一篇: python struct.calcsi