色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一個網絡包是如何經過應用程序的

Linux愛好者 ? 來源:平凡人筆記 ? 2023-03-13 09:50 ? 次閱讀

要明白一個知識點,首先要快速的對這個知識點建立一個概念模型,有了概念模型之后,再在這個模型上不斷的去填充一些細節的東西,會有助于我們把握知識的本質。

帶寬是什么?

帶寬是網絡被發送的能力,它會受到網卡復制網絡包到內核緩沖區或者搬運內核緩沖區的網絡包到網卡緩沖區能力的影響,也會受到接收窗口或擁塞窗口的影響,也就是說如果對端接收能力變小,那么帶寬是不能提升上去的。

當整個網絡的鏈路變長以后,網絡的情況是很復雜的。網絡包有可能會經過多個路由器或者不同運營商之間的線路去進行數據交換,而不同代理商之間的網絡流量是極其龐大的,它會導致你的網絡包產生丟包或者重發的狀況,針對于這種情況,平時在部署服務節點時候,如果有能力在設計鏈路的時候最好能夠避免這種不同代理商之間的網絡交換,優化整個網絡傳輸的鏈路選擇能力,這也是cdn提供全局加速的一個原理。

cdn原理是能夠在世界各地部署很多個節點,然后每個節點之間的一個鏈路選擇是通過服務運營商精心編排過的,它能夠保證你的整個網絡的鏈路是經過優化的,能夠讓你的網絡包更少的產生丟包或者是重發的狀況。

網絡包的收發過程

我們得明白一個網絡包是如何經過應用程序的,

b13f35da-bfe6-11ed-bfe3-dac502259ad0.png

一般應用程序發起一個網絡請求,這個網絡請求的數據會寫到內核的套接字緩沖區當中,然后內核會對這個套接字緩沖區的數據去加上tcp頭或udp頭,然后又經由ip層,再加上一個ip頭,中間會經過防火墻的一系列規則對這個網絡包進行過濾,看是丟棄還是繼續往網卡上面去發送,最終到達鏈路層之后,這個網絡包會經由鏈路層去發到網卡上的環形緩沖區上,最后由網卡發送到整個網絡當中,其中每一環都是有可能會發生丟包的。

理解了網絡包的收發過程,建立起了這樣一種概念模型之后,會有助于我們對丟包問題的排查。

如何去衡量網絡情況的好壞

對應用服務進行監控的時候,如何去衡量網絡情況的好壞,一般也用來衡量硬件資源的好壞。

一個通用套路,一般我們會先看一下,在系統層面上網絡指標的一個表現,再看下具體是哪個進程造成這種表現的異常,再去定位到問題代碼。

具體對網絡而言,如何從系統的層面或者是我們要使用哪些工具去看這個網絡的好壞?

從系統層面看網絡有幾個重要的指標,MBS 代表網卡每秒發送多少或者是接收多少個M字節,Mbps是每秒多少M比特位。通常說的帶寬的單位就是Mbps,一般100M帶寬的話換算成MBS等于Mbps除以8。

平時選擇服務器節點的時候,除了帶寬,還有pps就是每秒發送、接收包的數量,它也是有限制的。

當我們在遇到網絡性能問題的時候,首先可以去觀察你的機器節點上這兩個指標是否是已經達到了一個瓶頸的狀態。如果帶寬只有100Mbps,然后通過工具查看機器上面的節點帶寬,馬上就要超過這個值的時候,很有可能這個時候帶寬已經成為瓶頸,可能要對機器的配額去進行升級。

sar

# 使用sar每一秒統計一次網絡接口的活動狀況,連續顯示5次

sar -n DEV 1 5

b157cef6-bfe6-11ed-bfe3-dac502259ad0.png

IFACE是網卡接口名稱

rxpck/s、txpck/s 每秒收或發的數據包數量

rxkB/s、txkB/s 每秒收或發的字節數,以kB/s為單位

rxcmp/s、txcmp/s 每秒收或發的壓縮過的數據包數量

rxmcst/s 每秒收到的多播(多播是一點對多點的通信)數據包

看完了整個系統層面的網絡情況,可以再精細點的從進程的角度去看這個問題。

iftop

# 

yum  -y install libpcap libpcap-devel ncurses ncurses-devel

yum install epel-release

yum install -y iftop

iftop -P

b1bd3034-bfe6-11ed-bfe3-dac502259ad0.png

能夠列出這個系統里面每一條鏈接的一個Mbps,能夠找出哪個ip消耗流量最多。更多的時候其實不是系統網絡達到瓶頸,而是進程處理網絡包的能力跟不上。

nethogs

yum install nethogs

# 查看進程占用帶寬的情況
nethogs ens33

列出每個進程的收發流量的數據,找出哪個進程是最消耗流量的,能夠更方便的讓我們去定位哪個進程出的問題。

