一個數據包的大小是好多?

来源:https://www.cnblogs.com/xiayuhaha/archive/2019/11/16/11872011.html
-Advertisement-
Play Games

一個數據包的大小是好多? 1、數據鏈路層對數據幀的長度都有一個限制,也就是鏈路層所能承受的最大數據長度,這個值稱為最大傳輸單元,即MTU。以乙太網為例,這個值通常是1500位元組。2、對於IP數據包來講,也有一個長度,在IP包頭中,以16位來描述IP包的長度,也就是說,一個IP包,最長可能是65535 ...


一個數據包的大小是好多?

    1、數據鏈路層對數據幀的長度都有一個限制,也就是鏈路層所能承受的最大數據長度,這個值
稱為最大傳輸單元,即MTU。以乙太網為例,這個值通常是1500位元組。

2、對於IP數據包來講,也有一個長度,在IP包頭中,以16位來描述IP包的長度,也就是說,
一個IP包,最長可能是65535位元組。

3、結合以上兩個概念,第一個重要的結論就出來了,如果IP包的大小,起過了MTU值,那麼就需要
分片,也就是把一個IP包分為多個,這個概念非常容易理解,一個載重5T的卡車,要拉10T的貨,它
當然就得分幾次來拉了。

4、IP分片是很多資料常講的內容,但是我倒是覺得分不分片其實不重要,重要的是另一個東西。一個
數據包穿過一個大的網路,它其間會穿過多個網路,每個網路的MTU值是不同的。我們可以設想,如果
接受/發送端都是乙太網,它們的MTU都是1500,我們假設發送的時候,數據包會以1500來封裝,然而,
不幸的是,傳輸中有一段X.25網,它的MTU是576,這會發生什麼呢?我想,這個才是我們所關心的。
當然,結論是顯而易見的,這個數據包會被再次分片,咱開始用火車拉,到了半路,不通火車,只通汽車,
那一車貨會被分為很多車……僅此而已,更重要的是,這種情況下,如果IP包被設置了“不允許分片標誌”,那
會發生些什麼呢?對,數據包將被丟棄,然事收到一份ICMP不可達差錯,告訴你,需要分片!
這個網路中最小的MTU值,被稱為路徑MTU,我們應該有一種有效的手段,來發現這個值,最笨的方法或許是先
用traceroute查看所有節點,然後一個個ping……

5、到了傳輸層,也會有一個最大值的限制,當然,對於只管發,其它都不管的UDP來說,不再我們討論之列。這裡
說的是TCP協議。說到大小,或許會讓人想到TCP著名的滑動視窗的視窗大小,它跟收發兩端的緩存有關,這裡討論
的是傳輸的最大數據包大小,所以,它也不在討論之列。
TCP的選項欄位中,有一個最大報文段長度(MSS),表示了TCP傳往另一端的最大數據的長度,當一個連接立時,連接
的雙方都要通告各自的MSS,也就是說,它說是與TCP的SYN標誌在一起的。當然,對於傳輸來講,總是希望MSS越大越好,
現在超載這麼嚴重,誰家不希望多拉點貨……但是,MSS總是有個限制的,也就是MTU-IP頭長度-TCP頭長度,對於乙太網來講
它通常是1500-20-20=1460,雖然總是希望它能很大(如1460),但是大多數BSD實現,它都是512的倍數,如1024……

6、回到分片上來,例如,在Win2000下執行如下命令:
ping 192.168.0.1 -l 1473

按剛纔的說法,1473+20(ip頭)+8(icmp頭)=1501,則好大於1500,它會被分片,但是,我們關心的是:

這個數據包會被怎麼樣分法?
可以猜想,第一個包是
以太頭+IP頭+ICMP頭+1472的數據;
那第二個分片包呢?
它可以是:
以太頭+IP頭+ICMP頭+1個位元組的數據
或者是:
以太頭+IP頭+1個位元組的數據
也就是省去ICMP頭的封裝,當然,IP頭是不可以省的,否則怎麼傳輸了……

事實上,TCP/IP協議採用的是後一種封裝方式,這樣,一次可以節約8個位元組的空間。IP包頭中,用了三個標誌來描述一個分片包:
1、分片標誌:如果一個包被分片了,被置於1,最後一個分片除外;——這樣,對於接收端來講,可以根據這個標誌位做為重組的重
要依據之一;
2、分片偏移標誌:光有一個標誌位說明“自己是不是分片包”是不夠的,偏移標誌位說明瞭自己這個分片拉於原始數據報的什麼位置,
很明顯,這兩個標誌一結合,就很容易重組分片包了。
3、不允許分片標誌:如果數據包強行設置了這個標誌,那麼在應該分片的時候,…… err,剛纔已經說過了
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 眾所周知,現如今嵌入式非易失性存儲器基本被NOR Flash一統江湖了,但在Flash技術發明之前,EEPROM才是非易失性存儲器的霸主。EEPROM的全稱是"電可擦除可編程只讀存儲器",即Electrically Erasable Programmable Read-Only Memory,EEP... ...
  • RDPGuard是一款保護遠程桌面RDP埠不被暴力猜解的軟體,說下在使用RDP Guard中遇到的一些問題: 1.似乎D版RDPGuard 6.1.7或之後的版本,啟用IP Cloud會自動將大量IP段加入阻止列表,這是一個大坑,幸好我有其他方式可以登錄本機; 2.D版的RDPGuard 6.3. ...
  • 一 部署master節點 1.1 master節點服務 kubernetes master 節點運行如下組件: kube-apiserver kube-scheduler kube-controller-manager kube-nginx kube-apiserver、kube-scheduler ...
  • [toc] 半自動化之系統安裝 自製應答文件 1. 使⽤kickstart半⾃動化安裝CentOS系統 理解kickstart文件的作用和編寫格式。 KickStart是一種半自動化的安裝方式。KickStart的工作原理是通過記錄典型的安裝過程中所需人工干預填寫的 各種參數,並生成一個名為ks.c ...
  • 場景 Keepalived的作用是檢測web伺服器的狀態,如果有一臺web伺服器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web伺服器從系統中剔除,當web伺服器工作正常後Keepalived自動將web伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的 ...
  • 場景 在Ubuntu Server中進行安裝keepalived ,如果安裝過程中出現紕漏,想要重新安裝keepalived或者就是想直接卸載keepalived。 我們在安裝keepalived時指定過安裝路徑為 /usr/local/src/keepalived ./configure --pr ...
  • 有時候,我們沒有root用戶的時候,我們進行安裝deb包就不能之間安裝到系統之中了; 為了方便,我們可以直接解壓 dpkg -x same.deb .; 直接解壓到當前目錄,然後在配置環境變數,即可啟動運行程式; 當然,還有另外一個命令: dpkg -i --instdir=/dest/dir/pa ...
  • Windows10中安裝Ubuntu,期間踩了非常多的坑,最終安裝成功了,梳理下來Windows10裝Ubuntu的步驟還是比較簡明的。 製作Ubuntu系統U盤 Windows磁碟為新系統進行分區, 重啟插上U盤,設置BIOS打開U盤啟動,關閉安全啟動(secure boot)和快速啟動(fast ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...