報文、幀、分組、段、資料包,這些術語是同一個東西嗎?

哎呀我的天吶發表於2022-10-09

報文

是一種相對寬泛和通用的說法,基本上每一層都可以用。

比如,在應用層,你可以說“HTTP報文”;  

在傳輸層,你可以說“TCP報文”;  

同樣的,在網路層,當然就是“IP報文了”。  

事實上,網路層也是“報文”一詞被使用最多的場景了。  

資料包也是類似的,可以在很多場景下通用。  

我們再稍微考究一下語法。packet這個詞的字尾是et。

而在英文中,以et結尾的很多詞 表示某一個小小的東西。

比如功能完備的一小段程式碼,叫 code snippet,一小段內嵌在html 中的java前端程式碼,叫applet。

自然的,packet就是一個小的pack(包裹)。

然而,另外幾個術語在用的時候,就需要講究一點了,因為它們並不是通用詞,而是特定 層的專有詞彙。

幀(frame)

是二層也就是資料鏈路層的概念,代表了二層報文,它包含幀頭、載荷、幀尾。

注意,幀是有尾部的,而其他像 IP、TCP、HTTP 等層級的報文,都沒有尾部。我們

不可以說“TCP 幀”或者“IP 幀”,雖然也許對方也明白你的意思,但我們都想做得專業一點,不是嘛。

這裡還有個小知識點:HTTP/2 實現了多路複用,其中也有幀的概念,

不過那個幀,跟這裡網路二層的幀,除了名稱相同以外,就沒有別的聯絡了。

分組是 IP 層報文,也就是狹義的 packet。

段特指 TCP segment,也就是 TCP 報文。

既然 segment 是“部分”的意思,那這個“整體”又是什麼呢?它就是在應用層交付給傳輸層的訊息(message)。

當 message被交付給傳輸層時,如果這個 message 的原始尺寸,

超出了傳輸層資料單元的限制(比如超出了 TCP 的 MSS),

它就會被劃分為多個 segment。

這個過程就是分段(segmentation),也是 TCP 層的一個很重要的職責。

說到 segmentation,你可能也會想到 fragmentation(分片)。

這倆是同一個東西嗎?

這方面的知識點也不少,我在這裡就不具體展開了。不過彆著急,我會在第 8 講裡,幫你

把這兩個東西梳理清楚。

另外,這裡還要提一下,Datagram 的中文叫“資料包”,但不是“資料包”。

讀音類似,但意思並不完全相同。

前面說過,“資料包”是一個通用詞,所以用“UDP 資料包”指代“UDP 資料包”並沒有問題。

但反過來,非 UDP 協議的資料包,比如 TCP 段,

就不能叫“TCP 資料包”了,因為 TCP 不是 Datagram。

最後,你可以再來看下這張層級和術語對應關係的示意圖:  


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2917373/,如需轉載,請註明出處,否則將追究法律責任。

相關文章