Malformed Packet PNG排查分析

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

 

  三、這是Nginx處抓報文信息:HTTP和Porttable Network Graphics服務器

 

 Malformed Packet PNG網絡

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

 

 


 

 六、PNG國際標準編碼

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

 

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

已知塊,其中必須包括此國際標準中定義的全部關鍵塊(IHDRPLTEIDATIEND
PNG簽名不匹配,CRC不匹配或意外的流結束,都表示數據流已損壞,可能被視爲致命錯誤。
簡單一句話:「PNG數據流校驗時,須要PNG信令,關鍵塊(IHDRPLTEIDATIEND)」
七、那麼形成機頂盒發送RST錯誤緣由,就是PNG收到全部PNG數據流後,進行CRC校驗時,並未收到IEND結束塊,請求圖片格式收到的格式不匹配,導致應用程序發送異常錯誤信息RST。

 

 

八、解決方法:將服務器的圖片格式改爲請求圖片格式就行,好比:請求PNG就就響應PNG圖片,請求JPEG就響應JEPG圖片等等
相關文章
相關標籤/搜索