马上:网络故障排查的思路和方法

马上:网络故障排查的思路和方法

安卓日常开发工作中,总会遇上些网络问题需要排查清楚。比如我遇上了,线上app网络状态是良好的,但是上传日志失败、接口404但公司网络能请求成功200、直播推流失败、耗流量大、MQTT连接异常…

基本网络知识

  • 了解网络通信的基础设备和其对应的OSI层次

    • 最基本的网络设备交换机、三层交换机、路由器、防火墙。
    • OSI七层模型中的数据链路层、网络层等
    • TCP/IP五层和四层网络模型
  • 网络的基本架构

    • 网络组网的经典模型,接入层-汇聚层-核心层-出口层 (中小型企业网络)
    • 如我了解的学校接入网一般为大二层和三层组网两种模式

网络排错基本思路

  • 检查物理链路是否有问题 (就是网线,网口,网卡,WIFI,路由器,这个很好排查,对比一下正常的)
  • 检查本机IP地址、路由、DNS、网关、子网掩码、DHCP或静态IP设置是否有问题
  • 检查ping公网ip的通畅情况 如(114.114.114.114)
  • 检查DNS的通畅情况,可以直接ping网站,但是有些网站限制ping

需要注意:关注数据走向,必须先检测网络物理链路,设备的网卡,网线(检查水晶头、网线的连接、网线的质量),设备连接的交换机和路由器

基本网络命令

网络命令有很多,这里只是提及Android7.12下的常用命令,如跟踪路由命令window的tracert和mac的traceroute,arp等命令不细说

ping 命令,太常见了!top1

ping 网关地址或局域网已知IP,是否有响应判断设备是否联通,否可以使用arp命令
ping 公网IP 如114.114.114.114,能通,能基本说明网络是没有问题的(考虑防火墙)

ifconfig命令用于显示或设置网络设备。windows的是ipconfig

arp 命令 是Address Resolution Protocol,地址解析协议,是通过解析网络层地址来找寻数据链路层地址的一个网络协议包中极其重要的网络传输协议。

busybox arp -a  //android 需要安装busybox或使用termux,windows,mac,linux都自带

nslookup 查询DNS的记录,查看域名解析是否正常. 如果ping网站地址不通的话,就需要进行dns检查。

#安卓上没有
nslookup baidu.com 或nslookup交互方式
nslookup baidu.com 114.114.114.114  指定DNS服务器

关于DNS记录的type,A 地址记录(直接查询默认类型IPV4),AAAA 地址记录(IPV6),CNAME等

dig 也是查询DNS的流行神器

#安卓需要使用termux
dig @8.8.8.8 baidu.com

netstat命令用于显示各种网络相关信息

netstat

Display networking information.
-r  Display routing table.
-a  Display all sockets (Default: Connected).
-l  Display listening server sockets.
-t  Display TCP sockets.
-u  Display UDP sockets.
-w  Display Raw sockets.
-x  Display Unix sockets.
-e  Display other/more information.
-n  Don't resolve names.
-W  Wide Display.
-p  Display PID/Program name for sockets.

iftop — 网络带宽监控

iftop

Display
               Rx                              Tx
name     MTU   bytes      packets  errs  drpd  bytes      packets  errs  drpd
lo       65536 131644     249      0     0     131644     249      0     0
eth0     1500  8016       107      0     0     124234     136      0     0

线上案例分析

某地区的安卓发起直播失败

Android7.12系统, app 通过推流sdk发起直播,观看识别==推流失败,回捞日志sdk确实是推流时链接失败。

由于sdk只能提示链接失败,需要进一步排查

  1. 先排查设备的网络是否联通公网,是否能ping通推流地址,这里使用的是阿里云rtmp,默认端口1935,windows telnet命令.或者在线网站检测端口是否开放。防火墙没问题!进行下一步

  2. 同一网络下直播推流工具对比:

    安卓:sdk推流失败

    安卓:FFmpeg推流失败,有具体的错误信息:RTMP handshake response 失败

    PC:FFmpeg 推流直播成功;

    PC:sdk 推流直播成功;

  3. 工具问题不大,同一网络下直播推流运营商对比:

    安卓:sdk&FFmpeg推流阿里云失败

    安卓:sdk&FFmpeg推流腾讯云成功

    PC:sdk&FFmpeg推流阿里云成功;

    PC:sdk&FFmpeg推流腾讯云成功

结论:TMD太奇怪了,让平台同事配置腾讯云的流地址来用

某地方访问业务接口404, 公司网络能访问

由于公司服务器禁止ping, 所以排查方式,先直接喊用户打开浏览器,输入域名官网web地址,结果也是404 , 排查了DNS设置无问题。找运维看,结果说服务器已经返回200,TMD。

由于没电脑,app运行智能终端上,那定位一下问题所在,解决问题吧。前面确定了设备的DNS,8.8.8.8,常用DNS服务器,访问其它网站是欧凯的。这里我猜测是DNS解析出了问题。我通过 IP/IPv6查询,服务器地址查询 得到IP地址,通过IP地址打开网站,发现是欧凯的,那就是域名DNS问题交给运维去解决。在解决问题的过程中我去了解JAVA、安卓的DNS底层实现。这里不具体展开,查看我的另一博文记录。Android DNS解析过程

耗流量大

要用抓包工具来分析,Wireshark工具,charles 工具,安卓上的抓包精灵,VNET 等工具。

结果分析, 平台业务数据有缺陷,img地址的文件是视频文件,导致图片框架加载失败,不断重试。

MQTT异常

Wireshark工具,抓包发现, 握手(CONNACK) ,服务器并没有返回CONNACK消息作为响应,导致超时断连。

参考网站

ipv6test

test-ipv6

一文看懂网络七层协议/OSI七层模型

cloudflare&DNS

diggui

windows & linux dig download

ping & net

MQTT心跳

mqtt

你可能感兴趣的:(Android,马上,网络,网络协议,运维)