LwIP中除了定义了一个完整的TCP控制块之外,还定义了一个删减版的TCP控制块,叫tcp_pcb_listen, 用于描述处于监听状态的连接,因为分配完整的TCP控制块是比较消耗内存资源的,而TCP协议在连接之前, 是无法进行数据传输的,那么在监听的时候只需要把对方主机的相关信息得到,然后无缝切换到完整的TCP控制块中, 这样子就能节...
TCP协议的头部一共有20字节,左边的结构体与右边的框图示意图一一对应;src就是16位表本地端口号;dest是16位目标端口号;seqno是32位序号,用来重组TCP的分包(因为TCP不能在网络层进行分片,也就是IP协议不能分片,只能在传输层层进行分包);ackno是32位确认序号;hdrlen_rsvd_flags是16位的flag;wnd是16位窗口大小;...
pcb->mss = tcp_eff_send_mss(pcb->mss, &pcb->local_ip, &pcb->remote_ip); pcb->cwnd = LWIP_TCP_CALC_INITIAL_CWND(pcb->mss); //初始化拥塞窗口 LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_process (SENT): cwnd %"TCPWNDSIZE_F " ssthresh %"TCPWNDSIZE_F"\n", pcb->cwnd, pcb->ssthresh...
这部分不涉及内存裁剪相关的内容,介绍下RT_LWIP_TCP_SND_BUF RT_LWIP_TCP_WND这两个参数 RT_LWIP_TCP_SND_BUF:TCP发送缓冲区大小。首先这个缓冲区不会分配实际的内存。 RT_LWIP_TCP_WND:TCP发送窗口大小,当网络性能较弱时,应该适当调小发送窗口大小。 ifconfig参数的作用 RT_LWIP_UDP 使能UDP功能 RT_LWIP_...
TCP_MSS TCP协议报文最大长度。 TCP_WND TCP接收窗口大小。 LWIP_SOCKET 因为现在是无操作系统,就不使能NETCONN API和Socket API编程。 LWIP_NETCONN 因为现在是无操作系统,就不使能NETCONN API和Socket API编程。 cc.h文件 cc.h文件定义大小端模式,输出调试的宏等 #ifndef __CC_H__ #define __CC_H__ ...
MEMP_NUM_TCP_SEG: 至少跟上面一样大 MEMP_NUM_PBUF(16) --->32 TCP_WND 2048 接收窗口,接收多少个数据包的问题。 今天通过wireshark抓包发现,1.15 端发送给了 1.111端后面多于MSS的数据报文,而且发送端一直发送MSS长度的报文, 可以得知应该是接收端的没有应答正确。前面提到的tcp_recevd调用的是tcp_ack函数...
RT_LWIP_TCP_WNDtcp 接收窗口,这个应该是申请内存大小。可以适当减小。不定义就是 1460 x 2 字节 RT_LWIP_TCP_SND_BUFtcp 发送缓存,同上,不定义就是 1460 x 2 字节 LWIP_NO_TX_THREAD和LWIP_NO_RX_THREADeth 线程,发送一个,接收一个。以下是几个相关宏定义,如果不定义堆栈大小,默认使用 1024 #define RT...
TCP_WND:TCP接收窗口大小 配置正确性检查 LwIP中的很多配置并不是孤立的,在lwipopts.h和opt.h的某些...
RT_LWIP_TCP_WNDtcp 接收窗口,这个应该是申请内存大小。可以适当减小。不定义就是 1460 x 2 字节 RT_LWIP_TCP_SND_BUFtcp 发送缓存,同上,不定义就是 1460 x 2 字节 LWIP_NO_TX_THREAD和LWIP_NO_RX_THREADeth 线程,发送一个,接收一个。以下是几个相关宏定义,如果不定义堆栈大小,默认使用 1024 ...
修改tcp_options 设置,将 tcp_snd_buf,tcp_wnd 参数设大,这样同样会提高 TCP 传输效率。如下图所示。 修改temac_adapter_options 设置,将 n_rx_descriptors 和 n_tx_descriptors 参数设大。这样可以提高 zynq 内部 emac dma 的数据迁移效率,同样能提高 TCP 传输效率。如下图所示。