记一次 u-boot tcp 传输速度慢问题
问题
之前移植过不死u-boot , 其实就是在u-boot 中实现了个小型 http 服务器实现刷机功能,HTTP 协议是基于TCP 协议的 , 而 u-boot 本身没有实现 TCP 协议栈,这里是基于 uip库 实现的 TCP 。代码一直以来工作正常,而近期使用 usb r8152 时发现个问题,使用 u-boot web 刷机时,传输文件特别慢。
原因
经过排查与调试最终发现是uipopt.h 中 UIP_RECEIVE_WINDOW 值设置不对引起的
#define UIP_RECEIVE_WINDOW 3000
改为:
#define UIP_RECEIVE_WINDOW (UIP_BUFSIZE+2)
/* The TCP and IP headers. */
typedef struct {
/* IP header. */
u8_t vhl,
tos,
len[2],
ipid[2],
ipoffset[2],
ttl,
proto;
u16_t ipchksum;
u16_t srcipaddr[2],
destipaddr[2];
/* TCP header. */
u16_t srcport,
destport;
u8_t seqno[4],
ackno[4],
tcpoffset,
flags,
wnd[2]; //----------实际作用于这个字段 , 即 TCP WINDOW
u16_t tcpchksum;
u8_t urgp[2];
u8_t optdata[4];
}
解决
#define UIP_RECEIVE_WINDOW 3000
改为:
#define UIP_RECEIVE_WINDOW (UIP_BUFSIZE+2)
思考
TCP WINDOW 的作用是什么?如何设置才合理?