LWIP的大文件下载数据错误

article/2025/9/10 19:50:37

前段时间在做stm32 web下载文件的功能,遇到了一个问题。使用不同的浏览器下载得到的文件数据有所差异。通过具体分析发现使用谷歌和迅雷下载得到的文件是正确的,而使用360,搜狗之类的浏览器得到的文件数据会丢失一个包的数据,而丢失的数据恰巧在浏览器弹出文件对话框选择保存路径的时候。

 

有了重现问题的方法就好办,打开wireshark抓包工具,重新操作一遍下载过程,wireshark设置过滤

tcp and ip.addr == 192.168.1.228 and tcp.port==80

只抓取tcp的数据,找到浏览器打开文件选择对话框前后的抓包显示。

浏览器发送红色箭头的包之后弹出文件选择对话框停止了。要了解wireshark显示的抓包数据,我们先来温习下tcp的过程。

 

三次握手

第一次

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

 

第二次

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

 

第三次

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

 

标志控制

URG:紧急标志

紧急(The urgent pointer) 标志有效。紧急标志置位,

ACK:确认标志

确认编号(Acknowledgement Number)栏有效。大多数情况下该标志

位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

PSH:推标志

该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。

RST:复位标志

复位标志有效。用于复位相应的TCP连接。

SYN:同步标志

同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

FIN:结束标志

带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

 

在LWIP中tcp_mss设置的是1460,http发送数据设置的是2*tcp_mss。而对比之前的数据浏览器发送一个ack,web服务器返回ack和一个psh,ack.  此时明显少了一个psh,ack的数据包。

 

进一步来看这些信息

ack=seq+len, 没毛病,这里说明tcp的传输是没有问题。  而另一个字段Win表示窗口大小,窗口表示的当前缓冲区还可以容纳多少bytes的数据。在图中Win=2755,明显不够容纳2*tcp_mss=2920的数据 。这说明了tcp协议的底层处理是没问题的(发多了发不出去) ,而是应用层问题。

 

 

找到http读写文件地方,发现读指针并没有判断当前实际发送数据大小或接收窗大小。大家在做此类似应用的注意了。

 

如果想要了解更多知识,可以关注公众号【DSP-Tech】.你也可以加我微信,和我一起共同成长学习吧。


http://chatgpt.dhexx.cn/article/01eMK56V.shtml

相关文章

用迅雷或者IDM下载下载百度网盘文件方法

百度网盘限速让大家在下载资料时很头疼,今天分享一个利用插件快速下载百度网盘里的资料。 连接网址: http://www.cnplugins.com/office/tampermonkey/download.html 参考网址: http://www.cnplugins.com/tool/baiduyun-tampermonkey.html…

Qt 之 模仿迅雷 根据Url获取文件信息——下

一、简述 在上篇 Qt 之 模仿迅雷 根据Url获取文件信息——上 文章中简单介绍了一下几个版本迅雷的界面变化,同时展示了这两天模仿迅雷新建任务窗口做的一个小例子。在这一篇中将讲解如何实现迅雷新建任务窗口。 首先简单看一下效果图。 二、代码之路 看代码之前需要看一下Q…

node 实现文件下载,web打开迅雷下载文件

node实现文件下载 方法一: const express require(express); const router express.Router(); const fs require(fs); const path require(path); const {errorMsg} require("../../util/apiUtils");router.get(/:fileName, async (req, res) >…

迅雷有linux版本吗,迅雷 - Linux Wiki

出自Linux Wiki 提示:此文已超过 7 年(2853 天)未更新,如发现内容过时或有误,欢迎改进:) 虽然迅雷至今仍未开发出Linux版本,不过借助 Wine 运行的迅雷已能实现其基本的功能。 迅雷离线 目前Linux下最佳使用迅雷方案就是迅雷离线配合Linux下的下载工具aria2 、wget,速度可达…

用迅雷打开php文件,迅雷下的php文件怎么打开啊?

simith666的回答: PHP文件是在服务器端执行的脚本文件,用不同文本编辑器打开即可。步骤如下: 1、首先找到php文件所在文件夹: 2、右键单击需要打开的php文件,弹出右键菜单中选择打开方式: 3、在打开的方式的…

核主成分分析方法(KPCA原理篇)

(1)方法的基本思想是:对样本进行非线性变换,在变换空间进行主成分分析来实现在原空间的非线性主成分分析; (2)算法步骤: ① 通过核函数计算矩阵,其元素为。其中和为原空…

主成分分析法PCA(一):算法原理

