我是一位嵌入式软件开发人员,具有在连接的设备上使用TCPIP的经验。另外,我不是软件协议专家,所以我对TCPIP协议堆栈及其各个phy层的职责感到困惑。
首先,我对UART,SPI,CAN,USB等协议有经验。众所周知,在选择软件级别使用的协议时,phy层会直接影响您。例如,如果您使用usb并在其上构建软件协议,则您有时不会处理诸如检查软件协议中损坏的帧之类的一些细节,因为它的phy层保证了此操作。 CAN还具有一些CAN控制器功能,例如crc和位填充,因此,它确实可靠。但是对于像UART / USART这样的简单外设,情况就不一样了。假设您正在使用蓝牙模块升级固件,那么您需要了解通信中可能发生的几乎所有事情,例如延迟,损坏的帧,有效负载验证等。
简而言之,我试图了解newtork接口的确切作用,这些接口包括在直接与RJ45 phy套接字接口的MCU中。换句话说,假设我在PC上编写了一个服务器应用程序。另外,我还在开发板上配置并运行了一个应用程序,该应用程序具有RJ45套接字,并作为客户端运行。还要想象他们通过TCP建立了连接。那么,当我从服务器端向套接字发送32字节的数据时,客户端的情况将如何?在最低的MCU级别RxCompleteInterrupt()会看到什么?我发送的数据和其他附加到TCP数据包的东西是否保证由PC的MCU和以太网控制器中的eth控制器传递?还是我有责任(或我使用的堆栈)检查所有必要的事物以验证框架是否有效?
我试图尽可能清楚。请如果您有经验,请尝试撰写简洁的评论。我不是TCPIP专家,也许我使用了一些错误的术语,请重点关注问题的主要概念。
谢谢大家。
答案 0 :(得分:1)
如果您以前没有使用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
在另一个控制台/外壳中,连接到侦听tcp / 1234的服务器,并显示接收到的内容:
netcat localhost 1234
0123456789ABCDEFGHIJKL
在Wireshark上,您应该看到以下Wireshark Network Capture,并且能够使用IBM Redbook作为参考来扩展完整交换的所有帧/数据包。
您的32个字节的数据将位于服务器发送的TCP数据包的有效负载部分中。