乐鑫技术交流
直播中

李伟

7年用户 1533经验值
私信 关注
[问答]

使用espconn api实现UPNP IGD端口转发,为什么没有发送ACK?

我正在尝试使用 espconn api 实现 UPNP IGD 端口转发。

我创建了与路由器的连接,然后:
1) 在连接的回调 (espconn_regist_connectcb) 上,我使用 espconn_send 发送 IGD 描述的 GET 请求;
2)在接收回调(espconn_regist_recvcb)上,我解析IGD描述(需要4个tcp数据包),并发送一个请求(espconn_send)询问端口是否打开;
3) 我在同一个回调 (espconn_regist_recvcb) 上收到响应,如果端口空闲,我发送映射请求 (espconn_send)。

所有 tcp 数据包都可以在此 pcap 中看到:http://s000.tinyupload.com/?file_id=00012444369366896292

我的问题是第二个请求没有 ACK,这使得路由器重新传输 2) 响应。
我的最后一个请求也没有发送,espconn_send没有返回任何错误,但是 pcap 无法捕获数据包。

为什么没有发送 ACK?
               

回帖(1)

打马过草原

2024-7-19 17:22:47
在使用ESP8266的espconn API实现UPnP IGD端口转发时,确保正确地发送和接收数据包非常重要。从您的描述来看,您已经完成了以下步骤:

1. 在连接回调中发送IGD描述的GET请求。
2. 在接收回调中解析IGD描述,并发送请求询问端口是否打开。
3. 在同一个回调中收到响应,如果端口空闲,发送映射请求。

然而,您提到没有收到ACK。这可能是由于以下原因:

1. **数据包格式不正确**:确保您的请求和响应数据包格式正确。检查HTTP请求和响应的头部和内容,确保它们符合UPnP IGD的标准。

2. **连接超时**:在发送请求和接收响应时,可能会遇到连接超时的问题。确保您的连接超时设置合理,以便在需要时重新发送请求。

3. **路由器限制**:某些路由器可能会限制UPnP IGD的端口转发功能。检查您的路由器设置,确保允许UPnP IGD端口转发。

4. **防火墙限制**:确保您的设备和路由器的防火墙设置允许UPnP IGD端口转发。有时防火墙可能会阻止某些端口的通信。

5. **ESP8266固件问题**:检查您的ESP8266固件是否支持UPnP IGD端口转发。如果固件版本较旧,可能需要更新到支持UPnP IGD的版本。

6. **调试信息**:在发送和接收数据包时,添加调试信息以帮助您了解问题所在。例如,打印发送和接收的数据包内容,以及连接状态等。

7. **检查pcap文件**:您提供了一个pcap文件链接,但链接已失效。请重新上传pcap文件,并仔细检查数据包内容,以确定问题所在。

8. **ESPconn API限制**:ESPconn API可能存在一些限制,导致无法正确处理UPnP IGD端口转发。您可以尝试使用其他库或方法来实现UPnP IGD端口转发。

综上所述,要解决没有发送ACK的问题,您需要仔细检查数据包格式、连接超时、路由器和防火墙设置、固件版本、调试信息以及pcap文件内容。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分