MCU中网络接口角色的边界是什么?

问题描述 投票:-3回答:1

我是一名嵌入式软件开发人员,在连接设备上有TCPIP经验。另外,我不是软件协议专家,所以我对TCPIP协议栈及其各种phy层的责任感有点困惑。

首先,我有使用UART,SPI,CAN,USB等协议的经验......如您所知,在选择您在软件级别使用的协议时,phy层会直接影响您。例如,如果您使用usb并在其上构建软件协议,则不会偶尔处理一些细节,例如检查软件协议中的损坏帧,因为它的phy层保证了此操作。 CAN还有一些CAN控制器设备,如crc和bit stuffing,所以它非常可靠。但对于像UART / USART这样的简单外设,情况并不相同。假设您正在使用蓝牙模块升级固件,您需要了解几乎所有可能发生的事情,如延迟,损坏的帧,有效负载验证等。

简而言之,我试图了解MCU中包含的newtork接口的确切作用,它直接与RJ45 phy插座连接。换句话说,想象一下我在我的电脑上写了一个服务器应用程序。我还在我的开发板中配置并运行了一个应用程序,它有一个RJ45插槽,并作为客户端运行。还想象他们通过TCP建立了连接。那么,当我从服务器端向套接字发送32字节的数据时,客户端的情况会怎样?我将在最低级别的MCU上看到什么是RxCompleteInterrupt()?我发送的数据和附加到TCP数据包的其他一些内容是否保证由我的PC的MCU和以太网控制器中的eth控制器提供?或者我负责(或我使用的堆栈)检查所有必要的东西来验证框架是否有效?

我试图尽可能清楚。如果您有经验,请尝试写清楚的评论。我不是TCPIP专家,也许我使用了一些错误的术语,请关注问题的主要概念。

谢谢大家。

networking tcp embedded ethernet
1个回答
1
投票

如果您没有任何TCP / IP协议套件的经验,我强烈建议您查看此IBM Redbook,更具体地说,请参阅第2,3和4章。 这是说:

  1. 那么,当我从服务器端向套接字发送32字节的数据时,客户端的情况会怎样?我将在最低级别的MCU上看到什么是RxCompleteInterrupt()? 您应该已在缓冲区中收到以太网帧。此以太网帧应包含IP数据包。此IP数据包应包含TCP数据包,该有效负载应包含在32字节数据中。但是在接收数据之前,客户端和服务器之间会有多次交换,因为TCP是面向连接的协议,即将发送/接收几个以太网帧。
  2. 我发送的数据和附加到TCP数据包的其他一些内容是否保证由我的PC的MCU和以太网控制器中的eth控制器提供?或者我负责(或我使用的堆栈)检查所有必要的东西来验证框架是否有效? TCP数据包最终将被传送,但不保证您的以太网帧和IP数据包将被传送,并且将以正确的顺序到达。这正是TCP的工作,作为面向连接的协议,而不是做所需的事情,以便最终作为TCP有效负载发送的数据将被传递。您的MCU硬件应该是负责验证以太网帧的硬件,但MCU上运行的TCP / IP堆栈负责验证IP和TCP数据包以及通过TCP发送/接收的数据的正确传送。

您可以使用netcat在Linux PC上试验TCP,并使用Wiresharktcpdump捕获交换。

创建一个包含32个字节的“响应”文件:

echo 0123456789ABCDEFGHIJKL > response.txt

启动Wireshark,并使用过滤器lo过滤tcp port 1234界面 启动侦听TCP端口1234的TCP服务器,该端口将在收到客户端的连接后发送response.txt的内容:

netcat -l 1234 < response.txt

在另一个控制台/ shell中,连接到侦听tcp / 1234的服务器,并显示收到的内容:

netcat localhost 1234
0123456789ABCDEFGHIJKL

在Wireshark上,您应该看到以下Wireshark Network Capture,并且能够使用IBM红皮书作为参考扩展完整交换的所有帧/数据包。 您的32字节数据将位于服务器发送的TCP数据包的有效负载部分中。

© www.soinside.com 2019 - 2024. All rights reserved.