一:算法概述: 主成分分析法,principle component analysis,PCA。也称主分量分析,是一种大样本,多变量数据间内在关系的一种方法。这种方法利用降维的思想,通过向量变换的方法将众多线性相关指标…

主成分分析的基本原理

目录 什么是主成分分析? 主成分分析的步骤 根据什么选择主成分? 怎样解释主成分? 特征值、方差解释率及碎石图 载荷系数与共同度 什么是主成分分析? 主成分的概念由Karl Pearson在1901年提出的。他是考察多个 变量间相关性…

PCA主成分分析原理理解学习(源于b站某视频)

Principal Component Analysis 主成分分析 地址:https://www.bilibili.com/video/BV1E5411E71z?spm_id_from333.337.search-card.all.click 假设要保存二维的信息,由于降维考虑,期望只存储一个维度的信息(为了减少存储的信息量&a…

主成分分析(PCA)原理及过程

首先,感谢一下这篇文章的作者:主成分分析原理及过程 PCA原理及过程 在机器学习中,对于数据维度过多问题,提出了一种降维算法叫做PCA算法。具体的降维:例如评估一个国家的GDP水平,需要考量到人口、收入、人…

PCA主成分分析原理的三种角度的理解

主成分分析算是降维算法中的一个经典算法了。网上也有很多博客介绍了这个算法。这篇文章从三个不同的角度,对PCA方法做了详细的分析,不同的角度进行推导最后得到的也都是同一个结果,推导过程需要些数学基础,但总体是非常好理解的。…

主成分分析(PCA)原理总结

主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。一般我们提到降维最容易想到的算法就是PCA,下面我们就对PCA的原理做一个总结。 1. PCA…

PCA主成分分析原理及分析实践详细介绍

自己的博客在Github上&#xff0c;访问不多。这篇文章竟然被别人发了出来&#xff0c;还是贴到CSDN上&#xff0c;更方便检索吧。 原文&#xff1a;<http://blog.genesino.com/2016/10/PCA/> This is generated by R knitr, please check https://github.com/Tong-Chen/…

PCA(主成分分析)原理详解

PCA概念 PCA(Principal Component Analysis)&#xff0c;即主成分分析方法&#xff0c;是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上&#xff0c;这k维是全新的正交特征也被称为主成分&#xff0c;是在原有n维特征的基础上重新构造出来的k维特征。PC…

python主成分分析代码_PCA主成分分析 原理讲解 python代码实现

1. 用途&#xff1a; 通俗来说&#xff1a; 考察一个人的智力情况&#xff0c;就直接看数学成绩就行(存在&#xff1a;数学、语文、英语成绩) 。就是找出一个最主要的特征&#xff0c;然后进行分析。 数据压缩 &#xff08;Data Compression&#xff09; &#xff0c;将高维数…

主成分分析法原理与MATLAB实现

1&#xff1a;主成分分析原理&#xff1a; 主成分分析法是利用降维的思想&#xff0c;把多指标转化为少数几个综合指标&#xff08;即主成分&#xff09;&#xff0c;其中每个主成分都能够反映原始变量的大部分信息&#xff0c;且所含信息互不重复。这种方法在引进多方面变量的…

主成分分析(PCA)原理及应用

在进行统计学分析中往往面临着比较难以抉择的权衡。以农学研究为例&#xff0c;在实验设计时&#xff0c;考虑到研究结论更能反应作物真实状态下的农艺性状&#xff0c;研究人员会尽可能的纳入较多的指标&#xff0c;但是&#xff0c;随着而来的是铺天盖地的数据让人难以下手&a…

PCA主成分分析原理与基础知识

笔记的主要内容是 PCA&#xff08;主成分分析&#xff09; 原理和基本知识&#xff0c;相关数学原理和核心概念。 什么是PCA分析&#xff1f; 主成分分析(PCA, principal component analysis)是一种数学降维方法,利用正交变换把一系列可能线性相关的变量转换为一组线性不相关的…

【机器学习】五、主成分分析原理

主成分分析(Principal Component Analysis)&#xff0c;简称PCA&#xff0c;是机器学习中一种常用来进行数据降维操作的方法。PCA通过矩阵变换&#xff0c;将高维数据变换到低维。本文主要分享PCA的数学原理&#xff0c;帮助大家了解PCA降维的理论基础。码字不易&#xff0c;喜…

主成分分析原理详解

本博客前三节参考https://blog.csdn.net/program_developer/article/details/80632779 至于协方差矩阵的公式推导参考 http://blog.codinglabs.org/articles/pca-tutorial.html 1、背景 在许多领域的研究与应用中&#xff0c;通常需要对含有多个变量的数据进行观测&#xff0…