硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4441|回复: 12
收起左侧

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

[复制链接]

2

主题

28

回帖

34

积分

新手上路

积分
34
发表于 2021-1-27 17:50:20 | 显示全部楼层 |阅读模式
本帖最后由 阴世幽泉 于 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
微信截图_20210127174725.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106739
QQ
发表于 2021-1-28 00:03:37 | 显示全部楼层
不太清楚你这个怎么回事,不行移植我这个搞下

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

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2021-1-28 00:10:43 | 显示全部楼层
eric2013 发表于 2021-1-28 00:03
不太清楚你这个怎么回事,不行移植我这个搞下

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

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

使用道具 举报

0

主题

215

回帖

215

积分

高级会员

积分
215
发表于 2021-1-28 09:12:10 | 显示全部楼层
TCPIP数据包有长度要求,不足的话会补足。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106739
QQ
发表于 2021-1-28 09:41:42 | 显示全部楼层
regbbs 发表于 2021-1-28 09:12
TCPIP数据包有长度要求,不足的话会补足。

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

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2021-1-28 14:00:35 | 显示全部楼层
regbbs 发表于 2021-1-28 09:12
TCPIP数据包有长度要求,不足的话会补足。

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

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 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__ */


回复

使用道具 举报

0

主题

215

回帖

215

积分

高级会员

积分
215
发表于 2021-1-28 17:04:43 | 显示全部楼层
那就跟踪下发送的流程,尤其是移植文件的发送部分。lwip好些年没看了。
回复

使用道具 举报

0

主题

215

回帖

215

积分

高级会员

积分
215
发表于 2021-1-28 17:14:39 | 显示全部楼层
检查发送的时候pbuf是一个就包含了所有的数据还是被分成了两个,还有就是txdma的描述符,看看发送的数据包各部分数据是不是正常。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106739
QQ
发表于 2021-1-29 08:11:42 | 显示全部楼层
阴世幽泉 发表于 2021-1-28 14:07
硬汉哥,这个是我的lwip配置文件,您看下是不是这里有隐患

