阴世幽泉 发表于 2021-1-27 17:50:20

LWIP,tcp数据包发送结束后悔多发6个字节0数据

本帖最后由 阴世幽泉 于 2021-1-27 17:53 编辑

   使用lwip碰到这样一个情况:f429平台,使用freertos+lwip,netconn_write发送数据到服务器,服务器收到数据返回应答数据包,设备端能正常接收,可是客户端会马上再发送6个字节00数据,而我程序上并没有发送这样的数据包,另外我查看了并没有启用keepalive,请教下有谁知道这个问题大概是哪里引起的,还有就是如果启用keepalive功能,lwip是发送空数据包还是其它数据?

抓包数据如下:
08 62 66 82 0D AD 02 00 00 33 00 44 08 00 45 00 00 28 08 E1 00 00 FF 06 31 5E C0 A8 00 16 C0 A8 00 2A C0 07 04 CE 00 04 6E 88 B0 1F 6D EF 50 10 06 F0 D5 E2 00 00 00 00 00 00 00 00

eric2013 发表于 2021-1-28 00:03:37

不太清楚你这个怎么回事,不行移植我这个搞下

LwIP网络教程开始更新,使用MDK的RTE环境开发,配套RTX5和FreeRTOS两个版本,更新至第7章(2020-05-03)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=95874&fromuid=58
(出处: 硬汉嵌入式论坛)

阴世幽泉 发表于 2021-1-28 00:10:43

eric2013 发表于 2021-1-28 00:03
不太清楚你这个怎么回事,不行移植我这个搞下

LwIP网络教程开始更新,使用MDK的RTE环境开发,配套RTX5和 ...

我这个工程没有直接使用硬汉哥的rte环境,而是用了cubemx生成,不过lwip我替换成最新版本,现在是没有头绪可能出现的问题点

regbbs 发表于 2021-1-28 09:12:10

TCPIP数据包有长度要求,不足的话会补足。

eric2013 发表于 2021-1-28 09:41:42

regbbs 发表于 2021-1-28 09:12
TCPIP数据包有长度要求,不足的话会补足。

根据楼主的描述是后面再发的0,感觉不合理。

阴世幽泉 发表于 2021-1-28 14:00:35

regbbs 发表于 2021-1-28 09:12
TCPIP数据包有长度要求,不足的话会补足。

一包数据已经收发完整了,然后不知道怎么就再发了6字节0的数据,我建立了几个connect,都有这个情况,所以怀疑应该是哪里不小心开启了,但是就是不知道哪里

阴世幽泉 发表于 2021-1-28 14:07:29

eric2013 发表于 2021-1-28 09:41
根据楼主的描述是后面再发的0,感觉不合理。

硬汉哥,这个是我的lwip配置文件,您看下是不是这里有隐患

#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__

#include "cmsis_os.h"

#define SYS_LIGHTWEIGHT_PROT    1                /* 平台锁,保护关键区域内缓存的分配与释放 */       
#define NO_SYS                  0                /* NO_SYS==1:不使用操作系统 */
#define NO_SYS_NO_TIMERS      0
#define MEM_ALIGNMENT         4                /* 使用4字节对齐模式 */

#define MEM_SIZE                (30*1024)        /* heap内存的大小,如果在应用中有大量数据发送的话这个值最好设置大一点                */
#define MEMP_NUM_PBUF         50                        /* memp结构的pbuf数量,如果应用从ROM或者静态存储区发送大量数据时,这个值应该设置大一点 */
#define MEMP_NUM_UDP_PCB      6                        /* UDP协议控制块(PCB)数量.每个活动的UDP"连接"需要一个PCB. */
#define MEMP_NUM_TCP_PCB      10                        /* 同时建立激活的TCP数量 */
#define MEMP_NUM_TCP_PCB_LISTEN 6                        /* 能够监听的TCP连接数量 */
#define MEMP_NUM_TCP_SEG      12                        /* 最多同时在队列中的TCP段数量 */
#define MEMP_NUM_SYS_TIMEOUT    10                        /* 能够同时激活的timeout个数 */


#define PBUF_POOL_SIZE          16                        /* pbuf内存池个数 */
#define PBUF_POOL_BUFSIZE       512                        /* 每个pbuf内存池大小 */
//#define PBUF_POOL_BUFSIZE       LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_ENCAPSULATION_HLEN+PBUF_LINK_HLEN)


#define LWIP_TCP                1                        /* 为1是使用TCP */
#define TCP_TTL               255                        /* 生存时间 */

#define TCP_QUEUE_OOSEQ         0                        /* 当TCP的数据段超出队列时的控制位,当设备的内存过小的时候此项应为0 */

