admin管理员组文章数量:1577530
先向大家介绍一下,目前作者正在做的工作,希望使用FPGA能够通过UDP协议向PC机的网络端口发送大量的数据包,但是当数据包的量达到一定程度的时候抓包工具就会出现错误,以至于MATLAB没有办法读到数据。
由于作者一直认为是MATLAB自身的问题没有读到该数据,因此,希望通过两台电脑之间的通讯进行测试MATLAB中的代码是否有问题。
那么接下来就介绍一下我的工作把。(实现电脑A向电脑b的数据发送)
step1:配置电脑A: IP 为192.168.0.5 掩码:255 255 255 0 默认网关:192.168.0.1
配置i电脑B:IP 为192.168.0.3 掩码:255 255 255 0 默认网关:192.168.0.1
step2:配置电脑B以使得其认识电脑A(网络通讯概念,需要知道电脑a的mac地址)
在电脑b中,管理员方式打开命令窗口,输入:arp -s 电脑b -ip 电脑b-mac
(至于电脑的mac地址如何查,请自行百度,可以使用:ipconfig /all)
step3 matlab的代码编写(下面列出核心代码)
(电脑A )
ipA = '192.168.0.5';
portA = 8080;
ipB = '192.168.0.3';
portB = 8080;
handles.udpA = udp(ipB,portB,'LocalPort',portA);
set(handles.udpA,'OutputBufferSize',8192);
set(handles.udpA,'TimeOut',100);
fopen(handles.udpA);
for t = 1:100
x = sin(t);
set(handles.edit1,'String',x);
v1=str2double(get(handles.edit1,'string'));
w1(t)=v1;
fprintf(handles.udpA,v1);
pause(0.1);
end
(电脑B)
ipA='192.168.0.5';
portA=8080;
ipB='192.168.0.3';
portB=8080;
handles.udpB=udp(ipA,portA,'LocalPort',portB);
set(handles.udpB,'TimeOut',10);
set(handles.udpB,'InputBufferSize',8192);
fopen(handles.udpB);
for t = 1:15
a1 = str2double(fscanf(handles.udpB));
set(handles.edit1,'string',a1);
pause(0.1);
end
step4 运行代码(并在电脑b 中使用抓包工具进行检测,本人使用的wireshark) 观察包的长度问题 以及传送的包的个数问题
总结:上面的核心代码是很灵活的,可以随机调整,完整的代码作者将会贴在后面,同时也可以实现同步或者异步的接收,总结有以下
关于udp的数据发送
如果传送的数据包的大小小于512 就会完整发送
如果传送的数据包大于512 就会分包发送(MATLAB自动分)
—————
思考:下面截取别人blog中的内容:https://blog.csdn/caoshangpa/article/details/51530685
1.在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500;
2.在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;
3.在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;
所以,在应用层,你的Data最大长度为1472。当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃。
从上面的分析来看,在普通的局域网环境下,UDP的数据最大为1472字节最好(避免分片重组)。
但在网络编程中,Internet中的路由器可能有设置成不同的值(小于默认值),Internet上的标准MTU值为576,所以Internet的UDP编程时数据长度最好在576-20-8=548字节以内
1.在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500;
2.在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480;
3.在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;
所以,在应用层,你的Data最大长度为1472。当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃。
从上面的分析来看,在普通的局域网环境下,UDP的数据最大为1472字节最好(避免分片重组)。
但在网络编程中,Internet中的路由器可能有设置成不同的值(小于默认值),Internet上的标准MTU值为576,所以Internet的UDP编程时数据长度最好在576-20-8=548字节以内
______--------------------------------2020-12-10更新~------------------------------
经过了两年的学习于理解,经常又博友问我这个东西是什么意思,完整代码在哪里,这次,我从新找了一下 以前的工作,此处我贴出来github地址。方便下载:
https://github/Scottars/matlab_udp
版权声明:本文标题:两台电脑之间的MATLAB-udp通讯 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1726614168a1078048.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论