精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

真·卡了一個1024的 Bug,TCP 的數據包看吐了!

網絡 網絡管理
排查下服務端的日志,發現只有 D4 階段的業務日志打印,D5 階段的日志沒有。初步結論:設備端沒有發送 D5 階段的數據包。

一、背景

最近在預發布環境上遇到一個特別詭異的問題,事情大概是這樣的:

設備在生產時需要走一個注冊的過程,里面涉及到和服務端進行 TCP 通信獲取配置文件、發送密鑰等操作,但是生產進度會卡在70%。

流程如下圖所示。

大家不用細看里面的原理,只用看 D4 階段和 D5 階段即可。

數據通信方式:TCP。

圖片圖片

配置文件長這樣,key=value 形式存儲。

name=rabbit
B2=asdf21
...

當配置文件中的 name 字段為 rabbit 時,設備正常生產,當配置文件中的 name 字段為 rabbit-TD 時,設備就無法生產成功,生產進度會卡在 70%。

從現象來看,不確定是設備端沒有執行 D5 階段,還是服務端沒有處理成功處理 D5 階段。

二、排查過程

2.1、檢查代碼

檢查下設備端和服務端的代碼,有沒有對 name 這個字段的長度做一些限制。

結論:設備端和服務端并沒有對配置文件的字段長度做限制。

2.2、查看服務端日志

排查下服務端的日志,發現只有 D4 階段的業務日志打印,D5 階段的日志沒有。

初步結論:設備端沒有發送 D5 階段的數據包。

2.3、服務端抓包

思路:抓個包看下服務端有沒有收到 D5 階段的數據包。

在服務端通過 microsoft network monitor 抓包工具抓包,然后將抓包文件放到 wireshark 中排查。

下圖是設備端和服務端的 TCP 通信數據。

圖片圖片

可以看到設備向服務端發送了配置文件(D4階段),服務端發送了一個 ACK 響應。

在TCP(傳輸控制協議)通信中,當客戶端發送一條TCP消息給服務端時,服務端通常會發送一個ACK(確認)響應來表明它已經成功接收到了這條消息。這是基于TCP的可靠傳輸機制,確保數據能夠正確無誤地從發送方傳輸到接收方。

TCP使用序列號和確認號來實現可靠傳輸。發送方會為每個發送的字節分配一個序列號,接收方在收到數據后會發送一個ACK確認,確認號表示接收方期望接收的下一個字節的序列號。如果發送方在一定時間內沒有收到ACK確認,它會重新發送數據。(來自 AI)

初步結論:服務端發送了 D4 階段的 ACK 響應。設備端沒有發送 D5 階段的數據包

注意:這個結論在后面的排查過程中被推翻。

2.4、設備端抓包

思路:抓個包看下服務端有沒有發送 D5 階段的數據包。通過如下命令在設備端抓個包:

#tcpdump -i fetho host 192.168.1.253

抓到的數據包如下所示:

圖片圖片

通過上圖的抓包結果可以看到最后一個階段是 D4 和 D5,它倆其實是將數據包合并在一起發送的(這個是我后來才發現的,也是 1024 卡 Bug 產生的源頭)

也就是說 D4 和 D5 其實是一個階段,并沒有分開發。

然后設備端一直在等待服務端返回配置文件(P6 階段)。

初步結論:設備端執行了 D5 階段,服務端沒有執行 P6 階段,服務端有問題。

2.5、再查服務端的數據包

這就尷尬了,設備端明明執行了 D5 階段,但是服務端看起來沒有收到 D5 的數據包。

重新再看下最后一條數據包,報文內容如下圖所示:

圖片圖片

打開 D4 階段的數據報文,可以看到數據里面是包含有 D4 階段的配置文件內容以及D5階段的文件內容,當時我看到這個報文是懵的:

我看之前的接口文檔上寫的是 D4 和 D5 階段分開發送數據?怎么又合在一起發了?

原因:設備端將 D4和D5 的數據包連續寫到 socket 中的。