#define TCP_MSS               (1500 - 40)          /* 最大TCP分段 TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */
#define TCP_SND_BUF             (4*TCP_MSS)        /* TCP发送缓冲区大小(bytes) */
#define TCP_SND_QUEUELEN      (2* TCP_SND_BUF/TCP_MSS)                /* TCP发送缓冲区大小(pbuf).这个值最小为(2 * TCP_SND_BUF/TCP_MSS) */
#define TCP_WND               (2*TCP_MSS)                /* TCP发送窗口 */


#define LWIP_ICMP                     1                /* 使用ICMP协议 */
#define LWIP_DHCP               1                                /* 当使用DHCP时此位应该为1 */
#define LWIP_UDP                1                                /* 使用UDP服务 */
#define UDP_TTL               255                                /* UDP数据包生存时间 */

#define LWIP_STATS 0                                                        /**/
#define LWIP_PROVIDE_ERRNO 1                                        /**/

#define LWIP_NETIF_LINK_CALLBACK      1

#define CHECKSUM_BY_HARDWARE /* 定义CHECKSUM_BY_HARDWARE,使用硬件帧校验,STM32F746允许通过硬件识别和计算IP,UDP和ICMP的帧校验和 */


#ifdef CHECKSUM_BY_HARDWARE
/* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*//* 硬件生成IP数据包的帧校验和 */
#define CHECKSUM_GEN_IP               0
/* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP                0
/* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP                0
/* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
#define CHECKSUM_CHECK_IP               0
/* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP            0
/* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP            0
/* CHECKSUM_CHECK_ICMP==0: Check checksums by hardware for incoming ICMP packets.*/
#define CHECKSUM_GEN_ICMP               0
#else
/* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
#define CHECKSUM_GEN_IP               1
/* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP                1
/* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP                1
/* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
#define CHECKSUM_CHECK_IP               1
/* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP            1
/* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP            1
/* CHECKSUM_CHECK_ICMP==1: Check checksums by hardware for incoming ICMP packets.*/
#define CHECKSUM_GEN_ICMP               1
#endif


#define LWIP_NETCONN                  1/* LWIP_NETCONN==1:使能NETCON函数(要求使用api_lib.c) */

#define LWIP_SOCKET                     1/*LWIP_SOCKET==1:使能Socket API(要求使用sockets.c)*/
//#define LWIP_COMPAT_MUTEX               0 /* 表示是否用信号量来替代互斥信号量 */
#define LWIP_SO_RCVTIMEO                1 /*通过定义LWIP_SO_RCVTIMEO使能netconn结构体中recv_timeout,使用recv_timeout可以避免阻塞线程*/
//#define LWIP_SO_SNDTIMEO                1


#define TCPIP_THREAD_NAME               "tcpip_thread"
#define TCPIP_THREAD_STACKSIZE          1024
#define TCPIP_THREAD_PRIO               osPriorityLow3
#define TCPIP_MBOX_SIZE               10
#define SLIPIF_THREAD_NAME            "slipif_loop"
#define SLIPIF_THREAD_STACKSIZE         1024
#define SLIPIF_THREAD_PRIO            osPriorityNormal
#define DEFAULT_THREAD_NAME             "lwIP"
#define DEFAULT_THREAD_STACKSIZE      1024
#define DEFAULT_THREAD_PRIO             osPriorityNormal
#define DEFAULT_RAW_RECVMBOX_SIZE       10
#define DEFAULT_UDP_RECVMBOX_SIZE       10
#define DEFAULT_TCP_RECVMBOX_SIZE       10
#define DEFAULT_ACCEPTMBOX_SIZE         10


//#define LWIP_DEBUG                      1
#define ICMP_DEBUG                      LWIP_DBG_OFF //开启/关闭ICMPdebug

#endif /* __LWIPOPTS_H__ */


regbbs 发表于 2021-1-28 17:04:43

那就跟踪下发送的流程,尤其是移植文件的发送部分。lwip好些年没看了。

regbbs 发表于 2021-1-28 17:14:39

检查发送的时候pbuf是一个就包含了所有的数据还是被分成了两个,还有就是txdma的描述符,看看发送的数据包各部分数据是不是正常。

eric2013 发表于 2021-1-29 08:11:42

阴世幽泉 发表于 2021-1-28 14:07
硬汉哥,这个是我的lwip配置文件,您看下是不是这里有隐患

#ifndef __LWIPOPTS_H__

