我是一名嵌入式软件开发人员,在连接设备上有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专家,也许我使用了一些错误的术语,请关注问题的主要概念。
谢谢大家。
如果您没有任何TCP / IP协议套件的经验,我强烈建议您查看此IBM Redbook,更具体地说,请参阅第2,3和4章。 这是说:
您可以使用netcat
在Linux PC上试验TCP,并使用Wireshark
或tcpdump
捕获交换。
创建一个包含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数据包的有效负载部分中。