初步結論:服務端沒有正確處理 D4 和 D5 合體的數據包。

那怎么辦?只能在服務端多加點日志打印看看 D5 的數據包為什么沒有正確處理呢。

2.6、分析數據包

3.6.1 name=rabbit 時的報文(可正常生產)

每個階段發送一次報文都是按照這樣的格式進行發送:0x1234abcd, length, type, data。

  • 0x1234abcd : 起始數據
  • lenght: 業務數據長度
  • type: 請求類型
  • data:業務數據

當配置文件中的 name 字段為 rabbit 時,報文D4 和 D5 合體后的報文內容如下:

圖片圖片

說明:

  • 指定的業務數據的長度的值必須和后面的業務數據報文的長度相等(比如D4階段的配置文件的數據,D5 階段的密鑰數據的長度),否則會執行報錯,這也是導致 D5 階段未正確執行的根本原因。
  • D4 階段的配置文件的數據的長度為 0x00 0x00 0x03 0xF4 ,轉成十進制就是 1011。
  • 服務端在讀取 D4 階段報文時,先讀取 4 字節的配置文件數據長度length。然后讀取1 字節的請求類型type,最后再只讀取 1011 字節的數據data,如果業務數據的長度不等于 1011 就會報錯!
  • D4階段總共讀取了 1016 字節數據。然后執行 D4 階段的邏輯。
  • 接著讀取 D5 階段的 4字節的報文起始數據,然后是 4 字節的業務數據的長度(十六進制 0x00 0x00 0x01 0x00 轉成十進制是 256),這里總共讀取了 1024 字節的數據,剛剛達到了服務端讀取數據的最大長度1024,就會分成下一次讀取。如下圖所示,完整讀取了業務數據的長度。

圖片圖片

  • 然后讀取 1字節的請求類型數據,最后是 256 字節的密鑰數據。

3.6.2 name=rabbit-TD 時的報文(不能正常生產)

當配置文件中的 name 字段為 rabbit-TD 時,報文 D4 和 D5 合體后的報文內容如下:

圖片圖片

說明:

  • D4 階段的配置文件的數據的長度lenth為 0x00 0x00 0x03 0xF6 ,轉成十進制就是 1014。
  • 服務端在讀取 D4 階段報文時,先讀取 4 字節的配置文件數據長度,然后讀取1 字節的請求類型,最后再只讀取 1014 字節的數據,這里總共讀取了 1019 字節數據。然后執行 D4 階段的邏輯。這前面的步驟都沒有問題。
  • 接著讀取 D5 階段的 4字節的報文起始數據,已經讀取了 1023 字節的數據。
  • 再讀業務數據的長度 lenth,先讀取了 1字節,剛好達到服務端讀取數據的最大長度 1024,分成下一次讀取。問題就出現在這里,業務數據的長度被分開了!

日志的內容如下:

圖片圖片

  • 下一次讀取時,會直接讀 4 個字節的數據,作為讀取業務數據的長度,這里產生了錯位,因業務數據的長度length已經被讀取了一個字節,就只能往后讀取 4 個字節。
  • 如下圖所示:本來 D5 階段的業務數據的長度應該是 256 字節,但是因為錯位往后讀取了一位,把請求類型type的 1 個字節讀取了,最后就是 0x00,0x01,0x00,0x02,轉成十進制就是 65538,但是 D5 階段的業務數據只有 256 字節。這就導致傳的業務數據的長度和傳的業務數據報文長度不一致,所以服務端解析的 D5 的數據報文有問題。如下圖所示:

圖片圖片

日志內容如下:

圖片圖片

  • 結合上面的說明,來一張完整的報文數據圖:

圖片

2.7、真相大白

因讀取的數據報文達到1024 字節時,將業務數據的長度這四個字節做了切割,前面1024字節包含長度字段的第一個字節,長度字段的后面3個字節和請求類型的 1個字節組成了長度字段的 4 個字節,也就是錯位多讀取了后面一個字節的內容,最后算出來長度的值為 65538,不等于后面的業務數據的 256 字節,導致服務端的程序報錯,所以后續代碼就沒有執行了。

