【udp報文】udp報文未自動分片,報文過長被攔截問題定位

問題現象

某局點出現一個奇怪的現象,客戶端給服務端發送消息,服務端僅能收到小部分消息,大部分消息從客戶端發出后,服務端都未收到。

問題定位

  • 初步分析

    • 根據現象初步分析,有可能是網絡原因導致消息到服務端不可達,但是又無法佐證,因為確實有部分消息是能夠被服務端接收到的。
    • 服務端應用問題,通過某些渠道了解到,接收端是客戶自己實現的一個程序,可能是程序存在bug,導致消息丟失。該原因定位較困難,客戶表示可以接收其他發送端消息,拒絕從接收端應用開始排查。
  • 抓包

    • 根據初步分析的第一點猜測,我們決定進行抓包進行分析,由于發送端使用的是udp包,所以我們使用tcpdump工具,在發送端進行抓包,抓包后的結果是,所有的數據包均被tcpdump捕獲
    • 根據第一步的結果可以得出結論,問題并非出在發送應用端,接著我們在接收端進行tcpdump抓包,結果發現,發送端發出來的包,在服務端并沒有全部被抓取到。問題已經顯而易見了。
  • 分析
    根據上述抓包結果,基本可以定界到中間的網絡傳輸將數據包丟棄。而后排查網絡問題,發現是網絡中的防火墻將數據包大于1472字節的包攔截并丟棄了。而防火墻的這一行為為出廠時默認配置,目的是為了防止網絡攻擊。

問題根因

對于udp數據包,當數據包過大時,網卡會將其自動分片發送,而在這個案例中,udp報文里ip層的flag為0x02,即df(don’t fragment)位為1,表示不允許分片發送。

df = 1的情況有以下兩種

  1. 操作系統配置/proc/sys/net/ipv4/ip_no_pmtu_disc參數值
    若上述參數值為0(默認),則表示可分片。
    若上述參數值為2,則強制不進行分片。
    更詳細的用法可以百度查一下。
    這個案例中發送端機器參數為。

  2. 確認發送端網卡的mtu值是否大于1500
    這里為什么是1500呢?因為當udp數據包發出去后,會在報文中添加28字節的報文頭,其中8字節的udp層,20字節的ip層,而1500 - 28 = 1472,所以防火墻會將大于1472字節的數據進行攔截。
    經過排查后發現發送端的機器的mtu值為8192,所以當從發送端將大于1472,小于8166的數據包發送出去時,報文中所攜帶的df值為1,后續經過的所有路由都沒有進行分片,導致數據包到達防火墻后被過濾。

查詢網卡mtu方法:ifconfig
網卡mtu值
正常情況下,該值都為1500,所以數據包能被正常分片在1472字節內。

解決方案

修改網卡mtu值,這個操作可以直接百度到了。
ifconfig 網卡名稱 mtu 1500 up

vim /etc/sysconfig/network-scripts/對應網卡的ifcfg文件
新增一行MTU="1500"
保存后退出,并執行service network restart重啟網卡服務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39767.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39767.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C語言】文件的順序讀寫

©作者:末央& ©系列:C語言初階(適合小白入門) ©說明:以凡人之筆墨,書寫未來之大夢 目錄 前言字符輸入輸出函數 - fgetc和fputc文本行輸入輸出函數 - fgets和fputs格式化輸入輸出函數 - fscanf和fprintf 前言 對文件數據的讀寫可以分為順序…

Unity3D 打造基于AStar的尋路與導航詳解

在游戲開發中,尋路與導航是一個至關重要的功能,它能夠使游戲角色自動找到最優路徑,避開障礙物,實現自動導航,從而提升游戲體驗。AStar(A*)算法作為一種廣泛應用的尋路算法,因其高效性…

關于多線程的使用方法

多線程在python中應用比較廣泛,但是因為python中有GIL鎖的緣故,在多線程中看起來是并發的執行的,在宏觀上是并發執行的,但是在微觀上是一個接著一個執行。 在python中使用多線程比較簡單,是一套固定的模版。 from qu…

PHP利用GD庫實現圖片合成功能方法

在程序項目開發的過程中我們免不了要實現一種功能。例如海報的生成,照片和文字合成一張新的圖片。php中怎么實現 實現功能 文字和照片合成一張新的照片,并且自適應換行并加上簽名和日期,加上字體樣式,下面我們就開實現該功能 實現…

Seal^_^【送書活動第8期】——《ChatGLM3大模型本地化部署、應用開發與微調》

Seal^_^【送書活動第8期】——《ChatGLM3大模型本地化部署、應用開發與微調》 一、參與方式二、本期推薦圖書2.1 作者建語2.2 編輯推建2.3 圖書簡介2.4 前 言2.5 目 錄 三、正版購買 大模型領域 既是繁星點點的未知宇宙,也是蘊含無數可能的廣闊天地, 正…

深入理解 Linux 內核架構

目錄 引言內核概念Linux 內核的基本組成 進程管理內存管理文件系統設備驅動網絡棧內核結構 內核態與用戶態內核模塊系統調用中斷與異常處理內核同步機制Linux 內核使用場景常用的內核命令與工具內核調試與性能優化總結 1. 引言 Linux 內核是現代計算機系統的核心組件之一&am…

