This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TM4C1294NCPDT:不同子网上 TCP 套接字的 lwIP 问题 Tiva

Guru**** 2041700 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/669179/ccs-tm4c1294ncpdt-lwip-problem-with-tcp-socket-on-different-subnets-tiva

器件型号:TM4C1294NCPDT

工具/软件:Code Composer Studio

您好!

我在 tm4c1294上有一个运行 TCP 服务器的应用程序。 对于静态 IP 配置和 DHCP、它在同一子网上完全正常工作。 当客户端尝试从不同子网建立套接字连接时、它将失败。 SYN 标志的响应中没有带有 ACK 标志的帧。 我看到它没有握手(我使用鲨鱼)。 我已经对子网和网关设置进行了加倍检查,同样,如果我使用的是我在 LWIP 库文档中所阅读的 DHCP,则应该为子网分配动态 IP。

ping 命令的 ICMP 帧在两个 LAN 上以及不同子网的情况下均可正确到达。 建议网关设置应该正确... 是否有任何明智的方法对此进行调查? 检查 我的路上是否有防火墙?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Lukasz:
    我倾向于认为这不是 LwIP 问题。 但是、如果您有疑问、我建议您从 LwIP 论坛寻求支持。 DHCP 客户端请求涉及向 LAN 发送广播地址。 如果 DHCP 服务器位于同一子网中、则会将 IP 地址租赁给客户端。 我认为要使 DHCP 跨不同的子网工作,您需要有某种类型的 DHCP 中继代理。 DHCP 客户端在本地网络上广播,中继代理接收广播并使用单播将其传输到一个或多个 DHCP 服务器。 我不是网络专家、因此请咨询您的 IT 部门。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    当然、我不会声称这是 Lwip 问题。 我寻求建议和专业知识来解决问题。
    你提出了一个好问题。 但是、如果我有其他设备分配了 DHCP IP、它们在没有额外处理的情况下工作、一旦数据包到达基于广播的正确子网路由器、就会知道子网中设备的 IP 和 MAC。


    Lukasz
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Lukasz:

    EMAC0在配置时支持多个802.1Q VLAN、否则需要一个(路由器)来跨不同子网或 VLAN 进行 IP 连接。 Windows 2008服务器和其他 Microsoft 产品在配置正确时充当路由器。

    Cisco 路由器支持 DCHP 客户端通过 VLAN 连接到特定 VLAN 上的 DHCP 服务器的 IP 帮助程序。 如果启用了802.1Q 协议,则可以为 NIC 启用多个 VLAN。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    非常感谢。 我将检查数据表以了解正确的 EMAC 配置。 是否有提示?

    在 VLAN 间通信或 LAN 路由器不同子网之间通信的情况下、必须参与。 当服务器和客户端处于不同的 LAN 中时,我可以 ping 我的服务器,但同样没有同步确认,它会失败。 这种情况下,两台主机都连接到不同的网关点,实际上是我最大的问题。 我不够清楚。

    这可以重新连接到 EMAC 配置吗? 或更多路由器模块?

    再次感谢大家的讨论。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Lukasz Huchel"]。 当服务器和客户端处于不同的 LAN 中时,我可以 ping 我的服务器,但同样没有同步确认,并且失败。

    假设两 个网络地址 相同,例如 (192.168.x.x)?   如果 子网掩码 不同, 可能会导致 LWIP ARP 路由器问题,则 ICMP ping 回显响应是广播。  您 知道 、广播通常在路由器第3层停止。  Cisco 的 EIGRP 路由封装 IP, 似乎可以调用 通过    IP 封装捕获的第3层广播,或者至少端点 VLAN 会通过802.1Q 返回 ICMP 广播。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101:
    感谢您的帮助!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    实际上,我几年前就在所有服务器网卡上建立了一个英特尔802.1Q 中继网络。 由 Cisco Catalyst 6503千兆交换机(12个 VLAN)管理。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果两台设备位于同一子网或完全不同的网络地址(服务器位于18.62.x.x 中,客户端位于18.111.x.x 中),我可以使用 ICMP (ping,跟踪路由)。 我获得 ping 响应、可以使用 trace route 命令跟踪特定跳数。

    现在是我无法向自己解释的时刻。 当我的设备位于一个 LAN (具有相同的子网、相同的网关地址)中时,我的应用程序工作正常,telnet 命令允许我打开服务器正在侦听的端口。 现在,当我尝试使用来自不同网络地址(服务器位于18.62.x.x 中,客户端位于18.111.x.x 中)的应用程序时,它将失败(telnet 也无法打开服务器侦听的端口)。 但是,ICMP 协议的所有命令仍然可以正确访问。

    我的服务器正在侦听来自任何 IP 地址的选定端口上的 TCP 连接。

    我可以缩小潜在原因吗? 或者、请联系网络管理员、以确保我的设备已正确注册、并且可以与不同网络地址中的远程位置进行通信。

    非常感谢您的讨论。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Lukasz Huchel"]或联系网络管理员以确保我的设备已正确注册,并可以与不同网络地址中的远程位置通信。

    这是必须的,因为系统路由器的安全性 可能会过滤甚至阻止某些端口通过 VLAN。

    一种查找方法是尝试 telnet 至端口,如果 telnet 从您键入的 IP 目标地址立即断开连接, 则端口可能 已关闭。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、BP101、Charles、

    非常感谢您的讨论。 我从中受益。 最后一种解决方案是注册我的设备。 网络管理员在我的默认网关上创建了适当的规则。 我可以从不同的子网或网关访问所需的服务器。  

    再次感谢。