go trace這個工具能夠去分析出網絡調度帶來的延遲問題,其實也能夠從側面去反饋出你的程序在某一塊代碼上面可能是在進行頻繁的網絡調度,有可能是進行頻繁調度之后,比較消耗帶寬,從而可能間接的反映出延遲會略有提高,go trace也能夠從讓我們在網絡性能問題當中能夠比較間接去找出一塊問題的代碼。

b1d88956-bfe6-11ed-bfe3-dac502259ad0.png

網絡性能當中比較重要的一個點就是如何查找你的一個丟包問題,對于上面的圖[網絡包傳輸過程],從上到下依次分析,先看應用層,通過listen這個方法去監聽套接字的時候,在三次握手的時候,會有兩個隊列,首先服務器接收到客戶端的syn包的時候,會創建一個半連接隊列 ,這個半連接隊列會將那些還沒有完成三次握手但是卻發送了一個syn包的這種連接放到里面,會回復客戶端一個syn+ack,客戶端收到了這個ack和syn包之后,會回復給服務端一個ack,這個時候內核就會將這個連接放到全連接隊列,當服務器調用accept方法的時候,會將這條連接從全連接隊列里取出來,所以這個時候涉及了兩個隊列,如果這兩個隊列滿了的話,就會可能會產生丟包的行為。

b1e49c46-bfe6-11ed-bfe3-dac502259ad0.jpg

b208d5ac-bfe6-11ed-bfe3-dac502259ad0.jpg

首先來看一下半連接隊列,它是由內核參數決定的,這個也是可以調整的。通過三次握手,才能夠去建立連接,但是由于這種隊列的機制很有可能在并發量大的時候,會產生隊列滿了,然后丟包的行為,所以內核提供了一個tcp_syncookies參數,它能夠去啟用tcp_syncookies這個機制,當半連接隊列溢出的時候,它能夠讓內核不直接去丟棄這個新包,而是回復帶有syncookie的包,這個時候客戶端再去向服務器進行請求的時候,它會去驗證這個syncookie,這樣能夠防止半連接隊列溢出的時候造成服務不可用的一個情況。

如何去確定是由于半連接隊列溢出導致的丟包?

通過dmesg去日志里面去搜尋tcp drop,是能夠發現丟包的情況,dmesg是一個內核的日志記錄,我們能夠從里面去找出一些內核的行為,

dmesg|grep "TCP: drop open erquest form"

然后看下全連接隊列該怎么看,通過ss命令的話,能夠去看到你的服務在listen的時候,全連接隊列的大小

ss -lnt

# -l 顯示正在監聽 
# -n 不解析服務名稱
# -t 只顯示 tcp socket

b2193528-bfe6-11ed-bfe3-dac502259ad0.png

對于你的那個監聽服務而言,它的一個Send-Q,就是代表當前全連接隊列長度,也就是當前已完成三次握手并等待服務端 accept() 的 TCP 連接。Recv-Q是指當前全連接隊列的大小,上面的輸出結果說明監聽 9000 端口的 TCP 服務,最大全連接長度為 128。Recv-Q一般都是為0,如果存在一種大于0的情況并且會持續一個較長時間的話,就說明你的服務處理連接的能力比較慢了,會導致全連接隊列過滿或者丟棄,這個時候應該會加快你的服務處理連接的能力。

ss命令對于狀態為ESTAB的連接,它看的不是你這個監聽服務,而是去看一條已經建立好的連接相關指標,Recv-Q是代表收到但未被應用程序讀取的一個字節數,Send-Q已發送但未收到確認的字節數,通過這兩個指標,能夠去看到是應用程序對一個數據的處理能力慢,還是說是客戶端對接收的數據處理的比較慢的情況,一般這兩個值也都是為0,如果有其中一個不為0 ,你可能要去排查一下是客戶端的問題還是服務器的問題。

當全連接隊列滿了之后,內核默認會將包丟棄,但是也已可指定內核的一個其他行為,如果是將tcp_abort_on_overflow這個值設為1的話,那會直接發一個reset的包給客戶端,直接將這個連接斷開掉,表示廢掉這個握手過程和這個連接。

經過應用層之后,網絡包會到達到傳輸層,傳輸層會有防火墻的存在,如果防火墻開啟的話,那和防火墻有關的連接跟蹤表:nf_conntrack這個是linux為每個經過內核網絡棧的數據包,會生成一個連接的記錄項,當服務器處理過多時,這個連接記錄項所在的連接跟蹤表就會被打滿,然后服務器就會丟棄新建連接的數據包,所以有時候丟包有可能是防火墻的連接跟蹤表設計的太小了。

那如何去看連接跟蹤表的大小呢

# 查看nf_conntrack表最大連接數

cat /proc/sys/net/netfilter/nf_conntrack_max

