网络问题排查实战经典案例汇总

现在大部分软硬件系统都是基于网络的 , 有走局域网(私网)的 , 有走外网(公网)的 , 会不可避免地出现很多与网络相关的问题 , 特别是将产品部署到安全级别较高的客户环境中 , 会出现各式各样的复杂网络问题 。今天我们就来分享一下实际项目中遇到的多个网络问题 , 以供参考!

网络问题排查实战经典案例汇总

文章插图
1、windows防火墙拦截了客户端发来的TCP连接请求 , 导致客户端与服务器建链失败
这是一个Windows系统自带的防火墙拦截程序网络数据的例子 。客户端和服务器程序运行在两台Windows电脑上 , 客户端需要连接到远端的服务器上获取数据 , 但客户端始终连接不上远端的服务器 。用Wireshark抓包看 , 客户端给服务器发送TCP三次握手的SYN包 , 服务器始终没有回应 , 导致TCP连接始终无法建立 。
我们先是ping了服务器所在机器的IP地址 , 是能ping通的 。又在服务器所在电脑上使?.NETstat -a命令查看到服务器的9001端口是出于Listening监听状态的 。
如下所示:
网络问题排查实战经典案例汇总

文章插图
 
这就奇怪了 , 服务器的ip能ping的通的 , 服务器的端口也处于正常的监听状态 , 为啥始终没法和服务器建链呢?
后来想到我们在Widnows系统上第一次运行程序时 , 一般都会弹出类似下面的截图:
网络问题排查实战经典案例汇总

文章插图
一般情况下我们使用默认的选择 , 没有全部勾选 , 直接就点击下面的“允许访问”的按钮了 。窗口中提示Windows防火墙已经阻止了部分功能 , 应该是将公网网络和专网网络都勾选上的 , 估计是Windows防火墙将发给该服务器程序的部分数据包拦截了 , 于是将服务器程序所在系统的Windows防火墙关闭 , 然后客户端可以正常连接了 。
其实可以在服务器侧抓包 , 客户端发来的用于三次握手的SYN包 , 服务器所在机器的网卡应该收到了 , 只是向应用层传递数据时数据被防火墙拦截了 。
最终的解决办法是允许该服务器程序能通过防火墙进行通信 , 在控制面板中点击系统和安全->Widnows Defender防火墙->允许应用或功能通过Windows防火墙 , 在打开的界面中找到服务器程序:
网络问题排查实战经典案例汇总

文章插图
将专用网络和公用都勾上 , 点击确定就好了 。即允许服务器程序通过防火墙进行通信 , 防火墙就不会拦截发给服务器的数据包了 。
2、在linux服务器侧抓包选错网卡 , 导致服务器侧的抓包信息与客户端的对不上
客户端和服务器通信的过程中出现了问题 , 导致业务出现了异常 , 于是要在客户端和服务端两侧抓包 , 对照两边的网络数据包 , 看看到底是哪一侧出问题了 。
客户端运行在Windows系统中 , 直接启动WireShark就可以直击抓包了 。服务器运行在远端的Linux系统上 , 需要使用SSH工具远程登录到Linux系统中 , 然后使用tcpdump命令进行抓包 , 然后再将抓包文件下载到Windows系统中 , 然后使用WireShark打开查看 。
打开服务器的抓包文件后 , 发现有问题 , 和客户端抓的数据包对不上 , 服务器侧的抓包文件中显示的服务器IP地址 , 和终端侧抓包文件中显示的服务器IP地址是不一致的 。服务器侧抓到的包中显示的是服务器IP是内网的IP , 而终端侧抓包显示连接的服务器IP是外网的IP , 所以两边对不上的 , 后来想起来可能输入tcpdump命令时选错了网卡导致的 。
后经平台侧的运维同事确认 , Linux服务器上确实有两张物理网卡 , 在Linux命令行中使用ifconfig命令就可以查看到服务器上的网卡信息 , 一个是配置了内网的eth0网卡 , 一个是配置了外网IP的eth1网卡:


推荐阅读