草庐IT

网络连通性测试(ping/tcp)(qnx和android能ping通但是tcp有问题)

追梦-北极星 2023-04-21 原文

问题引申:

qnx和android之间通过socket做一些远程调用,一开始android只有一个网络接口eth0,两者通信没有问题。 后来android系统需要做多vlan,eth0依然是0网段的ip,又在eth0基础上虚拟了多个vlan接口,两个系统起来后能正常ping通,走0网段,但是应用侧反应change合入后,双方的socket通信能连接上但是无法正常通信。

最终分析结果:

根据netstat -n命令,发现tcp的连接状态,发现建立连接的两个网段都不一样,这样铁定不能通信的。

经过分析,因为我们qnx系统除了网段0,也创建了个vlan3的3网段;android也有网段0,vlan3的网段3网段,还有其他多个vlan,这样的话,android和qnx系统会有两个网段能通。

默认情况下应该是通过0网段通信,经分析,应该是android作为tcp server,监听any接口, qnx这边网段3先建立,所以qnx的数据走的是3网段,发出了3网段的请求连接,后面再次创建规则0网段优先,所以3网段的。

等会儿再继续想一想

# netstat -n
Active Internet connections
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 172.20.0.34.30501 172.20.3.36.30491 ESTABLISHED
tcp 0 0 172.20.0.34.30501 *.* LISTEN
tcp 0 0 *.20900 *.* LISTEN
tcp 0 0 *.3490 *.* LISTEN
tcp 0 0 *.2049 *.* LISTEN
tcp 0 0 *.111 *.* LISTEN
tcp 0 0 *.5555 *.* LISTEN
tcp 0 0 *.* *.* CLOSED
tcp 0 0 *.22 *.* LISTEN
tcp 0 0 *.8000 *.* LISTEN
tcp 0 0 *.23 *.* LISTEN
tcp 0 0 *.514 *.* LISTEN
tcp 0 0 *.21 *.* LISTEN
udp 0 0 *.* *.*
udp 0 0 239.255.3.1.30490 *.*
udp 0 0 172.20.3.34.30490 *.*
udp 0 0 *.3490 *.*
udp 0 0 *.2049 *.*
udp 0 0 *.1023 *.*
udp 0 0 *.111 *.*
udp 0 0 *.514 *.*
Active Internet6 connections
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp6 0 0 *.111 *.* LISTEN
udp6 0 0 *.* *.*
udp6 0 0 *.1023 *.*
udp6 0 0 *.111 *.*
Active UNIX domain sockets

网络连通性首先要看ping是否能够通

具体场景一: 车机双系统qnx和android的连通性测试

qnx系统里有工具iperf、telenet,android系统里有

iperf3、telnet、nc命令(有些命令需要busybox)

测试TCP连通性:

qnx侧作为iperf server,命令:
# iperf2 -s
Server listening on TCP port 5001
TCP window size: 977 KByte (default)

android使用nc连接,命令:
busybox nc -vv 172.20.0.34 5001
172.20.0.34 (172.20.0.34:5001) open

此时server端会打印,
[ 4] local 172.20.0.34 port 5001 connected with 172.20.0.36 port 35161
地方

项目遇到同事说,tcp连接能连通,但是无法传输数据,虽然很费解,但是还是得测一下

qnx只有telent和iperf2能够进行tcp连接

所以在qnx作为iperf2 server,android作为nc/telent client连接server时,在android侧用tcpdum工具抓包,android侧可以输入一些数据,也可以发送server端

130|hqcos:/ # nc -v 172.20.0.34 5001
nc: Unknown option 'v' (see "nc --help")
1|hqcos:/ # busybox nc -v 172.20.0.34 5001
172.20.0.34 (172.20.0.34:5001) open
11
22
33
44
55
99999999

android侧抓一下tcpdump数据:

hqcos:/ # tcpdump -i eth0 -nn -v host 172.20.0.34 -w /data/88.pcap

使用wireshark打开:

截部分图, 发现数据里面带着我们输入的33、44、9999999发送到了server端,说明tcp数据发送也正常

测试UDP连通性:

qnx侧作为udp server
# iperf2 -u  -s
Server listening on UDP port 5001
Receiving 1470 byte datagrams
UDP buffer size:  163 KByte (default)

android使用nc连接,命令:
130|hqcos:/ # busybox nc -v -u  172.20.0.34 5001                                                                                                                                                          172.20.0.34 (172.20.0.34:5001) open

测试TCP连通性的其他方式:

方式一、iperf3/iperf2可以测试tcp的连接

一方作为server,一方作为client来连接,但是iperf3和iperf2不兼容
server:iperf3/iperf2 -s 172.20.0.36
client: iperf3/iperf2 -c 172.20.0.36 -p 端口

方式二:iperf和telnet

如果一方有iperf3或者iperf2(测试TCP、UDP都可以),另一方有telnet(telnet基于TCP协议)命令

可以一方设置为iperf 的server,比如

iperf3/iperf2 -s 172.20.0.36

另一方(android)用telnet

127|hqcos:/ # busybox telnet 172.20.0.34 5001
Connected to 172.20.0.34

另一方为(qnx)用telnet

# telnet 172.20.0.36 5201
Trying 172.20.0.36...
Connected to 172.20.0.36.
Escape character is '^]'.

有Connected to IP,说明已经TCP连通

方式三、iperf和ssh

一方通过iperf设置为server

另一方通过ssh(TCP协议)来测试连通性

命令:ssh -v ip -p 端口号
在回显中有connection establised表示端口是通的。

方式四:nc工具(既可以测试TCP,可以测试UDP)

nc可以用来聊天,传文件,测试网络连通性

我这儿是两边有一个设备没有nc,所以nc作为client,另一侧server用iperf模拟

1|hqcos:/ # busybox nc -v -w 1 172.20.0.34 -z 5001 172.20.0.34 (172.20.0.34:5001) open

#nc -v 110.242.68.66 80
Connection to 110.242.68.66 80 port [tcp/http] succeeded!

https://www.todocker.cn/404.html

聊天
nc还可以作为简单的字符下聊天工具使用,同样的,server2上需要启动监听:
[root@hatest2 tmp]# nc -lp 1234
server1上传输:
[root@hatest1 ~]# nc 192.168.228.222 1234
这样,双方就可以相互交流了。使用Ctrl+D正常退出。

利用nc传文件:
注意这里要记住的是接收文件的是服务器端,发送文件的是客户端:
服务器端命令:
nc -l ip地址 端口号 > 接收的文件名
客户端命令:
nc ip地址 端口号 < 发送的文件名

有关网络连通性测试(ping/tcp)(qnx和android能ping通但是tcp有问题)的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  3. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  4. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  5. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  6. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  7. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  8. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  9. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  10. ruby - Ping ruby 网站? - 2

    在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准ruby​​ping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类

随机推荐