# 查看nf_conntrack表當前連接數

cat /proc/sys/net/netfilter/nf_conntrack_count

b2556e62-bfe6-11ed-bfe3-dac502259ad0.png

通過這個文件看連接跟蹤表的一個最大連接數nf_conntrack_max,所以在丟包的時候,可以對這一部分去進行排查,看下連接跟蹤表是不是被打滿了。

網絡包經過傳輸層之后,再來看網絡層和物理層,提到網絡層和物理層,就要看網卡了,通過netstat命令,能夠去看整個機器上面網卡的丟包和收包的情況。

RX-DRP這個指標數據,如果它大于0,說明這個網卡是有丟包情況,這里記錄的是從開機到目前為止的數據情況,所以在分析的時候,隔一定的時間去看這個指標是否有上漲。

RX-OVR指標說明這個網卡的環形緩沖區滿了之后產生的丟棄行為。

通過netstat能夠分析網卡丟包的情況,

# netstat可以統計網路丟包以及環形緩沖區溢出

netstat -i

b2653efa-bfe6-11ed-bfe3-dac502259ad0.png

netstat還能夠統計網絡協議層的丟包情況,

b2f30a14-bfe6-11ed-bfe3-dac502259ad0.png

MTU

應用層的網絡包通過網絡層的時候會根據數據包的大小去進行分包發送。

當tcp數據包的大小發送網絡層之后,網絡層發現這個包會大于它的mtu值,這個數據包會進行一個分包的操作。在進行網卡設置的時候,會設置為你的傳輸層包,如果大于了mtu這個值,那就可以直接將這個網絡包丟棄,這也是在現實生活中經常會碰到的一個丟包問題。

所以你在檢查鏈路的時候,通常鏈路長了可能不太好排查,鏈路短一點,可能會很容易看到整條鏈路當中mtu的情況,看一下是不是每條鏈路上對應的每個網卡的mtu指標是不一樣的,如果不一樣的話,有可能會造成你的丟包問題,因為一個包的轉發跟網絡上面設置的mtu值大小有關系,比如設置為大于mtu之后會把這個包給丟棄掉。如果發送的mtu包的大小超過網卡規定的大小,并且網卡不允許分片,那么則會產生丟包。








審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網絡協議
    +關注

    關注

    3

    文章

    270

    瀏覽量

    21573
  • 路由器
    +關注

    關注

    22

    文章

    3737

    瀏覽量

    114004
  • UDP協議
    +關注

    關注

    0

    文章

    69

    瀏覽量

    12715
  • MBS
    MBS
    +關注

    關注

    0

    文章

    6

    瀏覽量

    8299
  • TCP通信
    +關注

    關注

    0

    文章

    146

    瀏覽量

    4246