三、解決方案

3.1、方案一

原因就是前面讀取的 length 的 1 個字節沒有和后續讀取的 length 的三個字節合成長度字段 length 的值,那么只要保證第二次讀取長度字段length的時候把之前的 1 個字節拿到即可。

3.2、方案二

還有一個卡 Bug 的方案:將 D4 階段的配置文件增加一點內容,保證配置文件的內容 = 1014 + 1 =1015 即可,或大于等于 1014+5 = 1019,目的就是把長度字段完整的四個字節卡到 1024 后面,或者把起始數據的四個字節也卡在 1024 后面。

驗證了兩種情況:name 為 Rabbit-TDDDDDDD 和 Rabbit-TDD 是正常生產的。下面是 Rabbit-TDD 的情況,正好將 D4 的數據 + D5 的起始數據卡滿了 1024 字節。

如下圖所示:

  • 左邊是出 Rabbit-TD 的日志,系統報錯。1023-4-5=1024 或者這樣算 1014+5+5=1024。
  • 右邊是 Rabbit-TDD的日志,右邊正常執行。1024-4+4=1024 或者這樣算 1015+5+4=1024。

圖片圖片

再來給大家算一遍如何卡 Bug 的,系統能正常運行。

1024 字節 = 1015(配置文件報文內容) + 4(配置文件報文長度) + 1(請求類型) + 4(D5報文起始數據)。

1024 字節 = 1019(配置文件報文內容) + 4(配置文件報文長度) + 1(請求類型)= 1024 字節。

還有兩個疑問:

- D4 階段的起始數據為啥沒有算到 1024 字節中,這里我也沒弄懂 Socket的數據是怎么分開、合并發送的。

- 服務端為什么是讀取 1024 字節就會分成下次讀取?技術棧是 mina 框架,出問題的是 windows server 2003,而win10上沒重現這個問題。

責任編輯:武曉燕 來源: 悟空聊架構
相關推薦

2022-05-16 08:42:26

Pandasbug

2019-04-29 07:53:11

TCP數據包TCP網絡編程

2022-06-08 08:14:27

Dubbo數據包源代碼

2021-12-29 19:20:41

數據GitHub服務器

2014-06-10 09:16:53

數據包

2021-05-12 00:07:27

TCPIP協議

2014-07-09 09:43:59

2011-01-18 13:50:20

路由跟蹤tcptracerou

2022-05-27 07:03:04

JDK場景線程

2020-01-10 09:20:03

手機ISOJDK

2021-09-13 08:41:52

職場互聯網自閉

2025-02-13 07:00:00

Dubbo-goJava服務端

2020-07-07 14:49:17

中斷輪詢數據包

2009-09-14 17:08:02

WebFormView

2021-04-22 07:47:47

JavaJDKMYSQL

2022-11-30 09:18:51

JavaMyBatisMQ

2023-03-27 00:13:26

數據包Kubernete網絡

2017-10-10 15:14:23

BUGiOS 11蘋果

2015-01-23 10:04:56

bug程序員

2016-09-28 14:00:56

點贊
收藏

51CTO技術棧公眾號

