搜索
bottom↓
回复: 20

请教内网和内网设备间UDP可靠通讯的问题

[复制链接]

出0入0汤圆

发表于 2019-6-13 16:48:27 | 显示全部楼层 |阅读模式
   问题的现象是这样的:一台电脑可以访问外网,其IP地址为192.168.10.158,网关192.168.10.1,电脑需要使用UDP方式访问局域网内另一个网络设备,这台设备的IP地址是192.168.10.25,出现的现象是大多数时间电脑UDP访问是正常的,但偶尔会出现发出的UDP数据到达不了IP地址是192.168.10.25的网络设备,如果将交换机上连接外网的RJ45拔掉,软件重启一下,则内网之间UDP通讯是正常的。
  现在想请教一下,有没有办法只通过设置网络地址的软件设置类的办法而不动硬件,使得内网和外网相互之间不干涉,都可以正常运行?
  

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入22汤圆

发表于 2019-6-13 17:13:00 来自手机 | 显示全部楼层
目前也遇到该问题,看看高手如何解答。

出40入518汤圆

发表于 2019-6-13 17:26:43 | 显示全部楼层
1、将交换机上连接外网的RJ45拔掉
2、软件重启一下
这两个都是恢复正常的必要条件??
集线器换成路由器试试会这样么?

出0入0汤圆

发表于 2019-6-13 17:42:39 | 显示全部楼层
有ARP欺骗吧,各个点抓包看一下。

出0入0汤圆

 楼主| 发表于 2019-6-13 18:38:16 | 显示全部楼层
本帖最后由 coleyao 于 2019-6-13 18:39 编辑
智涅 发表于 2019-6-13 17:26
1、将交换机上连接外网的RJ45拔掉
2、软件重启一下
这两个都是恢复正常的必要条件??


  这两个条件是确保电脑发出的UDP包不会被发到外网上去(与外网断开物理连接并且软件重启后检测到的网络环境不含外网相应的网络地址,如果只是断开外网,软件不重启,有可能软件还会用之前的配置发出数据包)。
  另外奇怪的是以前运行了大概一个月左右,没有反映过这样的问题,这次用新的5台设备替换掉老的2台设备之后就出现了这样的问题,按理说不管是接多少设备,不会影响UDP通讯的,实际上UDP是1对1通讯,接收到UDP包的设备再将数据包通过485转发出去,无UDP通讯的设备都是从机,只是接收RS485数据包。

出0入0汤圆

发表于 2019-6-13 18:39:42 | 显示全部楼层
“设备”需不需要连接外网,不需要的话换个IP段

出0入0汤圆

 楼主| 发表于 2019-6-13 18:43:00 | 显示全部楼层
本帖最后由 coleyao 于 2019-6-13 18:46 编辑
散装805 发表于 2019-6-13 18:39
“设备”需不需要连接外网,不需要的话换个IP段


设备不连外网,电脑是需要外网的,电脑那边改成和设备同样的网段或是自动设定IP地址好像都有UDP数据包泄漏到外网的情况,按理说内网设备相互之间通讯是应该非常可靠的。

出40入518汤圆

发表于 2019-6-13 18:56:54 | 显示全部楼层
本帖最后由 智涅 于 2019-6-13 18:58 编辑

那按交互机工作原理,它是把数据转到外网的端口去了,所以你PC没收到。你外网的而网口拔掉后它重新更新了端口映射表然后又可以收到了。
但是你说“如果软件不重启,有可能软件还会用之前的配置发出数据包”
你的软件有什么配置?你目标IP还有端口不是固定的么?


编辑原因:长时间用微信习惯Ctrl加回车进行换行

出0入0汤圆

 楼主| 发表于 2019-6-13 19:01:37 | 显示全部楼层
智涅 发表于 2019-6-13 18:56
那按交互机工作原理,它是把数据转到外网的端口去了,所以你PC没收到。你外网的而网口拔掉后它重新更新了端 ...

 有可能是因为用了交换机的原因,现在的网路设备基本上很少用集线器了,都是交换机,要是集线器的话,相当于群发,应该就不存在一个集线器上的设备收不到另一个挂在同一个集线器上的设备的数据包的情况!

出40入518汤圆

发表于 2019-6-13 19:02:31 | 显示全部楼层
coleyao 发表于 2019-6-13 19:01
 有可能是因为用了交换机的原因,现在的网路设备基本上很少用集线器了,都是交换机,要是集线器的话,相 ...

嗯集线器是群发,交换机会根据端口映射表转发

出0入33汤圆

发表于 2019-6-13 19:43:05 | 显示全部楼层

看来还有很多人不清楚网络数据包的发送流程啊,就楼主的同网段udp单播包来说:
1、发送方会查本机arp表,没有的话先发一个arp包,这个包是广播方式发送的,局域网内所有设备都会收到,用来查询目的ip地址的MAC地址。
2、发送的arp包里带有发送方的MAC地址,交换机会记录这个MAC,成为MAC和物理端口映射表的一部分,目标设备也会记录这个MAC地址,成为arp表的一部分。
3、非目的设备会忽略这个包,目的设备会回应一个包,这个回应的包同样会被交换机和源设备记录。
4、有目的MAC后,设备才会将真正要发的包发出去,发出去的包到交换机后,交换机会根据之前建立的MAC和端口映射表进行转发,其它端口的设备并不会收到这个包。就楼主说的担心将数据包发到外网去,根本不可能。

就楼主的情况来说,因为UDP本身就是无连接的不可靠协议,丢数据太正常了,这里列几个可能:
1、交换机转发也有吞吐量的,负载高的情况下就有可能丢包;
2、硬件也有可能造成丢包,网卡、网线、水晶头质量不好等;
3、有arp欺骗的情况,数据可能被发到其它设备上去了;
4、目的设备如果吞吐量大也有可能丢包。

出0入33汤圆

发表于 2019-6-13 19:44:48 | 显示全部楼层
所以使用UDP需要用户自己处理好丢包、粘包、顺序等问题。

出0入8汤圆

发表于 2019-6-13 19:47:19 | 显示全部楼层
会不会是网络设备的问题,网络设备打开了广播接收接收到外网广播,

出0入0汤圆

发表于 2019-6-13 19:54:53 | 显示全部楼层
UDP本身就允许丢包的

出0入0汤圆

 楼主| 发表于 2019-6-13 21:18:12 | 显示全部楼层
cody 发表于 2019-6-13 19:54
UDP本身就允许丢包的

   UDP协议是允许丢包没错的,但是从电脑发出的数据包如果是使用网卡直连的方式与网络设备进行通讯,因为没有重新拆包和打包的过程,理论上是不存在丢包和数据包次序错乱的现象的,因此对于因使用交换机导致的UDP数据偶然丢失,我认为换成集线器应该是可以解决问题,当然集线器之所以被淘汰,也是有它的缺点在,不过在当前的应用场合似乎集线器反而比交换机更适合(即局域网内广播方式传输数据,导致带宽利用率低)!

出0入0汤圆

发表于 2019-6-13 22:03:53 | 显示全部楼层
本帖最后由 McuPlayer 于 2019-6-13 22:21 编辑

失败的时候,是UDP包全丢了,还是丢包率升高?
Ping一下,看看能不能响应,ICMP包跟UDP包差不多,看能不能到达

交换机工作在二层上,以MAC地址为参考的数据链路层

---------------------------------------------------------------------------
IPV4的MTU最小值为576,扣除一些头尾,500个字节的UDP包在经过交换机的时候,不会被重新打包,而是直接包级转发

-------------------------------------------------------------------------------
用双网卡电脑,做一个桥,抓包分析
分别插入到电脑网口端,设备网口端,看看数据在哪里丢的

出0入0汤圆

 楼主| 发表于 2019-6-14 08:00:23 | 显示全部楼层
McuPlayer 发表于 2019-6-13 22:03
失败的时候,是UDP包全丢了,还是丢包率升高?
Ping一下,看看能不能响应,ICMP包跟UDP包差不多,看能不能 ...

  ping过,响应时间有点偏长,快的时候30ms左右,慢的时候会到600mS左右,但没有丢的现象,至于时间长,应该是和我单片机的响应速度慢有关系,通讯芯片是SPI接口的,单片机之前没有专门对网络响应时间优化过!

出215入118汤圆

发表于 2019-6-14 08:05:34 来自手机 | 显示全部楼层
应该是数据包增多,mcu又繁忙的情况下导致的。可以考虑换带vlan的交换机,电脑配置双网卡或者支持vlan的网卡。让mcu的环境纯净,另外就是w5100 w5500之类的硬件tcpip是不是好一些?

出0入0汤圆

发表于 2019-6-14 09:06:07 | 显示全部楼层
想可靠还是用TCP,否则就得自己处理好丢包等问题

出0入0汤圆

 楼主| 发表于 2019-6-14 09:13:34 | 显示全部楼层
modbus 发表于 2019-6-14 09:06
想可靠还是用TCP,否则就得自己处理好丢包等问题

  这次先把交换机换成集线器测试看看,如果没问题就这样用了,下次再有新项目再考虑用TCP协议,其实也不是不喜欢用TCP协议,只是TCP协议相对UDP协议单片机处理起来稍微要麻烦一点,网口驱动芯片的库里是带简单的TCP通讯Demo的,是我没估计到UDP通讯的丢包率在局域网内也会这么高!

出0入0汤圆

发表于 2019-6-14 11:11:02 | 显示全部楼层
用UDP想要达到TCP的可靠性,自己处理起来可能更麻烦,所做的工作也要多得多
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 21:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表