lwIP学习记录5——裸机lwIP工程学习后的总结

1、ping包的TTL生存时间如何修改

当我们把工程烧录到板子上是,我们对板子的IP进行ping包,看到信息如下图

这时候我好奇TTL是什么作用,为什么有的设备是64有的设备是128有的是255?

解:TTL(Time to Live)是IP数据包中的一个字段,用于限制数据包在网络中的存活时间或最大转发跳数。

 初始值设置与操作系统关联

  • TTL=64‌:
    通常由 ‌Linux、类UNIX系统‌(如FreeBSD、Solaris)或 ‌Compaq Tru64‌ 发出。数据包从源主机发出时初始TTL值为64,每经过一个路由器减1‌12。
  • TTL=255‌:
    主要见于 ‌传统UNIX系统‌(如SunOS、NetBSD)。初始TTL值为255,同样每经过路由器减1‌12。
    Windows系统初始TTL通常为128(如Windows NT/XP)

 路径跳数诊断

  • TTL 64‌:
    若返回的TTL值为56,说明数据包从源到目标经过了 64-56=8 个路由器‌56。
  • TTL 255‌:
    若返回值为247,则路径经过 255-247=8 个路由器‌39。
    注意‌:TTL的初始值取决于发送主机的操作系统,与目标主机无关。

TTL的核心作用

  • 防网络环路‌:
    通过逐跳减1机制,确保数据包不会因路由错误无限循环(TTL=0时自动丢弃)‌28。
  • 操作系统识别‌:
    结合返回的TTL值可推断目标主机操作系统(如TTL≈64→Linux,TTL≈128→Windows)‌12。

综上TTL核心价值在于 ‌路径跳数诊断‌ 和 ‌安全风险预警‌。

那么我们的板子如何修改这个值呢?

解:这这个文件下,修改IP_DEFAULT_TTL的值就可以了

官方的注释这么说明:

IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers.

IP_DEFAULT_TTL:传输层使用的生存时间的默认值。

除了ping包有生存空间,我们的UDP和TCP也有生存时间

2、LWIP不同版本发现问题

当我一直完裸机程序后,发现使用DHCP分配IP时,V2.2.0 V2.2.1这两个版本分配IP时间长达1分钟,而V2.1.3版本只需要10秒钟,对比发现在ipv4文件夹内2.2.0以上版本多了一个文件(如下图),具体撒原因我不清楚。对比dhcp.c文件也有区别,可是看不懂呀

但是我通过把网线测试,V2.2.0以上版本,DHCP其实一通电初始化完以太网底层就立马获取到了,只能要等待将近50-60秒才会显示出来获取IP成功,并不是这50-60秒一直在获取

### STM32 裸机环境下的 LwIP 和 YT8512 网络开发实例 #### 配置硬件连接 为了使 STM32 成功通过 Ethernet PHY (YT8512) 进行通信,需确保 MCU 的 RMII 接口正确连接到 PHY 设备。通常情况下,这涉及到将 STM32 的特定引脚映射至 PHY 对应的数据线、时钟信号及其他控制线路[^1]。 #### 初始化外设 在不依赖任何操作系统的前提下启动项目前,应该利用 STM32CubeMX 工具来初始化必要的外设资源,特别是 ETH 外设及其关联的 GPIOs, RCC 及中断向量表等配置项。完成这些基础工作之后再着手于软件层面的工作会更加高效[^2]。 #### 设置 LwIP 协议栈 对于非 RTOS 应用场景而言,在 `main.c` 文件内调用 lwip_init() 函数即可完成协议栈的基础设定;随后定义并注册网络接口回调函数 netif_add(), 该过程同样适用于无操作系统支持的情况。值得注意的是,当采用裸板编程模式时不涉及任务调度机制,则无需考虑 FreeRTOS 或其他类似的多任务管理组件。 #### 实现 PING 功能测试 一旦上述准备工作就绪,便可以尝试编写简单的应用程序来进行功能验证——比如发送 ICMP Echo Request 请求给目标主机,并等待其响应。下面给出一段用于执行此操作的小型 C++ 示例代码: ```cpp #include "lwip/init.h" #include "lwip/netif.h" #include "netif/ethernetif.h" // ... other necessary includes ... int main(void){ // Initialize system peripherals and setup clock... /* Initialize the LwIP stack */ lwip_init(); struct netif g_netif; ip4_addr_t ipaddr, netmask, gw; IP4_ADDR(&gw, 192, 168, 0, 1); IP4_ADDR(&ipaddr, 192, 168, 0, 2); IP4_ADDR(&netmask, 255, 255, 255, 0); netif_add(&g_netif, &ipaddr, &netmask, &gw, NULL, ethernetif_init, tcpip_input); netif_set_default(&g_netif); netif_set_up(&g_netif); while(1){ // Implement ping functionality here or call relevant APIs. // For simplicity, just delay a bit between each iteration. HAL_Delay(1000); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值