实战!一次网络问题排查


实战!一次网络问题排查

文章插图
 
为了尽量讲的清晰明了,以下面这个流程进行:
  1. 背景:遇到网络异常
  2. 小试牛刀:在Wireshark数据包中看三次握手
  3. 预备知识:回顾网络分层、三次握手、四次挥手等网络基础知识
  4. 异常定位:Wireshark 分析定位Broken Pipe 异常原因
  5. 代码修复:调整客户端代码
  6. 扩展阅读:其他网络知识及面试题
1. 背景:遇到网络异常1. 异常信息安琪拉做的一部分工作是和公司外部机构对接系统,对接方式很多种,有的机构提供封装好的SDK,有的提供统一网关平台、还有一个接口一个HTTP URL等 。涉及到的应用层协议主要有https、http、sftp、ftp等 。最近对接的一家机构生产环境联调日志出现了网络异常,异常栈如下:
实战!一次网络问题排查

文章插图
 
网络异常栈
第一眼看异常栈直译过来就是管道破裂,为什么会出现管道破裂呢?这篇文章就由此而来,背后牵涉的是我们常常挂在嘴边,面试也经常被问的http 和 tcp 协议的知识,这里埋个伏笔,后面我们由浅入深,慢慢把这个问题解决,同时了解如何运用网络知识解决实际网络问题 。
安琪拉遇到异常是很兴奋的,又可以学知识了,咳咳哈!当然咯,前提是不影响到正常业务 。这里现象是每个http 请求发起总是失败,请求重试大概率会成功 。
闲扯一段:其实一般应用本地的异常还是比较好排查的,像空指针、内存溢出、数组越界等都比较好搞!网络问题,尤其是跟外部公网打交道的网络问题有时间还是会稍微棘手的,因为公网环境比较复杂,中间涉及的跳转节点比较多,很考验工程师网络问题定位的水平 。
安琪拉知道运维中有个词叫根故障定位,实际生产中很多异常的根故障最后都会定位到网络这一层 。
想说点题外话,安琪拉工作这几年的一点体会,工程师的能力分二种,有一种能力叫掌握知识的能力,也叫学习能力,另一种能力叫解决问题的能力,学生时代前一种能力很容易体现,成绩和分数,而工作以后,公司更关注或者说更看重的是解决问题的能力,因为企业招工程师最终还是为了创造业务价值,创造业务价值就需要不断解决实际业务的一个一个问题,不论是新业务需求还是系统bug都可以看做是面临的问题 。当然这二种能力不是完全割裂的,往往相辅相成,解决问题能力强的人学习能力不会弱 。只是看个人更偏重哪一方面? 学习能力强的人适合做学术型人才,解决问题能力强的适合做工程型人才 。
闲扯扯完了,舒服! 发现写体会、感受比写技术文章轻松流畅多了!技术需要严谨细致,体会感受就很个人,很感性的东西,对错因人而异!
2. 网络抓包遇到上面Broken Pipe这个问题,不急,第一步企微上撩一下运维大哥,让他帮我抓个包下来看下 。
实战!一次网络问题排查

文章插图
 
抓包聊天截图
抓包命令如下:
1tcpdump tcp port 20004 and host  **.**.com -w brokenpipe.cap        
tcpdump : dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具 。
大家也可以边看边自己抓包,常用的命令格式如下:
1tcpdump tcp port 端口号 and host 域名 -w  保存文件如果网络流量高,不要抓太久,不然包会很大,分析的时候加载慢!
tcpdump 完整命令可以用tcpdump --help 查看 。
2. 小试牛刀:在Wireshark数据包中看三次握手之前如果没有用过Wireshark 做过网络包分析的,安琪拉担心直接上来就看包分析有点费劲,下面安琪拉会对wireshark 先做个简单的介绍 。
2.1 Wireshark 简介首先,把运维给的包存在本地,打开wireshark 导入网络包,开始有趣的网络漫游之旅 。
wireshark 是一款非常流行的网络包分析工具,经常是网络工程师/后端工程师用来分析网络包,解决网络问题的利器 。先放一张图出来闻闻味:
安琪拉截了一张自己本机装的 wireshark 软件,分为四个部分:
  1. 顶部是菜单栏
  2. 浅绿色背景是过滤器,这个对于分析包很重要,后面会讲
  3. 列表那一栏是包列表信息
  4. 最下面的这个是包详细信息,包含各层协议的内容(应用层、传输层、网络层、数据链路层、物理层)


    推荐阅读