Malformed Packet PNG排查分析


1、問題描述:
接到開發工程說,圖片時而好,時而壞。懷疑是網絡三角傳輸模式問題,或者是Nginx配置問題。
2、環境拓撲圖:

 

  3、這是Nginx處抓報文信息:HTTP和Porttable Network Graphics

 

 Malformed Packet PNG

百度搜索翻譯軟件翻譯的意思:“格式錯誤的數據包PNG”
4、抓包反映出來的問題
機頂盒端請求jpeg圖片,服務端收到jpeg請求后,響應png圖片,經由Nginx將圖片發送到客戶端,完成屏幕圖片加載。當PNG圖片傳輸完成后,Nginx的TCP發送TCP的Flag:Fin ack結束TCP連接,客戶端直接SYN:RST,直接報數據包格式錯誤。然后丟棄數據包,再次與Nginx建立新TCP連接,獲取圖片數據。。。。。。。導致電視屏幕圖片加載失敗。
5、問題分析:
PNG圖片編碼和解碼過程:下圖

 

 


 

 6、PNG國際標准

PNG簽名
PNG數據流的前八個字節始終包含以下(十進制)值:
137 80 78 71 13 10 26 10
這個簽名表示該數據流的剩余部分包含一個PNG圖像,由一系列與開始區塊的IHDR塊,並結束IEND塊。
 
根據組塊中前面的字節計算的四字節CRC(循環冗余碼),包括組塊類型字段和組塊數據字段,但包括長度字段。CRC可用於檢查數據是否損壞。CRC始終存在,即使對於不包含數據的塊也是如此。

 

       有效的PNG數據流應以PNG簽名開頭,緊隨其后的是IHDR塊,然后是一個或多個IDAT塊,並應以IEND 塊結束。PNG數據流中僅允許一個IHDR塊和一個IEND

已知塊,其中必須包括此國際標准中定義的所有關鍵塊(IHDRPLTEIDATIEND
PNG簽名不匹配,CRC不匹配或意外的流結束,都表示數據流已損壞,可能被視為致命錯誤。
簡單一句話:“PNG數據流校驗時,需要PNG信令,關鍵塊(IHDRPLTEIDATIEND)”
7、那么造成機頂盒發送RST錯誤原因,就是PNG收到所有PNG數據流后,進行CRC校驗時,並未收到IEND結束塊,請求圖片格式收到的格式不匹配,致使應用程序發送異常錯誤信息RST。

 

 

8、解決方法:將服務器的圖片格式改成請求圖片格式就行,比如:請求PNG就就響應PNG圖片,請求JPEG就響應JEPG圖片等等

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM