在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡(jiǎn)述linux系統(tǒng)UDP丟包問題分析思路(上)

jf_78858299 ? 來(lái)源:cizixs ? 作者:吳偉 ? 2023-05-18 17:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近工作中遇到某個(gè)服務(wù)器應(yīng)用程序 UDP 丟包,在排查過程中查閱了很多資料,總結(jié)出來(lái)這篇文章,供更多人參考。

在開始之前,我們先用一張圖解釋 linux 系統(tǒng)接收網(wǎng)絡(luò)報(bào)文的過程。

  1. 首先網(wǎng)絡(luò)報(bào)文通過物理網(wǎng)線發(fā)送到網(wǎng)卡
  2. 網(wǎng)絡(luò)驅(qū)動(dòng)程序會(huì)把網(wǎng)絡(luò)中的報(bào)文讀出來(lái)放到 ring buffer 中,這個(gè)過程使用 DMA(Direct Memory Access),不需要 CPU 參與
  3. 內(nèi)核從 ring buffer 中讀取報(bào)文進(jìn)行處理,執(zhí)行 IP 和 TCP/UDP 層的邏輯,最后把報(bào)文放到應(yīng)用程序的 socket buffer 中
  4. 應(yīng)用程序從 socket buffer 中讀取報(bào)文進(jìn)行處理

圖片

在接收 UDP 報(bào)文的過程中,圖中任何一個(gè)過程都可能會(huì)主動(dòng)或者被動(dòng)地把報(bào)文丟棄,因此丟包可能發(fā)生在網(wǎng)卡和驅(qū)動(dòng),也可能發(fā)生在系統(tǒng)和應(yīng)用。

之所以沒有分析發(fā)送數(shù)據(jù)流程,一是因?yàn)榘l(fā)送流程和接收類似,只是方向相反;另外發(fā)送流程報(bào)文丟失的概率比接收小,只有在應(yīng)用程序發(fā)送的報(bào)文速率大于內(nèi)核和網(wǎng)卡處理速率時(shí)才會(huì)發(fā)生。

本篇文章假定機(jī)器只有一個(gè)名字為 eth0 的 interface,如果有多個(gè) interface 或者 interface 的名字不是 eth0,請(qǐng)按照實(shí)際情況進(jìn)行分析。

NOTE:文中出現(xiàn)的 RX(receive) 表示接收?qǐng)?bào)文,TX(transmit) 表示發(fā)送報(bào)文。

確認(rèn)有 UDP 丟包發(fā)生

要查看網(wǎng)卡是否有丟包,可以使用 ethtool -S eth0 查看,在輸出中查找 bad 或者 drop 對(duì)應(yīng)的字段是否有數(shù)據(jù),在正常情況下,這些字段對(duì)應(yīng)的數(shù)字應(yīng)該都是 0。如果看到對(duì)應(yīng)的數(shù)字在不斷增長(zhǎng),就說(shuō)明網(wǎng)卡有丟包。

另外一個(gè)查看網(wǎng)卡丟包數(shù)據(jù)的命令是 ifconfig,它的輸出中會(huì)有 RX(receive 接收?qǐng)?bào)文)和 TX(transmit 發(fā)送報(bào)文)的統(tǒng)計(jì)數(shù)據(jù):

~#ifconfig eth0...        RX packets 3553389376  bytes 2599862532475 (2.3 TiB)        RX errors 0  dropped 1353  overruns 0  frame 0        TX packets 3479495131  bytes 3205366800850 (2.9 TiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0...

此外,linux 系統(tǒng)也提供了各個(gè)網(wǎng)絡(luò)協(xié)議的丟包信息,可以使用 netstat -s 命令查看,加上 --udp 可以只看 UDP 相關(guān)的報(bào)文數(shù)據(jù):

[root@holodesk02 GOD]# netstat -s -uIcmpMsg:    InType0: 3    InType3: 1719356    InType8: 13    InType11: 59    OutType0: 13    OutType3: 1737641    OutType8: 10    OutType11: 263Udp:    517488890 packets received    2487375 packets to unknown port received.    47533568 packet receive errors    147264581 packets sent    12851135 receive buffer errors    0 send buffer errorsUdpLite:IpExt:    OutMcastPkts: 696    InBcastPkts: 2373968    InOctets: 4954097451540    OutOctets: 5538322535160    OutMcastOctets: 79632    InBcastOctets: 934783053    InNoECTPkts: 5584838675

