如果没有更多数据 , 连接可被终止 , 类似于TCP三次握手信号的SYN和ACK报文 , 这里发送的是FIN和ACK报文 。当服务器结束传送数据 , 就发送FIN/ACK给客户端 , 此报文表示结束连接 。接下来客户端返回ACK报文并且对FIN/ACK中的序列号加1 。这就从服务器端终止了通信 。要结束这一过程客户端必须重新对服务器端发起这一过程 。必须在客户端和服务器端都发起并确认FIN/ACK过程 。
IO图形工具分析数据流基本IO Graphs:
IO graphs是一个非常好用的工具 。基本的Wireshark IO graph会显示抓包文件中的整体流量情况 , 通常是以每秒为单位(报文数或字节数) 。默认X轴时间间隔是1秒 , Y轴是每一时间间隔的报文数 。如果想要查看每秒bit数或byte数 , 点击“Unit” , 在“Y Axis”下拉列表中选择想要查看的内容 。这是一种基本的应用 , 对于查看流量中的波峰/波谷很有帮助 。要进一步查看 , 点击图形中的任意点就会看到报文的细节 。
为了讲解方便 , 点击示例报文包 , 或用自己的wireshark点击Statistics – IO Graphs 。这个抓包是HTTP下载遇到报文丢失的情况 。
文章插图
注意:过滤条件为空 , 此图形显示所有流量 。
这个默认条件下的显示在大多数troubleshooting中并不是非常有用 。将Y轴改为bits/tick这样就可以看到每秒的流量 。从这张图可以看到峰值速率是300kbps左右 。如果你看到有些地方流量下降为零 , 那可能是一个出问题的点 。这个问题在图上很好发现 , 但在看报文列表时可能不那么明显 。
文章插图
过滤:
每一个图形都可以应用一个过滤条件 。这里创建两个不同的graph , 一个HTTP一个ICMP 。可以看到过滤条件中Graph 1使用“http”Graph 2使用“icmp” 。图中可以看到红色ICMP流量中有些间隙 , 进一步分析 。
文章插图
创建两个图形 , 一个显示ICMP Echo(Type=8)一个显示ICMP Reply(Type=0) 。正常情况下对于每一个echo请求会有一个连续的reply 。这里的情况是:
文章插图
可以看到红色脉冲线(icmp type==0 – ICMP Reply)中间有间隙 , 而整张图中ICMP请求保持连续 。这意味着有些reply没有接收到 。这是由于报文丢失导致的reply drop 。CLI中看到的ping信息如下:
文章插图
常用排错过滤条件:
对于排查网络延时/应用问题有一些过滤条件是非常有用的:
tcp.analysis.lost_segment:表明已经在抓包中看到不连续的序列号 。报文丢失会造成重复的ACK , 这会导致重传 。在抓包中应用以上一些过滤条件:
tcp.analysis.duplicate_ack:显示被确认过不止一次的报文 。大凉的重复ACK是TCP端点之间高延时的迹象 。
tcp.analysis.retransmission:显示抓包中的所有重传 。如果重传次数不多的话还是正常的 , 过多重传可能有问题 。这通常意味着应用性能缓慢和/或用户报文丢失 。
tcp.analysis.window_update:将传输过程中的TCP window大小图形化 。如果看到窗口大小下降为零 , 这意味着发送方已经退出了 , 并等待接收方确认所有已传送数据 。这可能表明接收端已经不堪重负了 。
tcp.analysis.bytes_in_flight:某一时间点网络上未确认字节数 。未确认字节数不能超过你的TCP窗口大小(定义于最初3此TCP握手) , 为了最大化吞吐量你想要获得尽可能接近TCP窗口大小 。如果看到连续低于TCP窗口大小 , 可能意味着报文丢失或路径上其他影响吞吐量的问题 。
tcp.analysis.ack_rtt:衡量抓取的TCP报文与相应的ACK 。如果这一时间间隔比较长那可能表示某种类型的网络延时(报文丢失 , 拥塞 , 等等) 。
文章插图
注意:Graph 1是HTTP总体流量 , 显示形式为packets/tick , 时间间隔1秒 。Graph 2是TCP丢失报文片段 。Graph 3是TCP 重复ACK 。Graph 4是TCP重传 。
推荐阅读
- 简单了解十大真实算法的特点
- 前端三大框架之React前世今生
- 深入搜索引擎原理
- Python爬虫之模拟知乎登录
- php输出之echo和print语句
- 明日之子第5季 明日之子第五季什么时候开播
- 中国茶文化之,茶道篇
- 地下城与勇士|DNF:职业转换之间的不同改变点,转职书使用应该这样考虑
- 喝醉了之后吃什么解酒最快
- 云南滇红的品质