这个是我的配置:
/*
* Copyright (c) 2019 Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#ifndef LWIP_LWIPOPTS_H
#define LWIP_LWIPOPTS_H

/* Options managed by RTE */
#include "lwipopts_rte.h"

/* See "lwip/opt.h" for all available configuration options */

/*
   ------------------------------------
   -------------- NO SYS --------------
   ------------------------------------
#define NO_SYS               managed by RTE
#define LWIP_TIMERS          managed by RTE
#define SYS_LIGHTWEIGHT_PROT managed by RTE
*/

/*
   ------------------------------------
   ---------- Memory options ----------
   ------------------------------------
*/
#define MEM_LIBC_MALLOC               0
#define MEMP_MEM_MALLOC               1
#define MEMP_MEM_INIT                   0
#define MEM_ALIGNMENT                   4
#define MEM_SIZE                        (36*1024)
#define MEMP_OVERFLOW_CHECK             0
#define MEMP_SANITY_CHECK               0
#define MEM_OVERFLOW_CHECK            0
#define MEM_SANITY_CHECK                0

/* ------------------------------------------------
   ---------- Internal Memory Pool Sizes ----------
   ------------------------------------------------
*/
#define MEMP_NUM_PBUF                   10
#define MEMP_NUM_RAW_PCB                4
#define MEMP_NUM_UDP_PCB                6
#define MEMP_NUM_TCP_PCB                10
#define MEMP_NUM_TCP_PCB_LISTEN         6
#define MEMP_NUM_TCP_SEG                12
#define MEMP_NUM_REASSDATA            16
#define MEMP_NUM_FRAG_PBUF            15
#define MEMP_NUM_ARP_QUEUE            10
#define MEMP_NUM_IGMP_GROUP             8
#define MEMP_NUM_NETBUF               2
#define MEMP_NUM_NETCONN                4
#define MEMP_NUM_SELECT_CB            4
#define MEMP_NUM_TCPIP_MSG_API          8
#define MEMP_NUM_TCPIP_MSG_INPKT      8
#define MEMP_NUM_NETDB                  1
#define MEMP_NUM_LOCALHOSTLIST          1
#define PBUF_POOL_SIZE                  16

/*
   ---------------------------------
   ---------- ARP options ----------
   ---------------------------------
#define LWIP_ETHERNET      managed by RTE
*/
#define LWIP_ARP                        1
#define ARP_TABLE_SIZE                  10
#define ETHARP_SUPPORT_VLAN             0
#define ETH_PAD_SIZE                  2
#define ETHARP_SUPPORT_STATIC_ENTRIES   0

/*
   --------------------------------
   ---------- IP options ----------
   --------------------------------
#define LWIP_IPV4          managed by RTE
*/
#define IP_FORWARD                      0
#define IP_REASSEMBLY                   1
#define IP_FRAG                         1
#define IP_OPTIONS_ALLOWED            1
#define IP_REASS_MAX_PBUFS            10
#define IP_DEFAULT_TTL                  128
#define IP_SOF_BROADCAST                1
#define IP_SOF_BROADCAST_RECV         1

/*
   ----------------------------------
   ---------- ICMP options ----------
   ----------------------------------
*/
#define LWIP_ICMP                     1

/*
   ---------------------------------
   ---------- RAW options ----------
   ---------------------------------
*/
#define LWIP_RAW                        1

/*
   ----------------------------------
   ---------- DHCP options ----------
   ----------------------------------
*/
#define LWIP_DHCP                     0
#define LWIP_DHCP_CHECK_LINK_UP         0
#define LWIP_DHCP_BOOTP_FILE            0
#define LWIP_DHCP_GET_NTP_SRV         0
#define LWIP_DHCP_MAX_NTP_SERVERS       0

/*
   ------------------------------------
   ---------- AUTOIP options ----------
   ------------------------------------
*/
#define LWIP_AUTOIP                     0
#define LWIP_DHCP_AUTOIP_COOP         0
#define LWIP_DHCP_AUTOIP_COOP_TRIES   9

/*
   ----------------------------------
   ---------- IGMP options ----------
   ----------------------------------
*/
#define LWIP_IGMP                     1

/*
   ----------------------------------
   ---------- DNS options -----------
   ----------------------------------
*/
#define LWIP_DNS                        0
#define DNS_TABLE_SIZE                  4
#define DNS_MAX_NAME_LENGTH             256

/*
   ---------------------------------
   ---------- UDP options ----------
   ---------------------------------
*/
#define LWIP_UDP                        1
#define LWIP_UDPLITE                  0