python--基礎知識點--協程

協程由用戶態控制,不由內核控制1個線程中可以開很多協程協程切換是在用戶態控制不由內核控制,切換時資源開銷小使用方式:async def、await可等待對象(協程對象、Future對象、task對象(是Future對象的子類)->io等待)、事件循環使用場景&…

idea創建自定義的maven spark scala archetype腳手架

一:先創建一個Maven項目net.alchim31.maven(選該模板,得要等一會兒才能加載出來) 之后將自己的目錄結構建立好,最好不要有空目錄,可能會因為沒有文件在install的時候編譯不進去 pom中內容也按照自己的需要改…

Stable Diffusion web UI 插件

2024.7.3更新,持續更新中 如果需要在linux上自己安裝sd,參考:stable diffusion linux安裝 插件復制到 /stable-diffusion-webui/extensions 目錄下,然后重新啟動sd即可 一、插件安裝方法 每種插件的安裝方法可能略有不同&#xf…

蘋果p12證書最簡單最新申請流程

使用uniapp打包,在ios上打正式包需要蘋果的p12證書和證書profile文件,點進去uniapp的ios證書申請教程,通篇就是使用mac電腦申請的教程,假如沒有mac電腦就無法繼續了。 因此,假如沒有mac電腦的同志們,可以參…

高薪程序員必修課-Java中為什么不建議使用Executors來創建線程池?

目錄 前言 原因分析 1. newFixedThreadPool 和 newSingleThreadExecutor 示例: 2. newCachedThreadPool 示例: 建議的替代方法 示例: 解釋: 總結 前言 在Java中,Executors 類提供了幾個工廠方法來創建不同類型…

RAG開源項目Qanything源碼閱讀3-在線推理

原文:前沿重器[47] | RAG開源項目Qanything源碼閱讀3-在線推理 項目:https://github.com/netease-youdao/QAnything 第一篇:RAG開源項目Qanything源碼閱讀1-概述服務 第二篇:RAG開源項目Qanything源碼閱讀2-離線文件處理 0&#x…

Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自動化(五)Jenkins配置

一、背景 Jenkins(本地宿主機搭建) 拉取GitLab(服務器)代碼到在Jenkins工作空間本地運行并生成Allure測試報告 二、框架改動點 框架主運行程序需要先注釋掉運行代碼(可不改,如果運行報allure找不到就直接注釋掉) …

中英雙語介紹美國的州:路易斯安那州(Louisiana)

中文版 路易斯安那州簡介 路易斯安那州位于美國南部,以其豐富的歷史文化、多樣的自然景觀和獨特的音樂和美食傳統而聞名。以下是對路易斯安那州的詳細介紹,包括其地理位置、人口、經濟、教育、文化和主要城市。 地理位置 路易斯安那州東臨密西西比州…

鴻蒙應用開發-時間屏幕

點擊下載源碼: https://download.csdn.net/download/liuhaikang/89509449 做一個時間屏幕,可以點擊切換白色和黑色,有漸變效果,使用到了鴻蒙的動畫效果。 在這個設計中,我們首先引入了通用能力包,以實現功…

Kubernetes 離線安裝的坑我采了

Kubernetes 離線安裝的坑我采了 一、Error from server: Get "https://xx.xx.xx.xx:10250/containerLogs/kube-system/calico-node-8dnvs/calico-node": tls: failed to verify certificate: x509: certificate signed by unknown authority二、calico 或 pod 啟動正…

cesium公交車軌跡漫游

個人博客:CSDN 博客-滿分觀察網友 z 演示地址:嗶哩嗶哩-滿分觀察網友 z 這是一個用 Cesium.js 做的公交車軌跡漫游,實現的功能有加載站點和道路軌跡點數據、監聽車輛的實時位置、車輛控制器。滾動屏等等。 文章目錄 1. 地圖初始化2. 數據渲…

【高中數學/基本不等式】已知:x,y均為正實數,且xy+2x+y=4 求:x+y的最小值?

【問題】 已知:x,y均為正實數,且xy2xy4 求:xy的最小值? 【來源】 https://www.ixigua.com/7147585275823292942?logTagf25494de7fce23a3a3d0 【解答】 解: 由xy2xy4 兩邊加二得 xy2xy24 2 分解因式得 (x1)(…

0090__【Git系列】merge和rebase的區別

【Git系列】merge和rebase的區別_rebase和merge的區別-CSDN博客 git中rebase和merge的區別是什么-git-PHP中文網 https://blog.51cto.com/qzcsbj/9444199

從零搭建教育管理系統:Java + Vue.js 教學-02

第三步:創建實體類和 Mapper 接口 現在我們已經設計好了數據庫表,接下來使用 MyBatis-Plus 將這些表映射到 Java 對象,以便在代碼中輕松地進行操作。 1. 創建實體類 在 src/main/java/<your_package>/entity 目錄下 (如果沒有該目錄,請手動創建),創建與數據庫表對應…