网络抓包这个话题,有一定开发经验的多少都有所了解,常用软件Wireshark,Fiddler用起来也非常傻瓜,本文不会涉及。 一般的介绍网络抓包的文章,到能抓到数据包通常就结束了。但显然认识工具是一会儿事儿,理解本质,清楚实践中啥时候该用,是另外一会儿事儿。让新人小白自行举一反三,可能多少有些困难。
近期正好参与了一些网络相关问题的排查, 在此从实践角度备忘下,网络抓包的本质意义,以及使用中的一些具体问题。
一. 分歧终端机——抓包
开发A: 我给你发了a,b和c
开发B: 我没收到b ,你肯定漏了。
开发A: 我肯定发了,我日志写了
开发B: 你肯定没发,我的日志只有a,b
……发了!没发!发了!没发!我不管了!我也不管了!
以上场景有些阅历的同志,应该都似曾相识。这种到底发了没发,收了没收的问题。打官司打到你那里,要如何断案呢?
如果双方都开源可见,人都在你治下,可以看看两边代码, 日志可能写的位置不正确,不是发送的最末端,或者接收的最前端,还可能可以解决。
如果是你调用第三方黑盒,可能就不那么配合了。
你:发你们这个指令你们没反应啊
第三方:你程序逻辑问题吧。
你:真发了,我日志你看。
第三方:你日志写的不对。
你:我日志写的对,不信你看代码。
第三方:看不懂,别人都没问题。你可能网络有问题……
你:我网络没问题。
第三方:设备可能信号不好吧, 你拿着它移动下。。。多移动下。
此时就需要引入权威第三方,网络抓包工具。做web开发的同学可能并没非常清楚的意识到,浏览器的请求网络调试功能,就是一个简单易用的抓包工具,所以Web页面调试,只需要看浏览器的网络调试,究竟是发的有问题还是接收处理问题,一目了然,很少扯皮。
对于非web开发的同学,就没有这么好的调试基础设施了。Wireshark之类的抓包工具,其实就是实现了操作系统层面的网络调试工具。
抓包工具是调试双方的双向代理人, 究竟谁给谁发了啥,或者没发啥。它一清二楚,有最终解释权。 同时,抓包工具能够暴露更多的细节,TCP协议如今被广泛使用,对于发了,发不到,或者延时很大,能够观察到TCP协议层次的传输控制过程。
总结来说,通过在两端之间放置抓包工具可以分析,全部的通信异常的情况:发没发出,发没发到,传输质量如何。
对于前面说的类型的官司,可以让他们装个抓包工具自己看。涉及第三方的 ,出示下抓包日志,也会让对方不把你作为新手小白, 重视你反馈的问题。
二、网络链路问题排查实践
现实中的问题通常比书本上复杂。 通信不会简单的发生于两个PC之间,只需要简单的各装一个抓包软件就能够使得通信过程一目了然。
你需要找出通信问题的设备其中一端,可能是一个封闭系统,甚至嵌入式设备。封闭的系统上无法安装常规的抓包软件。分为几种情况。
1. 接入同一个集线器
集线器实际已经淡出历史舞台了,但是它可以让我们理解局域网抓包的原理及限制。
集线器不具备智能转发功能,会将一个端口(物理)接收到的数据,广播至所有连接的端口。收到的网卡会根据MAC地址,忽略不是发给自己的包。(能收到只是自觉忽略)
网卡混杂模式,设置为混杂模式,会使得网卡不再直接忽略与自己无关的数据包,所有流经数据包都能够被捕获。
因为,集线器不智能,所以抓包变得很简单。只要插到相同的集线器上,所有发给调试设备和调试设备发出的网络数据包,都能够抓包PC的网卡捕获,从而实现抓包分析。
2. 接入同一个交换机
交换机比集线器智能了一些,其中的一个特性就是,智能转发, 该发给那个口的包,就发给那个口。交换机不再无脑广播。
导致了,按照交换机的接法,只简单连接,已经无法抓包了。因为待调试设备的数据包,并不会流经抓包pc接入的插口的网线,确实更安全了。
但因为有时候网络监控又是正义且合理的需求,于是交换机,多数具有一个类似于端口镜像或者端口监控的功能。
其作用是将被监控端口的流量,复制到监控端口, 使得监控端口的网卡,可以捕获数据包。
在交换机设置中,打开对应的功能,又可以抓包啦。注意端口指的是物理插口,不要与网络端口混淆。
3.接入Wi-Fi
通过Wi-Fi抓包又引入了一些不同,比较靠谱的方案是在上级交换机进行端口镜像,Wi-Fi路由器设置为AP模式,无线转有线,相对简单易于理解。
对于通过无线Wi-Fi进行抓包,我并没有做过实际测试,仅做原理性的讨论。
物理上 Wi-Fi路由器有支持多频的,2.4G与5G。 连接两个频段的设备,我理解应该是不能捕获对方数据包的。
有鉴权加密的Wifi 路由器,需要用户名密码的, 会在通信时叠加应用加密协议。可能可以抓包,但应该无法解密。知道用户名密码,理论上可以,要额外根据wifi加密协议进行解密。
对于开放的Wi-Fi,无鉴权,不加密,对于连接在同频段,频道的设备,应该是可以捕获其他设备的数据包,正常的抓包。
~实际情况如何,望有实际经验的大神补充