對(duì)于上面的輸出,關(guān)注下面的信息來(lái)查看 UDP 丟包的情況:

  • packet receive errors 不為空,并且在一直增長(zhǎng)說(shuō)明系統(tǒng)有 UDP 丟包
  • packets to unknown port received 表示系統(tǒng)接收到的 UDP 報(bào)文所在的目標(biāo)端口沒有應(yīng)用在監(jiān)聽,一般是服務(wù)沒有啟動(dòng)導(dǎo)致的,并不會(huì)造成嚴(yán)重的問題
  • receive buffer errors 表示因?yàn)?UDP 的接收緩存太小導(dǎo)致丟包的數(shù)量

NOTE:并不是丟包數(shù)量不為零就有問題,對(duì)于 UDP 來(lái)說(shuō),如果有少量的丟包很可能是預(yù)期的行為,比如丟包率(丟包數(shù)量/接收?qǐng)?bào)文數(shù)量)在萬(wàn)分之一甚至更低。

網(wǎng)卡或者驅(qū)動(dòng)丟包

之前講過,如果 ethtool -S eth0 中有 rx_***_errors 那么很可能是網(wǎng)卡有問題,導(dǎo)致系統(tǒng)丟包,需要聯(lián)系服務(wù)器或者網(wǎng)卡供應(yīng)商進(jìn)行處理。

# ethtool -S eth0 | grep rx_ | grep errors     rx_crc_errors: 0     rx_missed_errors: 0     rx_long_length_errors: 0     rx_short_length_errors: 0     rx_align_errors: 0     rx_errors: 0     rx_length_errors: 0     rx_over_errors: 0     rx_frame_errors: 0     rx_fifo_errors: 0

netstat -i 也會(huì)提供每個(gè)網(wǎng)卡的接發(fā)報(bào)文以及丟包的情況,正常情況下輸出中 error 或者 drop 應(yīng)該為 0。

如果硬件或者驅(qū)動(dòng)沒有問題,一般網(wǎng)卡丟包是因?yàn)樵O(shè)置的緩存區(qū)(ring buffer)太小,可以使用 ethtool 命令查看和設(shè)置網(wǎng)卡的 ring buffer。

ethtool -g 可以查看某個(gè)網(wǎng)卡的 ring buffer,比如下面的例子

# ethtool -g eth0Ring parameters for eth0:Pre-set maximums:RX:        4096RX Mini:    0RX Jumbo:    0TX:        4096Current hardware settings:RX:        256RX Mini:    0RX Jumbo:    0TX:        256

Pre-set 表示網(wǎng)卡最大的 ring buffer 值,可以使用 ethtool -G eth0 rx 8192 設(shè)置它的值。

Linux 系統(tǒng)丟包

linux 系統(tǒng)丟包的原因很多,常見的有:UDP 報(bào)文錯(cuò)誤、防火墻、UDP buffer size 不足、系統(tǒng)負(fù)載過高等,這里對(duì)這些丟包原因進(jìn)行分析。

UDP 報(bào)文錯(cuò)誤

如果在傳輸過程中UDP 報(bào)文被修改,會(huì)導(dǎo)致 checksum 錯(cuò)誤,或者長(zhǎng)度錯(cuò)誤,linux 在接收到 UDP 報(bào)文時(shí)會(huì)對(duì)此進(jìn)行校驗(yàn),一旦發(fā)明錯(cuò)誤會(huì)把報(bào)文丟棄。

如果希望 UDP 報(bào)文 checksum 及時(shí)有錯(cuò)也要發(fā)送給應(yīng)用程序,可以在通過 socket 參數(shù)禁用 UDP checksum 檢查:

int disable = 1;setsockopt(sock_fd, SOL_SOCKET, SO_NO_CHECK, (void*)&disable, sizeof(disable)

原文:https://cizixs.com/2018/01/13/linux-udp-packet-drop-debug/

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11069

    瀏覽量

    216717
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11506

    瀏覽量

    213421
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    576

    瀏覽量

    103008
  • 網(wǎng)絡(luò)驅(qū)動(dòng)

    關(guān)注

    0

    文章

    7

    瀏覽量

    7496
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    esp32 udp broadcast怎么避免?

    esp32 udp broadcast
    發(fā)表于 06-17 06:05

    udp數(shù)據(jù)的原因?

    編譯sdk/examples/protocols/sockets/udp_server 例子程序,修改了代碼,把發(fā)送回去的代碼注釋,只是記錄上次接收數(shù)據(jù)的時(shí)間和當(dāng)前接收數(shù)據(jù)的時(shí)間間隔,運(yùn)行一個(gè)
    發(fā)表于 06-25 07:03

    共享控制系統(tǒng)預(yù)測(cè)補(bǔ)償控制算法

    對(duì)共享控制系統(tǒng)中數(shù)據(jù)包在因特網(wǎng)傳輸過程發(fā)生的現(xiàn)象進(jìn)行建模,分析對(duì)
    發(fā)表于 03-21 15:01 ?16次下載

    網(wǎng)卡

    網(wǎng)卡率(Loss Tolerance或packet loss rate)是指測(cè)試中
    發(fā)表于 12-26 12:09 ?1333次閱讀

    網(wǎng)絡(luò)數(shù)據(jù)的原因及攝像機(jī)的原因

    不少人在使用網(wǎng)絡(luò)和監(jiān)控?cái)z像系統(tǒng)的時(shí)候都有遇到過數(shù)據(jù)的情況,數(shù)據(jù)的原因是多種多樣的,以下就為大家介紹一下網(wǎng)絡(luò)數(shù)據(jù)
    的頭像 發(fā)表于 01-11 09:27 ?1.4w次閱讀

    Linux應(yīng)用的延時(shí)和模擬

    合適之類,很多地方可以用到。  我們做的應(yīng)用軟件,還有測(cè)試 TCP/UDP? 對(duì)比,測(cè)試 BDP 對(duì) TCP/IP 的影響時(shí),我們都需要一些網(wǎng)絡(luò)中的延時(shí)和模擬,很多商業(yè)的軟件可以做這個(gè)事,其實(shí)完美
    發(fā)表于 04-02 14:38 ?653次閱讀

    網(wǎng)絡(luò)時(shí)常用的排錯(cuò)思路

    今天浩道跟大家分享硬核網(wǎng)絡(luò)故障排錯(cuò)干貨,主要針對(duì)網(wǎng)絡(luò)時(shí)常用的排錯(cuò)思路。讓你遇到網(wǎng)絡(luò)時(shí),不再迷茫!
    的頭像 發(fā)表于 10-24 09:20 ?2181次閱讀

    Linux優(yōu)化實(shí)戰(zhàn):如何分析網(wǎng)絡(luò)的問題

    所謂,是指在網(wǎng)絡(luò)數(shù)據(jù)的收發(fā)過程中,由于種種原因,數(shù)據(jù)還沒傳輸?shù)綉?yīng)用程序中,就被丟棄了。
    發(fā)表于 01-13 13:57 ?1231次閱讀

    深入分析Linux網(wǎng)絡(luò)問題!

    那到底是哪里發(fā)生了呢?排查之前,我們可以回憶一下 Linux 的網(wǎng)絡(luò)收發(fā)流程,先從理論分析,哪里有可能會(huì)發(fā)生
    的頭像 發(fā)表于 04-21 09:09 ?1454次閱讀

    深入分析Linux網(wǎng)絡(luò)問題

    所謂,是指在網(wǎng)絡(luò)數(shù)據(jù)的收發(fā)過程中,由于種種原因,數(shù)據(jù)還沒傳輸?shù)綉?yīng)用程序中,就被丟棄了。這些被丟棄的數(shù)量,除以總的傳輸數(shù),也就是我們
    的頭像 發(fā)表于 05-04 15:08 ?2957次閱讀
    深入<b class='flag-5'>分析</b><b class='flag-5'>Linux</b>網(wǎng)絡(luò)<b class='flag-5'>丟</b><b class='flag-5'>包</b>問題

    簡(jiǎn)述linux系統(tǒng)UDP問題分析思路(下)

    在開始之前,我們先用一張圖解釋 linux 系統(tǒng)接收網(wǎng)絡(luò)報(bào)文的過程。 1. 首先網(wǎng)絡(luò)報(bào)文通過物理網(wǎng)線發(fā)送到網(wǎng)卡 2. 網(wǎng)絡(luò)驅(qū)動(dòng)程序會(huì)把網(wǎng)絡(luò)中的報(bào)文讀出來(lái)放到 ring buffer 中,這個(gè)
    的頭像 發(fā)表于 05-18 17:25 ?1832次閱讀

    如何解決MPSoC萬(wàn)兆以太網(wǎng)應(yīng)用中UDP接收問題

    本文介紹如何使能 Linux 網(wǎng)絡(luò)協(xié)議棧中的 RFS(receive flow steering)功能以優(yōu)化 MPSoC APU 的并行處理能力,解決問題。
    的頭像 發(fā)表于 06-14 10:10 ?1410次閱讀
    如何解決MPSoC萬(wàn)兆以太網(wǎng)應(yīng)用中<b class='flag-5'>UDP</b>接收<b class='flag-5'>丟</b><b class='flag-5'>包</b>問題

    Linux下模擬網(wǎng)絡(luò)時(shí)延和神器介紹

    今天浩道跟大家分享推薦一款Linux用于模擬網(wǎng)絡(luò)時(shí)延和神器!有這些業(yè)務(wù)運(yùn)維或測(cè)試場(chǎng)景的小伙伴,可以用起來(lái)了!
    發(fā)表于 07-02 14:07 ?2021次閱讀
    <b class='flag-5'>Linux</b>下模擬網(wǎng)絡(luò)時(shí)延和<b class='flag-5'>丟</b><b class='flag-5'>包</b>神器介紹

    網(wǎng)絡(luò)故障如何定位

    是數(shù)據(jù)被包了,類似情況想必大家都不陌生。針對(duì)網(wǎng)絡(luò),本人提供一些常見的故障定位方法,希望能夠幫助大家對(duì)網(wǎng)絡(luò)
    的頭像 發(fā)表于 11-10 11:27 ?1815次閱讀
    網(wǎng)絡(luò)<b class='flag-5'>丟</b><b class='flag-5'>包</b>故障如何定位

    網(wǎng)絡(luò)問題分析

    通常會(huì)帶來(lái)嚴(yán)重的性能下降,特別是對(duì) TCP 來(lái)說(shuō),通常意味著網(wǎng)絡(luò)擁塞和重傳,進(jìn)而還會(huì)導(dǎo)致網(wǎng)絡(luò)延遲增大、吞吐降低。 一、 哪里可能 接下來(lái),我就以最常用的反向代理服務(wù)器 Ngin
    的頭像 發(fā)表于 11-13 11:24 ?1720次閱讀
    網(wǎng)絡(luò)<b class='flag-5'>丟</b><b class='flag-5'>包</b>問題<b class='flag-5'>分析</b>
    主站蜘蛛池模板: 手机精品视频在线观看免费 | 久久黄视频 | 国产成人乱码一区二区三区 | 日本一区二区三区不卡在线视频 | 五月婷花 | 亚洲无线码一区在线观看 | 日韩天天干 | 国产精品毛片在线大全 | 欧美日韩色综合网站 | 好大好紧好爽好湿润视频 | 久久天天躁夜夜躁狠狠 | 精品亚洲午夜久久久久 | 奇米影视777狠狠狠888不卡 | 伊人男人天堂 | 2021天天躁狠狠燥 | 天天夜天天干 | 国产或人精品日本亚洲77美色 | 未成人禁止视频高清在线观看 | 欧美性第一页 | 日本色婷婷 | 丁香六月婷婷激情 | 乱码精品一区二区三区 | 一区二区三区四区在线不卡高清 | 四虎精品影院 | 国产精品久久免费观看 | 黄色毛片免费看 | 欧美成人精品欧美一级乱黄 | 黑人黄色片 | 8888奇米四色在线 | 国产一级特黄的片子 | 456影院第一 | 午夜免费毛片 | 欧美特级午夜一区二区三区 | 黄网在线免费观看 | 老司机深夜影院入口aaaa | 男人在线视频 | 天天色综合3 | 成人精品亚洲人成在线 | 日本三级在线播放线观看2021 | 成年大片免费视频播放手机不卡 | 在线亚洲日产一区二区 |