什么是网卡(当你有多个网卡时会发生什么)
admin
2023-09-02 06:02:42
0

IPv4地址集中有两个特殊地址:0.0.0和127.0.0.1。你知道他们的目的吗?输入netstat-ano来查找标有LISTEN的前几行,这表示本地系统打开了TCP4服务。通稿显示,38127、111、37681等地方端口已经开通。这些端口可以从外部访问吗?为什么有的端口前面是0.0.0.0,有的是127.0.0.1?

如果你能轻松回答以上问题,说明你已经不是网络基础小白了,可以跳过这篇文章,但是如果你不能,我想下面的工程实践可以给你解释清楚。另外你还能学到我的排查思路.

基本解释

127.0.0.1被称为本地环回地址,用于测试协议栈的正确性。不取决于硬件上有没有网卡,也不取决于硬件上有没有网卡,相当于用一根看不见的网线连接了网卡的发送和接收。

0.0.0.0被称为任意地址.如果一个以太网设备中有多个物理网卡,则意味着只要在本地打开相应的端口服务,无论哪个网卡发起连接请求都是允许的。如果你想限制一个服务只允许外部设备从指定的网卡入口发起访问,就把它配置成特定网卡的IP地址,如稿件插图中箭头那一行所示。端口8081只允许从IP地址为192.168.2.3的网卡入口发起。

写IPv4TCP应用的时候,把地址和端口绑定起来,形成一个服务。下面的文本显示INADDR_ANY参数是最常用的,bind & quot任何地址& quot。本文接下来内容讲述,当绑定地址非INADDR_ANY时会引起什么现象、以及如何排查和解决.

真实场景排查

前几天我在构建MQTT平台mosquitto:服务器只能向自己的环回地址127.0.0.1地址发起连接,连接本地地址192.168.81.198则失败.时遇到了一个问题问题的原因与默认路由有关。

在ARM平台上编译完mosquitto之后,我当然会在ARM上测试一个服务是否正常,显然是成功的。同样,我把测试程序复制到其他主机上运行,客户端提示无法连接,服务器界面也没有打印异常信息。嵌入式工程师祖传DNA回应:“Itworkonmymachine”.首先两端执行ping命令检查网络连接状态,排除防火墙和路由表的配置,没有发现明显异常。

然后我决定在服务器上再测试一次,只是这次我换了本地网卡的地址。

strace登场!没抓到accept

在客户端之前标注回环地址码,将主机修改为本地网卡地址192.168.81.198,重新编译执行。

//# define host ' localhost '/# define host ' 127 . 0 . 0 . 1 ' # define host ' 192 . 168 . 81 . 198 '哎~我还提示Unabletoconnect。我已经见过你很久了。是因为自己访问自己的服务居然也会失败!'s权限不足,服务器拒绝吗?为了搞清楚服务器做了什么,我用stracemosquitto重启了服务器,试图捕捉应用的执行轨迹,屏幕有规律的滚动epoll_wait信息,提示服务器进入了epoll循环。

当客户端承诺Unabletoconnect时,strace没有从服务器捕获任何违反规则的系统调用,比如TCP必须使用的accept。

为了证明正常连接发生时服务器会执行系统调用accept,我把主机修改为127.0.0.1然后又用strace抢了一次。果不其然,我看到了接受的身影(可以看到在第四步手稿图中标注的)。

所以当我发起连接到网卡地址192.168.81.198的时候,服务器应用根本没有收到协议栈的数据,然后我打开Wireshark抓取TCP数据,探究数据交互过程中发生了什么。

Wirshark登场!RST、ACK

Wireshark默认拦截物理网卡的数据。物理网卡是wlp3s0,如下所示。虽然实验启动了到本地网卡地址192.168.81.198的连接,但实际上,数据并没有& quot通过物理网卡& quot,它在协议栈中被路由并被切换到环回地址。

Wireshark操作界面选择抓取界面Loopback:lo。

将客户端发起的连接拦截分别与127.0.0.1和192.168.81.198进行比较。连接环回地址可以成功完成三次握手(对应序列号21:syn;22:SYN、ACK23: ack),但与本地网卡的连接被重置(对应序列号15:sync;16:RST、ACK)。

重置连接的原因可能是IP不存在、服务器未启动、此端口上没有服务或者连接被防火墙过滤。鉴于已经排除了防火墙,剩下的大概就是本地服务器套接字设置了。输入“netstat-ano|grep1883”来检查MQTT监听端口的状态。

原因找到了。本地监听地址是127.0.0.1:1883,不是0.0.0.03601883,所以拒绝任何外部连接。

解决

2>

怎么处理呢?测试环境下mosquitto是不带任何参数的,想必可以传递参数、配置文件灵活的更改mosquitto的特性。注意到另外一台x86平台Linux系统上已经搭建好mosquitto,ps-aux查看mosquitto的启动参数,“mosquitto-c/etc/mosquitto/mosquitto.conf”。x86平台下的mosquitto.conf文件内容短小且没有任何注释信息,也没看到看似监听配置的关键词。

同目录下还有另一个文件mosquitto.conf.example,他的内容要丰富得多,有详细的介绍。

OnsystemsthatsupportUnixDomainSockets,itisalsopossibletocreateaUnixsocketratherthanopeningaTCPsocket.Inthiscase,theportnumbershouldbesetto0andaunixsocketpathmustbeprovided,e.g.listener0/tmp/mosquitto.sock

listenerport-number[ipaddress/hostname/unixsocketpath]

按照说明,重新编辑mosquitto.conf.example文件添加下面两行,配置文件传递给服务器应用程序解析,netstat查询到0.0.0.0:1883监听,最后连接本地地址192.168.81.198成功。

#mosquitto.conf.examplelistener18830.0.0.0allow_anonymoustrue

相关内容

热门资讯

实测分享“珊瑚互娱到底是不是有... 您好:珊瑚互娱这款游戏可以开挂,确实是有挂的,需要软件加微信【8700483】,很多玩家在珊瑚互娱这...
玩家必看“阿拉斗牌透视挂辅助软... 您好:阿拉斗牌这款游戏可以开挂,确实是有挂的,需要软件加微信【8700483】,很多玩家在阿拉斗牌这...
科普实测“天酷大厅透视挂辅助安... 您好:天酷大厅这款游戏可以开挂,确实是有挂的,需要软件加微信【8700483】,很多玩家在天酷大厅这...
今日重大通报“新乐游牛牛到底有... 您好:新乐游牛牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8700483】很多玩家在新乐游...
实测分享“天道联盟透视挂辅助安... 您好:天道联盟这款游戏可以开挂,确实是有挂的,需要软件加微信【8700483】,很多玩家在天道联盟这...