下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

FreeRTOS-Plus-TCP 多接口

简介:多接口、多端点

我们将在 FreeRTOS -Plus-TCP 中引入两个新概念:接口端点.

一个接口对应于一个网络接口卡 (NIC),并具有以下属性: 它有一组函数地址用以执行实际工作,即初始化 NIC、发送数据包、 获取链接状态,而且和往常一样,每个接口会启动自己的任务 以读取数据包并将其转发给 IP 任务。 消息缓冲区将 包含指向接口和接收端点的指针。
端点的概念使其有可能获得多个 IP 地址。各 端点具有以下属性:

  • IP 地址(IPv4 或 IPv6)
  • 默认 IP 地址
  • 前缀 (IPv6) 或网络掩码 (IPv4)
  • 网关地址
  • DNS 地址


单接口

到目前为止,每个 FreeRTOS-Plus-TCP 项目都有一个物理接口,即局域网 (LAN) 或 Wi-Fi。 此接口的驱动链接到代码,且提供了发送和 接收数据包的可能性。应用程序只能与单个网络接口链接, 这是一个静态(编译时)选择。
该库需要一个能交换原始 IEEE 802.3 数据包的网络接口。以下为 单接口应用程序的示例:

应用程序可以与同一局域网上的其他节点通信。可通过使用 ARP 查找物理地址 (MAC-)。绑定可以存储在缓存中。

当应用程序想要连接到互联网时,必须首先找到远程 IP 地址。一个 DNS 客户端会负责此项工作。知道 IP 地址后,应用程序还必须知道网关 地址。这通常是网络路由器。如果没有定义网关,数据包将被丢弃。

单个驱动器中的路由逻辑非常简单。如果对方的 IP 地址在 网络掩码内,数据包将直接发送。例如,可直接到达上面的笔记本电脑(192.168.2.5) 。


多接口

越来越多的应用程序想要使用多个网络接口。有了多个接口, 就有可能实现。 以下是具有 2 个网络接口的配置:

现在,FreeRTOS 应用程序已连接到局域网(接口 0)和 Wi-Fi 站(接口 1)。它使用 的地址是 192.168.2.100(接口 0,端点 0)、fe80::7009(接口 0,端点 1)、2406:7400:56:4914::100(接口 0, 端点 2)和 10.2.0.45(接口 1,端点 3)。这些地址可以静态配置, 也可以通过 DHCP 或 IPv6 的路由器通告("RA")自动配置。与局域网网络接口相关联的多个终端点 允许我们拥有多个 IPv6 地址(链接本地和全局),这对于 IPv6 的正常工作而言是必需的。

IP 路由现在变得有些复杂。假设应用程序想要发送 UDP 数据包 到 IoT 设备。库会尝试查找匹配的网络地址:

端点 IP 地址 网络 掩码 接口 网关
0 192.168.2.100 192.168.2.0 255.255.255.0 局域网 192.168.2.1
 1  fe80::7009 fe80:: 64 LAN (0)
 2  2406:7400:56:4914::100 2406:7400:56:4914:: 10 LAN (0) fe80::522b:73ff:feb4:a60
3 10.2.0.45 10.2.0.0 255.0.0.0 Wi-Fi LTS (1)

解决方案很简单:10.2.0.12 与网络地址 10.2.0.0 匹配,即 Wi-Fi 网络。 不需要网关。

现在,它想从 Google.com 加载网页。DNS 会返回 64.233.167.113 地址。该地址 与局域网或 Wi-Fi 网络地址不匹配。 库会再次遍历接口列表,查找网关。将使用找到的 第一个网关。


两个网络,同一网络地址

FreeRTOS 论坛上有些用户问到两个网络是否可能具有相同的网络地址。 从算法可知, 应使用第一个具有匹配的网络地址的接口。对于一个传入的 TCP 连接也是如此: 第一个 SYN 数据包会设置 MAC 地址和使用的接口。对于 UDP 数据包: 会通过接收数据包的接口对传入的数据包进行回复。


将现有应用程序移植到 FreeRTOS-Plus-TCP /multi:

定义 ipconfigIPv4_BACKWARD_COMPATIBLE (在 FreeRTOSIPConfig.h 文件中定义)后,即可轻松移植任何现有应用程序。在这种情况下,只需将一个接口链接到项目, 且应禁用 IPv6。

若不使用兼容模式,各端点必须由应用程序初始化: 设置默认值,并指示是否需要 DHCP 或路由器通告。

在早期/单一版本中,据说设备(整体)是向上或向下的。在新的版本中, 端点可以变为向上或向下。因此,早期的函数如 FreeRTOS_GetAddressConfiguration() 不能直接使用。需添加一个新参数:端点。

至精至简:在添加这些新功能时,我们尝试精简代码和 RAM 的使用。没有复杂的索引表或复杂的路由规则。 例如,假设只有一个网关和一个 DNS 地址。如果有不止 一个网关或 DNS 地址,将选择第一个。

TCP 的实际逻辑尚未更改。开窗机制、重传和超时, 一切都保持不变。


演示

如何为多个接口设置和运行演示页面提供了设置多接口的说明


多接口函数

IPv6 和多接口函数”页面提供了同时使用 IPv6 和多接口所需的新函数的信息。

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.