原文標題:如何排查網絡丟包問題

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于UDP協議的網絡通信應用程序

    )嵌入式Linux應用程序開發-(8)TCP-IP網絡通信應用程序(TCP-Server) 相比起TCP/IP協議的可靠,面向連接,基于字節流通信這些特性,UDP協議是種...
    發表于 11-05 08:29

    基于TCP/IP的網絡通信應用程序分享

    網絡通信應用程序(TCP-Client)本章節,將以服務端的角色進行講解,如何開發TCP服務端(TCP-Server)。目標:使用QT提供的TCP/IP
    發表于 12-23 08:12

    OpenHarmony應用程序包整體說明

    用戶應用程序泛指運行在設備的操作系統之上,為用戶提供特定服務的程序,簡稱“應用”。應用所對應的軟件文件,稱為“
    發表于 09-20 15:34

    proteus8.6應用程序安裝免費下載

    本文檔的主要內容詳細介紹的是proteus8.6應用程序安裝免費下載。
    發表于 08-01 08:00 ?91次下載
    proteus8.6<b class='flag-5'>應用程序</b>安裝<b class='flag-5'>包</b>免費下載

    Protel DXP軟件安裝應用程序免費下載

    本文檔的主要內容詳細介紹的是Protel DXP軟件安裝應用程序免費下載,防局域網沖突。
    發表于 03-09 08:00 ?0次下載
    Protel DXP軟件安裝<b class='flag-5'>包</b><b class='flag-5'>應用程序</b>免費下載

    演示基本的藍牙網狀網絡照明應用程序

    Sense 2板建立藍牙網狀網絡。將供應兩塊板作為燈,塊板作為開關。由Silicon Labs開發的藍牙網狀智能手機應用程序,可以控
    的頭像 發表于 06-15 11:13 ?2037次閱讀

    嵌入式Linux應用程序開發-(1)第一個嵌入式QT應用程序

    一個嵌入式QT應用程序在成功安裝 Qt Creator 開發環境后,我們通過簡單的嵌入式Qt應用程序,來說明
    發表于 11-01 17:21 ?16次下載
    嵌入式Linux<b class='flag-5'>應用程序</b>開發-(1)第<b class='flag-5'>一個</b>嵌入式QT<b class='flag-5'>應用程序</b>

    嵌入式Linux應用程序開發-(9)UDP網絡通信應用程序(UDP-Socket)

    )嵌入式Linux應用程序開發-(8)TCP-IP網絡通信應用程序(TCP-Server) 相比起TCP/IP協議的可靠,面向連接,基于字節流通信這些特性,UDP協議是種...
    發表于 11-02 12:21 ?35次下載
    嵌入式Linux<b class='flag-5'>應用程序</b>開發-(9)UDP<b class='flag-5'>網絡</b>通信<b class='flag-5'>應用程序</b>(UDP-Socket)

    構建移動應用程序

    電子發燒友網站提供《構建移動應用程序.zip》資料免費下載
    發表于 07-04 14:33 ?0次下載
    構建<b class='flag-5'>一</b><b class='flag-5'>個</b>移動<b class='flag-5'>應用程序</b>

    OneInstall Windows驅動程序應用程序工具

    電子發燒友網站提供《OneInstall Windows驅動程序應用程序工具.exe》資料免費下載
    發表于 07-26 17:34 ?0次下載
    OneInstall Windows驅動<b class='flag-5'>程序</b>和<b class='flag-5'>應用程序</b>工具<b class='flag-5'>包</b>

    OneInstall Windows驅動程序應用程序工具分享

    電子發燒友網站提供《OneInstall Windows驅動程序應用程序工具分享.exe》資料免費下載
    發表于 07-27 09:29 ?0次下載
    OneInstall Windows驅動<b class='flag-5'>程序</b>和<b class='flag-5'>應用程序</b>工具<b class='flag-5'>包</b>分享

    OneInstall驅動程序應用程序工具為Windows

    電子發燒友網站提供《OneInstall驅動程序應用程序工具為Windows.exe》資料免費下載
    發表于 08-02 14:58 ?0次下載
    OneInstall驅動<b class='flag-5'>程序</b>和<b class='flag-5'>應用程序</b>工具<b class='flag-5'>包</b>為Windows

    OneInstall Windows驅動和應用程序工具

    電子發燒友網站提供《OneInstall Windows驅動和應用程序工具.exe》資料免費下載
    發表于 08-03 11:26 ?0次下載
    OneInstall Windows驅動和<b class='flag-5'>應用程序</b>工具<b class='flag-5'>包</b>

    如何使用Tokio 和 Tracing模塊構建異步的網絡應用程序

    ,并在調試和故障排除時提供有用的信息。 在本教程中,我們將介紹如何使用 Tokio 和 Tracing 模塊來構建異步的網絡應用程序,并使用 Tracing 來記錄
    的頭像 發表于 09-19 15:29 ?710次閱讀

    網絡問題解析

    數據: 1.應用程序的數據,在TCP層增加TCP報文頭,形成可傳輸的數據。 2.在IP層增加IP報頭,形成IP報文。 3.經過數據網卡
    的頭像 發表于 11-09 15:10 ?936次閱讀
    <b class='flag-5'>網絡</b>丟<b class='flag-5'>包</b>問題解析
    主站蜘蛛池模板: 日韩精品无码免费专区| 午夜人妻理论片天堂影院| 亚洲AV无码影院在线播放 | 色妞色视频一区二区三区四区| 高清国语自产拍免费| 亚洲精品视频免费看| 乱h好大噗嗤噗嗤烂了| 大伊人青草狠狠久久| 亚洲男同tv| 欧美日韩精品一区二区三区四区 | 中文字幕视频免费在线观看| 青青青青草原国产免费| 国色天香社区视频免费高清3| 2021国产精品视频一区| 宿舍BL 纯肉各种PLAY H| 久久亚洲精品成人| 国产AV亚洲精品久久久久软件| 一本大道手机在线看| 日韩少妇爆乳无码专区| 久久黄色精品视频| 古风H啪肉NP文| 7723日本高清完整版在线观看| 无码精品AV久久久奶水| 免费毛片网站在线观看| 果冻传媒 在线播放观看| va亚洲va天堂va视频在线| 一本一本之道高清在线观看| 涩涩免费网站| 欧美.亚洲.日韩.天堂| 精品久久久噜噜噜久久久app| 福利啪啪吧| 99国产强伦姧在线看RAPE| 亚洲精品久久AV无码蜜桃| 日本熟妇乱妇熟色A片蜜桃亚洲 | 无遮挡h肉3d动漫在线观看| 麻豆精品国产剧情观看| 国产呦精品一区二区三区网站| younv 学生国产在线视频| 在线成 人av影院| 亚洲AV综合色一区二区三区| 日韩av片无码一区二区不卡电影|