#ifndef __LWIPOPTS_H__

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

  18. #ifndef LWIP_LWIPOPTS_H
  19. #define LWIP_LWIPOPTS_H

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

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

  23. /*
  24.    ------------------------------------
  25.    -------------- NO SYS --------------
  26.    ------------------------------------
  27. #define NO_SYS               managed by RTE
  28. #define LWIP_TIMERS          managed by RTE
  29. #define SYS_LIGHTWEIGHT_PROT managed by RTE
  30. */

  31. /*
  32.    ------------------------------------
  33.    ---------- Memory options ----------
  34.    ------------------------------------
  35. */
  36. #define MEM_LIBC_MALLOC                 0
  37. #define MEMP_MEM_MALLOC                 1
  38. #define MEMP_MEM_INIT                   0
  39. #define MEM_ALIGNMENT                   4
  40. #define MEM_SIZE                        (36*1024)
  41. #define MEMP_OVERFLOW_CHECK             0
  42. #define MEMP_SANITY_CHECK               0
  43. #define MEM_OVERFLOW_CHECK              0
  44. #define MEM_SANITY_CHECK                0

  45. /* ------------------------------------------------
  46.    ---------- Internal Memory Pool Sizes ----------
  47.    ------------------------------------------------
  48. */
  49. #define MEMP_NUM_PBUF                   10
  50. #define MEMP_NUM_RAW_PCB                4
  51. #define MEMP_NUM_UDP_PCB                6
  52. #define MEMP_NUM_TCP_PCB                10
  53. #define MEMP_NUM_TCP_PCB_LISTEN         6
  54. #define MEMP_NUM_TCP_SEG                12
  55. #define MEMP_NUM_REASSDATA              16
  56. #define MEMP_NUM_FRAG_PBUF              15
  57. #define MEMP_NUM_ARP_QUEUE              10
  58. #define MEMP_NUM_IGMP_GROUP             8
  59. #define MEMP_NUM_NETBUF                 2
  60. #define MEMP_NUM_NETCONN                4
  61. #define MEMP_NUM_SELECT_CB              4
  62. #define MEMP_NUM_TCPIP_MSG_API          8
  63. #define MEMP_NUM_TCPIP_MSG_INPKT        8
  64. #define MEMP_NUM_NETDB                  1
  65. #define MEMP_NUM_LOCALHOSTLIST          1
  66. #define PBUF_POOL_SIZE                  16

  67. /*
  68.    ---------------------------------
  69.    ---------- ARP options ----------
  70.    ---------------------------------
  71. #define LWIP_ETHERNET      managed by RTE
  72. */
  73. #define LWIP_ARP                        1
  74. #define ARP_TABLE_SIZE                  10
  75. #define ETHARP_SUPPORT_VLAN             0
  76. #define ETH_PAD_SIZE                    2
  77. #define ETHARP_SUPPORT_STATIC_ENTRIES   0

  78. /*
  79.    --------------------------------
  80.    ---------- IP options ----------
  81.    --------------------------------
  82. #define LWIP_IPV4          managed by RTE
  83. */
  84. #define IP_FORWARD                      0
  85. #define IP_REASSEMBLY                   1
  86. #define IP_FRAG                         1
  87. #define IP_OPTIONS_ALLOWED              1
  88. #define IP_REASS_MAX_PBUFS              10
  89. #define IP_DEFAULT_TTL                  128
  90. #define IP_SOF_BROADCAST                1
  91. #define IP_SOF_BROADCAST_RECV           1

  92. /*
  93.    ----------------------------------
  94.    ---------- ICMP options ----------
  95.    ----------------------------------
  96. */
  97. #define LWIP_ICMP                       1

  98. /*
  99.    ---------------------------------
  100.    ---------- RAW options ----------
  101.    ---------------------------------
  102. */
  103. #define LWIP_RAW                        1

  104. /*
  105.    ----------------------------------
  106.    ---------- DHCP options ----------
  107.    ----------------------------------
  108. */
  109. #define LWIP_DHCP                       0
  110. #define LWIP_DHCP_CHECK_LINK_UP         0
  111. #define LWIP_DHCP_BOOTP_FILE            0
  112. #define LWIP_DHCP_GET_NTP_SRV           0
  113. #define LWIP_DHCP_MAX_NTP_SERVERS       0

  114. /*
  115.    ------------------------------------
  116.    ---------- AUTOIP options ----------
  117.    ------------------------------------
  118. */
  119. #define LWIP_AUTOIP                     0
  120. #define LWIP_DHCP_AUTOIP_COOP           0
  121. #define LWIP_DHCP_AUTOIP_COOP_TRIES     9

  122. /*
  123.    ----------------------------------
  124.    ---------- IGMP options ----------
  125.    ----------------------------------
  126. */
  127. #define LWIP_IGMP                       1

  128. /*
  129.    ----------------------------------
  130.    ---------- DNS options -----------
  131.    ----------------------------------
  132. */
  133. #define LWIP_DNS                        0
  134. #define DNS_TABLE_SIZE                  4
  135. #define DNS_MAX_NAME_LENGTH             256

  136. /*
  137.    ---------------------------------
  138.    ---------- UDP options ----------
  139.    ---------------------------------
  140. */
  141. #define LWIP_UDP                        1
  142. #define LWIP_UDPLITE                    0

  143. /*
  144.    ---------------------------------
  145.    ---------- TCP options ----------
  146.    ---------------------------------
  147. */
  148. #define LWIP_TCP                        1
  149. #define TCP_QUEUE_OOSEQ                 0
  150. #define LWIP_TCP_SACK_OUT               0
  151. #define LWIP_TCP_MAX_SACK_NUM           4
  152. #define TCP_MSS                         1460
  153. #define TCP_OOSEQ_MAX_BYTES             0
  154. #define TCP_OOSEQ_MAX_PBUFS             0
  155. #define TCP_LISTEN_BACKLOG              1
  156. #define TCP_DEFAULT_LISTEN_BACKLOG      0xff
  157. #define LWIP_EVENT_API                  0
  158. #define LWIP_CALLBACK_API               1
  159. #define LWIP_WND_SCALE                  0
  160. #define TCP_RCV_SCALE                   0
  161. #define LWIP_TCP_PCB_NUM_EXT_ARGS       0
  162. #define LWIP_ALTCP                      0
  163. #define LWIP_ALTCP_TLS                  0

  164. #define TCP_WND                         (6 * TCP_MSS)
  165. #define TCP_SND_BUF                     (6 * TCP_MSS)

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

  169. /*
  170.    ----------------------------------
  171.    ---------- Pbuf options ----------
  172.    ----------------------------------
  173. */
  174. #define PBUF_LINK_ENCAPSULATION_HLEN    0

  175. /*
  176.    ------------------------------------------------
  177.    ---------- Network Interfaces options ----------
  178.    ------------------------------------------------
  179. */
  180. #define LWIP_SINGLE_NETIF               0
  181. #define LWIP_NETIF_HOSTNAME             0
  182. #define LWIP_NETIF_API                  0
  183. #define LWIP_NETIF_STATUS_CALLBACK      1
  184. #define LWIP_NETIF_EXT_STATUS_CALLBACK  0
  185. #define LWIP_NETIF_LINK_CALLBACK        1
  186. #define LWIP_NETIF_REMOVE_CALLBACK      0
  187. #define LWIP_NETIF_HWADDRHINT           1

  188. /*
  189.    ------------------------------------
  190.    ---------- LOOPIF options ----------
  191.    ------------------------------------
  192. */
  193. #define LWIP_HAVE_LOOPIF                0
  194. #define LWIP_LOOPIF_MULTICAST           0
  195. #define LWIP_NETIF_LOOPBACK             0
  196. #define LWIP_LOOPBACK_MAX_PBUFS         0

  197. /*
  198.    ------------------------------------
  199.    ---------- Thread options ----------
  200.    ------------------------------------
  201. */
  202. #define TCPIP_THREAD_NAME               "tcpip_thread"
  203. #define TCPIP_THREAD_STACKSIZE          1024
  204. #define TCPIP_THREAD_PRIO               osPriorityNormal2
  205. #define TCPIP_MBOX_SIZE                 10
  206. #define SLIPIF_THREAD_NAME              "slipif_loop"
  207. #define SLIPIF_THREAD_STACKSIZE         1024
  208. #define SLIPIF_THREAD_PRIO              osPriorityNormal2
  209. #define DEFAULT_THREAD_NAME             "lwIP"
  210. #define DEFAULT_THREAD_STACKSIZE        1024
  211. #define DEFAULT_THREAD_PRIO             osPriorityNormal2
  212. #define DEFAULT_RAW_RECVMBOX_SIZE       10
  213. #define DEFAULT_UDP_RECVMBOX_SIZE       10
  214. #define DEFAULT_TCP_RECVMBOX_SIZE       10
  215. #define DEFAULT_ACCEPTMBOX_SIZE         10

  216. /*
  217.    ----------------------------------------------
  218.    ---------- Sequential layer options ----------
  219.    ----------------------------------------------
  220. */
  221. #define LWIP_NETCONN                    1
  222. #define LWIP_TCPIP_TIMEOUT              0
  223. #define LWIP_NETCONN_SEM_PER_THREAD     0
  224. #define LWIP_NETCONN_FULLDUPLEX         0

  225. /*
  226.    ------------------------------------
  227.    ---------- Socket options ----------
  228.    ------------------------------------
  229. */
  230. #define LWIP_SOCKET                     0
  231. #define LWIP_COMPAT_SOCKETS             1
  232. #define LWIP_POSIX_SOCKETS_IO_NAMES     1
  233. #define LWIP_TCP_KEEPALIVE              1
  234. #define LWIP_SO_SNDTIMEO                0
  235. #define LWIP_SO_RCVTIMEO                0
  236. #define LWIP_SO_SNDRCVTIMEO_NONSTANDARD 0
  237. #define LWIP_SO_RCVBUF                  0
  238. #define LWIP_SO_LINGER                  0
  239. #define SO_REUSE                        0
  240. #define SO_REUSE_RXTOALL                0
  241. #define LWIP_SOCKET_SELECT              1
  242. #define LWIP_SOCKET_POLL                1

  243. /*
  244.    ----------------------------------------
  245.    ---------- Statistics options ----------
  246.    ----------------------------------------
  247. */
  248. #define LWIP_STATS                      0

  249. /*
  250.    ---------------------------------------
  251.    ---------- IPv6 options ---------------
  252.    ---------------------------------------
  253. #define LWIP_IPV6           managed by RTE
  254. */
  255. #define LWIP_IPV6_FORWARD               0
  256. #define LWIP_IPV6_FRAG                  1
  257. #define LWIP_IPV6_REASS                 1
  258. #define LWIP_IPV6_AUTOCONFIG            1
  259. #define LWIP_ICMP6                      1
  260. #define LWIP_IPV6_MLD                   0
  261. #define MEMP_NUM_MLD6_GROUP             4
  262. #define LWIP_ND6_NUM_NEIGHBORS          10
  263. #define LWIP_ND6_NUM_DESTINATIONS       10
  264. #define LWIP_ND6_NUM_PREFIXES           5
  265. #define LWIP_ND6_NUM_ROUTERS            3
  266. #define LWIP_ND6_ALLOW_RA_UPDATES       1
  267. #define LWIP_ND6_TCP_REACHABILITY_HINTS 1
  268. #define LWIP_IPV6_DHCP6                 0
  269. #define LWIP_IPV6_DHCP6_STATEFUL        0
  270. #define LWIP_IPV6_DHCP6_STATELESS       1
  271. #define LWIP_DHCP6_GET_NTP_SRV          0
  272. #define LWIP_DHCP6_MAX_NTP_SERVERS      1


  273. /*
  274.    --------------------------------------
  275.    ---------- Checksum options ----------
  276.    --------------------------------------
  277. */

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


  284. #ifdef CHECKSUM_BY_HARDWARE
  285.   /* CHECKSUM_GEN_IP==0: Generate checksums by hardware for outgoing IP packets.*/
  286.   #define CHECKSUM_GEN_IP                 0
  287.   /* CHECKSUM_GEN_UDP==0: Generate checksums by hardware for outgoing UDP packets.*/
  288.   #define CHECKSUM_GEN_UDP                0
  289.   /* CHECKSUM_GEN_TCP==0: Generate checksums by hardware for outgoing TCP packets.*/
  290.   #define CHECKSUM_GEN_TCP                0
  291.   /* CHECKSUM_CHECK_IP==0: Check checksums by hardware for incoming IP packets.*/
  292.   #define CHECKSUM_CHECK_IP               0
  293.   /* CHECKSUM_CHECK_UDP==0: Check checksums by hardware for incoming UDP packets.*/
  294.   #define CHECKSUM_CHECK_UDP              0
  295.   /* CHECKSUM_CHECK_TCP==0: Check checksums by hardware for incoming TCP packets.*/
  296.   #define CHECKSUM_CHECK_TCP              0
  297.   /* CHECKSUM_GEN_ICMP==1: Check checksums by hardware for outgoing ICMP packets.*/
  298.   /* Hardware TCP/UDP checksum insertion not supported when packet is an IPv4 fragment*/
  299.   #define CHECKSUM_GEN_ICMP               1
  300.   /* CHECKSUM_CHECK_ICMP==0: Check checksums by hardware for incoming ICMP packets.*/
  301.   #define CHECKSUM_CHECK_ICMP             0
  302. #else
  303.   /* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
  304.   #define CHECKSUM_GEN_IP                 1
  305.   /* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
  306.   #define CHECKSUM_GEN_UDP                1
  307.   /* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
  308.   #define CHECKSUM_GEN_TCP                1
  309.   /* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
  310.   #define CHECKSUM_CHECK_IP               1
  311.   /* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
  312.   #define CHECKSUM_CHECK_UDP              1
  313.   /* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
  314.   #define CHECKSUM_CHECK_TCP              1
  315.   /* CHECKSUM_GEN_ICMP==1: Check checksums by hardware for outgoing ICMP packets.*/
  316.   #define CHECKSUM_GEN_ICMP               1
  317.   /* CHECKSUM_CHECK_ICMP==1: Check checksums by hardware for incoming ICMP packets.*/
  318.   #define CHECKSUM_CHECK_ICMP             1
  319. #endif


  320. /*
  321.    --------------------------------------
  322.    ---------- IP ------------------------
  323.    --------------------------------------
  324. */
  325. /* Static IP address */
  326. #define IP_ADDR0                    192
  327. #define IP_ADDR1                    168
  328. #define IP_ADDR2                    0
  329. #define IP_ADDR3                    210
  330.    
  331. /* NET mask*/
  332. #define NETMASK_ADDR0               255
  333. #define NETMASK_ADDR1               255
  334. #define NETMASK_ADDR2               255
  335. #define NETMASK_ADDR3               0

  336. /* Gateway address */
  337. #define GW_ADDR0                    192
  338. #define GW_ADDR1                    168
  339. #define GW_ADDR2                    0
  340. #define GW_ADDR3                    1


  341. #endif /* LWIP_LWIPOPTS_H */
复制代码



回复

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2021-1-30 11:47:49 | 显示全部楼层
regbbs 发表于 2021-1-28 17:14
检查发送的时候pbuf是一个就包含了所有的数据还是被分成了两个,还有就是txdma的描述符,看看发送的数据包 ...

嗯,只能这样逐步查看了
回复

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2021-4-21 20:36:08 | 显示全部楼层
eric2013 发表于 2021-1-29 08:11
这个是我的配置:

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

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2021-4-21 20:49:14 | 显示全部楼层
regbbs 发表于 2021-1-28 09:12
TCPIP数据包有长度要求,不足的话会补足。

确实是为了满足最小数据包增加的6个字节,tcp数据就是空数据,那这种数据包是什么作用,哪里可以控制这种包发送
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-3 10:18 , Processed in 0.336107 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表