国产综合18久久久久久| 久久偷看各类女兵18女厕嘘嘘| 日韩少妇内射免费播放| 日本一级在线观看| 久久精品国产精品青草| 欧美黄网免费在线观看| 毛片网站免费观看| 韩国三级成人在线| 一本一本久久a久久精品综合麻豆| 日韩精品无码一区二区三区| 国产精品主播一区二区| 在线观看的日韩av| 日韩一级裸体免费视频| 无码国产精品一区二区免费式直播| 中文字幕成在线观看| 中文字幕一区二区三区av| 国产一区二区三区四区hd| 国产精品第6页| 亚洲国产精品第一区二区三区 | 精品伦一区二区三区| 一区二区三区短视频| 亚洲精品你懂的| 精品视频导航| 国产成人精品亚洲精品色欲| 性久久久久久| 国外成人在线直播| 东方av正在进入| 精品国产一区二区三区av片| 亚洲激情小视频| 免费人成视频在线播放| 毛片免费看不卡网站| 亚洲曰韩产成在线| 熟女视频一区二区三区| 成年人在线视频免费观看| 91色porny在线视频| 成人午夜电影在线播放| 国产裸体永久免费无遮挡| 久久久久99| 韩国一区二区电影| 久久亚洲av午夜福利精品一区| 欧美www视频在线观看| 亚洲欧美制服丝袜| 性久久久久久久久久| 盗摄牛牛av影视一区二区| 日韩视频免费观看高清完整版| 日本中文字幕二区| 亚洲天堂1区| 在线观看亚洲精品视频| 欧美日韩大尺度| 狠狠操一区二区三区| 亚洲第一久久影院| 美脚丝袜脚交一区二区| 久草在线视频网站| 亚洲国产视频一区二区| 99久久免费观看| 免费一级片91| 精品一区精品二区| 精品视频站长推荐| 久久亚州av| 亚洲电影在线观看| 久久久久国产精品无码免费看| 视频免费一区二区| 国产精品视频一区二区三区综合| 亚洲天堂免费看| 欧美h视频在线观看| 欧美a免费在线| 亚洲视频一区二区免费在线观看 | 亚洲色大成网站www| av中文字幕在线不卡| 开心色怡人综合网站| 麻豆app在线观看| 国产精品婷婷午夜在线观看| 一区二区三区四区视频在线观看| 久久久久久久久免费视频| 亚洲精品视频观看| 可以看毛片的网址| 美女日韩欧美| 在线播放91灌醉迷j高跟美女| 亚洲精品成人在线播放| 在线日韩成人| 日韩av在线不卡| 99久久久无码国产精品衣服| 欧美国产一区二区三区激情无套| 欧美裸体男粗大视频在线观看| 久久久久久久久精| 亚洲欧美视频| 成人精品一区二区三区电影免费| 精品国产99久久久久久宅男i | 少妇精品一区二区三区| 精品国产一区二区三区四区| 久久久精品久久久久| 亚洲精品www久久久久久| 日日摸夜夜添夜夜添国产精品| 国产日韩精品一区二区| 丰满岳乱妇国产精品一区| 久久久久国产精品厨房| 黄色网zhan| 这里有精品可以观看| 欧美精品在线观看播放| 色婷婷精品久久二区二区密| 日产午夜精品一线二线三线| 欧美激情一级欧美精品| 中文字幕+乱码+中文乱码www| 精品一区二区三区免费视频| 精品欧美一区二区三区久久久| freemovies性欧美| 亚洲成人精品一区| 拔插拔插华人永久免费| 尤物tv在线精品| 久久亚洲影音av资源网| 久久久精品毛片| 懂色av中文一区二区三区| 亚洲精品第一区二区三区| free性m.freesex欧美| 69堂国产成人免费视频| 免费看91的网站| 国产日韩一区二区三区在线播放| 亚洲www在线| av资源网在线观看| 欧美日韩在线视频观看| 黄色av电影网站| 围产精品久久久久久久| 国产精品com| 四虎在线免费看| 一区二区三区在线视频观看 | 亚洲欧美国产日韩中文字幕| 欧美成人免费观看视频| 久久成人综合网| 日韩av电影免费在线| 三妻四妾完整版在线观看电视剧| 日韩精品一区在线| 永久免费看mv网站入口| 久久国产尿小便嘘嘘| 日本欧美色综合网站免费| 日本在线啊啊| 亚洲国产精品电影| 国产亚洲精品码| 国产精品亚洲综合一区在线观看| 一区二区日本| 婷婷精品久久久久久久久久不卡| 在线看国产精品| 国产精品51麻豆cm传媒 | 亚洲成avwww人| 九九九在线视频| 国产乱码精品一区二区三区av | 国产精品第十页| 3d动漫精品啪啪一区二区三区免费| 137大胆人体在线观看| 欧美视频在线一区二区三区 | 一区二区三区91| 久久无码人妻一区二区三区| 一二三区不卡| 99re在线视频观看| 成av人片在线观看www| 亚洲第一二三四五区| 日韩精品乱码久久久久久| eeuss影院一区二区三区| 青青草视频在线免费播放| 国产一区在线电影| 4438全国成人免费| 免费国产在线观看| 欧美综合一区二区| 登山的目的在线| 国产aⅴ综合色| 国产欧美日韩网站| 亚洲亚洲免费| 国产精品美女久久| 99在线播放| 亚洲成人av片| 国产第一页在线观看| 国产精品国产三级国产aⅴ原创| 不卡的在线视频| 亚洲一级网站| 欧洲高清一区二区| 国产精品视频首页| 51午夜精品视频| 自拍视频在线免费观看| 欧美电影影音先锋| 99视频在线看| 国产欧美日本一区视频| 一级日本黄色片| 国产精品一级| 自拍偷拍一区二区三区| 久久精品66| 国产精品久久一| 牛牛精品在线视频| 国产亚洲日本欧美韩国| 99久久国产热无码精品免费| 黄色一区二区在线观看| 制服丨自拍丨欧美丨动漫丨| 国产成人精品亚洲日本在线桃色| 哪个网站能看毛片| 五月婷婷亚洲| 欧美另类一区| 91综合久久爱com| 国产精品日韩欧美大师| 丁香花视频在线观看| 日韩在线中文视频| 四虎永久在线观看| 7777精品伊人久久久大香线蕉最新版| 日韩成人在线免费视频| 国产精品青草久久| www.免费av| 国产在线不卡一区| 日韩在线第三页| 国内精品久久久久久久影视麻豆 | 女女互磨互喷水高潮les呻吟| 国产一区二区三区在线观看精品 | 亚洲午夜在线播放| 亚洲v中文字幕| 中国毛片直接看| 久久久精品一品道一区| 亚洲乱妇老熟女爽到高潮的片| 美女脱光内衣内裤视频久久网站 | 麻豆专区一区二区三区四区五区| 日本福利视频一区| 亚洲欧美偷拍自拍| 水蜜桃亚洲精品| 日韩欧美在线精品| 国产传媒欧美日韩| 国产精品久久久久久久久久辛辛 | 国产h在线观看| 亚洲国产一区自拍| 亚洲成人精品女人久久久| 欧美日韩日日摸| 久久久久亚洲视频| 欧美日韩中文字幕在线视频| 久久精品视频8| 亚洲欧美福利一区二区| 老司机深夜福利网站| 中文字幕欧美激情| 永久免费av无码网站性色av| 99久久精品免费看| 欧美xxxxx精品| 成人精品免费视频| 911亚洲精选| 国产福利精品导航| 人妻激情偷乱视频一区二区三区| 精品在线播放免费| 午夜免费福利视频在线观看| 日韩精品一二三区| 熟妇人妻va精品中文字幕 | 日本午夜在线视频| 亚洲国产一区自拍| 深夜福利视频网站| 亚洲国产日韩欧美在线图片| 天天干天天操av| 日韩av在线一区二区| 天堂v在线观看| 亚洲欧美日韩天堂| 成人p站proumb入口| 亚洲欧美日韩精品久久奇米色影视| 天堂a√在线| 亚洲人成免费电影| av在线播放av| 免费不卡在线观看av| 婷婷色在线播放| 久久久久久久激情视频| 成年人黄色大片在线| 日韩美女在线观看| 全球最大av网站久久| 国产拍精品一二三| 久久国产精品美女| 97久久精品午夜一区二区| avtt综合网| 久久久99国产精品免费| 国产一区二区在线| 中文视频一区视频二区视频三区| 亚洲欧美综合久久久| 成人av在线播放观看| 99伊人成综合| 久久久精品三级| 国产一区二区三区四区五区入口 | 亚洲日本成人在线观看| 国产这里有精品| 黑人巨大精品欧美一区二区三区| 日本一本在线观看| 69久久夜色精品国产69蝌蚪网| 亚洲精品久久久久avwww潮水| 亚洲精品第一页| 91福利在线视频| 欧美精品久久久久| 欧美日韩免费看片| 91在线视频成人| 欧美巨大xxxx| 中文字幕中文字幕一区三区| 精品动漫3d一区二区三区免费| 能看的毛片网站| 国产一区二区三区四区五区入口| 国产熟女高潮一区二区三区 | 亚洲欧美在线第一页| 免费黄网站在线| 91成人精品网站| 国产高清精品二区| 欧美日韩综合久久| 欧美日韩 国产精品| 无人在线观看的免费高清视频| 国产麻豆91精品| 中文字幕第24页| 亚洲成a人片在线不卡一二三区| 无码人妻丰满熟妇区bbbbxxxx| 欧美一区二区精品在线| 欧美中文在线| 欧美成人免费一级人片100| 伊人久久国产| 国产精品久久精品国产| 久久视频在线| 精品免费国产一区二区| 国产成人亚洲综合a∨猫咪| 亚洲色图第四色| 欧美日韩亚洲网| 亚洲成人精品女人久久久| xxxxx成人.com| 成人美女黄网站| 国偷自产av一区二区三区小尤奈| 91精品国产91久久久久久密臀| 成年人免费大片| 91麻豆国产在线观看| 欧美日韩成人免费观看| 欧美日韩另类一区| 国产精品一级伦理| 88国产精品欧美一区二区三区| 日韩精品一区二区三区中文 | 欧美顶级少妇做爰| 春暖花开成人亚洲区| 国产91|九色| 精品久久对白| 久久久久久久久久久综合| 国内精品在线播放| 男人的午夜天堂| 欧美精品少妇一区二区三区| 国产女主播在线写真| 日本精品久久久久影院| 三级小说欧洲区亚洲区| 熟女少妇在线视频播放| av一区二区三区四区| 久久久久亚洲av成人片| 91精品国产高清一区二区三区| 免费看a在线观看| 91香蕉亚洲精品| 永久亚洲成a人片777777| 亚洲精品手机在线观看| 国产精品ⅴa有声小说| 色妞欧美日韩在线| 超碰这里只有精品| 亚洲成人av动漫| 久久国产精品色| 开心激情五月网| 欧美日韩成人综合| 久久77777| 91传媒视频免费| 亚洲视频碰碰| 日本少妇色视频| 色美美综合视频| 成人不用播放器| 国产视频观看一区| 综合久久综合| 无码成人精品区在线观看| 亚洲h在线观看| 天天综合天天色| 日本久久久久久久久久久| 神马久久一区二区三区| 亚洲福利精品视频| 亚洲欧洲成人自拍| www.国产精品视频| 91黄色8090| 精品精品99| 午夜激情视频网| 亚洲成a人片在线观看中文| 激情小视频在线| 国产主播在线一区| 黄色成人精品网站| 水蜜桃av无码| 欧美自拍丝袜亚洲| 在线观看小视频| 精品一区二区三区视频日产| 天堂影院一区二区| 视频这里只有精品| 亚洲精品福利在线| 成人精品三级| 成人免费在线网| 亚洲国产精品黑人久久久| 国内精品久久久久久久久久久 | 国产三级中文字幕| 成人综合婷婷国产精品久久蜜臀 | 精品99一区二区| 日本综合视频| 国产亚洲精品久久久久久久| 91一区一区三区| 国产精品系列视频| 欧美亚洲国产视频小说| 香蕉视频国产精品| brazzers精品成人一区| 日韩一区二区三区av| 欧美一区国产| 亚洲精品蜜桃久久久久久| 久久精品亚洲麻豆av一区二区 | 亚洲综合精品国产一区二区三区| 欧美国产中文字幕| 欧美xxxx中国|