/*
   ---------------------------------
   ---------- TCP options ----------
   ---------------------------------
*/
#define LWIP_TCP                        1
#define TCP_QUEUE_OOSEQ               0
#define LWIP_TCP_SACK_OUT               0
#define LWIP_TCP_MAX_SACK_NUM         4
#define TCP_MSS                         1460
#define TCP_OOSEQ_MAX_BYTES             0
#define TCP_OOSEQ_MAX_PBUFS             0
#define TCP_LISTEN_BACKLOG            1
#define TCP_DEFAULT_LISTEN_BACKLOG      0xff
#define LWIP_EVENT_API                  0
#define LWIP_CALLBACK_API               1
#define LWIP_WND_SCALE                  0
#define TCP_RCV_SCALE                   0
#define LWIP_TCP_PCB_NUM_EXT_ARGS       0
#define LWIP_ALTCP                      0
#define LWIP_ALTCP_TLS                  0

#define TCP_WND                         (6 * TCP_MSS)
#define TCP_SND_BUF                     (6 * TCP_MSS)

/*TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */
#define TCP_SND_QUEUELEN      (2* TCP_SND_BUF/TCP_MSS)

/*
   ----------------------------------
   ---------- Pbuf options ----------
   ----------------------------------
*/
#define PBUF_LINK_ENCAPSULATION_HLEN    0

/*
   ------------------------------------------------
   ---------- Network Interfaces options ----------
   ------------------------------------------------
*/
#define LWIP_SINGLE_NETIF               0
#define LWIP_NETIF_HOSTNAME             0
#define LWIP_NETIF_API                  0
#define LWIP_NETIF_STATUS_CALLBACK      1
#define LWIP_NETIF_EXT_STATUS_CALLBACK0
#define LWIP_NETIF_LINK_CALLBACK      1
#define LWIP_NETIF_REMOVE_CALLBACK      0
#define LWIP_NETIF_HWADDRHINT         1

/*
   ------------------------------------
   ---------- LOOPIF options ----------
   ------------------------------------
*/
#define LWIP_HAVE_LOOPIF                0
#define LWIP_LOOPIF_MULTICAST         0
#define LWIP_NETIF_LOOPBACK             0
#define LWIP_LOOPBACK_MAX_PBUFS         0

/*
   ------------------------------------
   ---------- Thread options ----------
   ------------------------------------
*/
#define TCPIP_THREAD_NAME               "tcpip_thread"
#define TCPIP_THREAD_STACKSIZE          1024
#define TCPIP_THREAD_PRIO               osPriorityNormal2
#define TCPIP_MBOX_SIZE               10
#define SLIPIF_THREAD_NAME            "slipif_loop"
#define SLIPIF_THREAD_STACKSIZE         1024
#define SLIPIF_THREAD_PRIO            osPriorityNormal2
#define DEFAULT_THREAD_NAME             "lwIP"
#define DEFAULT_THREAD_STACKSIZE      1024
#define DEFAULT_THREAD_PRIO             osPriorityNormal2
#define DEFAULT_RAW_RECVMBOX_SIZE       10
#define DEFAULT_UDP_RECVMBOX_SIZE       10
#define DEFAULT_TCP_RECVMBOX_SIZE       10
#define DEFAULT_ACCEPTMBOX_SIZE         10

/*
   ----------------------------------------------
   ---------- Sequential layer options ----------
   ----------------------------------------------
*/
#define LWIP_NETCONN                  1
#define LWIP_TCPIP_TIMEOUT            0
#define LWIP_NETCONN_SEM_PER_THREAD   0
#define LWIP_NETCONN_FULLDUPLEX         0

/*
   ------------------------------------
   ---------- Socket options ----------
   ------------------------------------
*/
#define LWIP_SOCKET                     0
#define LWIP_COMPAT_SOCKETS             1
#define LWIP_POSIX_SOCKETS_IO_NAMES   1
#define LWIP_TCP_KEEPALIVE            1
#define LWIP_SO_SNDTIMEO                0
#define LWIP_SO_RCVTIMEO                0
#define LWIP_SO_SNDRCVTIMEO_NONSTANDARD 0
#define LWIP_SO_RCVBUF                  0
#define LWIP_SO_LINGER                  0
#define SO_REUSE                        0
#define SO_REUSE_RXTOALL                0
#define LWIP_SOCKET_SELECT            1
#define LWIP_SOCKET_POLL                1

/*
   ----------------------------------------
   ---------- Statistics options ----------
   ----------------------------------------
*/
#define LWIP_STATS                      0

