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图片等等
相关文章
相关标签/搜索