/*
   ---------------------------------------
   ---------- IPv6 options ---------------
   ---------------------------------------
#define LWIP_IPV6         managed by RTE
*/
#define LWIP_IPV6_FORWARD               0
#define LWIP_IPV6_FRAG                  1
#define LWIP_IPV6_REASS               1
#define LWIP_IPV6_AUTOCONFIG            1
#define LWIP_ICMP6                      1
#define LWIP_IPV6_MLD                   0
#define MEMP_NUM_MLD6_GROUP             4
#define LWIP_ND6_NUM_NEIGHBORS          10
#define LWIP_ND6_NUM_DESTINATIONS       10
#define LWIP_ND6_NUM_PREFIXES         5
#define LWIP_ND6_NUM_ROUTERS            3
#define LWIP_ND6_ALLOW_RA_UPDATES       1
#define LWIP_ND6_TCP_REACHABILITY_HINTS 1
#define LWIP_IPV6_DHCP6               0
#define LWIP_IPV6_DHCP6_STATEFUL      0
#define LWIP_IPV6_DHCP6_STATELESS       1
#define LWIP_DHCP6_GET_NTP_SRV          0
#define LWIP_DHCP6_MAX_NTP_SERVERS      1


/*
   --------------------------------------
   ---------- Checksum options ----------
   --------------------------------------
*/

/*
The STM32H7xx allows computing and verifying the IP, UDP, TCP and ICMP checksums by hardware:
- To use this feature let the following define uncommented.
- To disable it and process by CPU comment thethe checksum.
*/
#define CHECKSUM_BY_HARDWARE


#ifdef CHECKSUM_BY_HARDWARE
/* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
#define CHECKSUM_GEN_IP               0
/* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP                0
/* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP                0
/* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
#define CHECKSUM_CHECK_IP               0
/* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP            0
/* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP            0
/* CHECKSUM_GEN_ICMP==1: Check checksums by hardware for outgoing ICMP packets.*/
/* Hardware TCP/UDP checksum insertion not supported when packet is an IPv4 fragment*/
#define CHECKSUM_GEN_ICMP               1
/* CHECKSUM_CHECK_ICMP==0: Check checksums by hardware for incoming ICMP packets.*/
#define CHECKSUM_CHECK_ICMP             0
#else
/* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
#define CHECKSUM_GEN_IP               1
/* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP                1
/* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP                1
/* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
#define CHECKSUM_CHECK_IP               1
/* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP            1
/* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP            1
/* CHECKSUM_GEN_ICMP==1: Check checksums by hardware for outgoing ICMP packets.*/
#define CHECKSUM_GEN_ICMP               1
/* CHECKSUM_CHECK_ICMP==1: Check checksums by hardware for incoming ICMP packets.*/
#define CHECKSUM_CHECK_ICMP             1
#endif


/*
   --------------------------------------
   ---------- IP ------------------------
   --------------------------------------
*/
/* Static IP address */
#define IP_ADDR0                  192
#define IP_ADDR1                  168
#define IP_ADDR2                  0
#define IP_ADDR3                  210
   
/* NET mask*/
#define NETMASK_ADDR0               255
#define NETMASK_ADDR1               255
#define NETMASK_ADDR2               255
#define NETMASK_ADDR3               0

/* Gateway address */
#define GW_ADDR0                  192
#define GW_ADDR1                  168
#define GW_ADDR2                  0
#define GW_ADDR3                  1


#endif /* LWIP_LWIPOPTS_H */



阴世幽泉 发表于 2021-1-30 11:47:49

regbbs 发表于 2021-1-28 17:14
检查发送的时候pbuf是一个就包含了所有的数据还是被分成了两个,还有就是txdma的描述符,看看发送的数据包 ...

嗯,只能这样逐步查看了

阴世幽泉 发表于 2021-4-21 20:36:08

eric2013 发表于 2021-1-29 08:11
这个是我的配置:

最近再研究了这个数据包发现,在ip层首部那边数据包长度一项,大小是40,这个长度正好是ip和tcp头部总和,也就是说tcp数据域是空的,多出来的6个0是以太网发送时发现小于最少46字节以太网帧,强制增加的,所以这个数据包不是应用层发送出去的,是tcp层发出来的,目前还没搞清楚为何会发这样的数据包,究竟作用是什么,不知道是不是和窗口大小查询有关

阴世幽泉 发表于 2021-4-21 20:49:14

regbbs 发表于 2021-1-28 09:12
TCPIP数据包有长度要求,不足的话会补足。

确实是为了满足最小数据包增加的6个字节,tcp数据就是空数据,那这种数据包是什么作用,哪里可以控制这种包发送
页: [1]
查看完整版本: LWIP,tcp数据包发送结束后悔多发6个字节0数据