一站式学习Wireshark第四章

作为网络管理员,很多时间必然会耗费在修复慢速服务器和其他终端。但用户感到网络运行缓慢并不意味着就是网络问题。

解决网络性能问题,首先从TCP错误恢复功能(TCP重传与重复ACK)和流控功能说起。之后阐述如何发现网络慢速之源。最后,对网络各组成部分上的数据流进行概况分析。这几张内容将会帮助读者识别,诊断,以及排查慢速网络。

更多信息
接下来的内容,较多是黑白图片了。虽然看起来有点不爽,但还是很值得一看。

TCP错误恢复功能:

TCP的错误恢复功能是定位,诊断及修复网络延时的最佳工具。延时可以在单程也可以往返方向测量。高延时是网络管理员的头号大敌。本节我们讨论TCP高延时是如何导致序列号和确认号乱序的。

TCP重传:

主机报文重传是TCP最基本的错误恢复功能,它的目的是防止报文丢失。

报文丢失的可能因素有很多种,包括应用故障,路由设备过载,或暂时的服务宕机。报文级别速度是很高的,而通常报文丢失是暂时的,因此TCP能够发现和恢复报文丢失显得尤为重要。

决定报文是否有必要重传的主要机制是重传计时器(retransmission timer),它的主要功能是维护重传超时(RTO)值。当报文使用TCP传输时,重传计时器启动,收到ACK时计时器停止。报文发送至接收到ACK的时间称为往返时间(RTT)。对若干次时间取平均值,该值用于确定最终RTO值。在最终RTO值确定之前,确定每一次报文传输是否有丢包发生使用重传计时器,下图说明了TCP重传过程。

当报文发送之后,但接收方尚未发送TCP ACK报文,发送方假设源报文丢失并将其重传。重传之后,RTO值加倍;如果在2倍RTO值到达之前还是没有收到ACK报文,就再次重传。如果仍然没有收到ACK,那么RTO值再次加倍。如此持续下去,每次重传RTO都翻倍,直到收到ACK报文或发送方达到配置的最大重传次数。

最大重传次数取决于发送操作系统的配置值。默认情况下,Windows主机默认重传5次。大多数Linux系统默认最大15次。两种操作系统都可配置。
示例如下图:

TCP重传过程发送的第一个报文如下图所示(图片不很清楚,已经尽力了):

这是一个TCP PSH/ACK报文①,包含648字节数据②,从10.3.30.1发送至10.3.71.7。这是一个典型的数据报文。

在通常情况下,第一个报文发送之后很快会收到TCP ACK报文。然而,在这个case里,第二个是重传报文。可以在Packet list面板里看到。Info栏清楚的标明“TCP Retransmission”,报文以黑色背景红色字体标出。下图是Packet List面板中的重传示例(仍然不清楚,但可参见上图):

也可以在Packet Details和Packet Bytes面板中查看来确定是否是重传报文,如下图所示:

注意此报文与源报文相同(除了IP标识和checksum字段)。要验证这一点,比较两个报文的Packet Bytes①。

在Packet Details面板,注意到重传报文在SEQ/ACK Analysis下面有些额外的信息②。这些信息是由Wireshark提供的而并非报文本身。SEQ/ACK Analysis告诉我们这确实是一个重传报文,RTO值是0.206秒,此时的RTO是基于报文1的时间增量。

检查剩下的报文会得到类似的结果,不同之处只有IP标识和checksum,以及RTO值。要使报文之间的时间间隔形象化,在Packet List面板中查看Time栏,如下图所示。这里可以看到RTO值的翻倍增长关系。

TCP重复ACK以及快速重传:

重复ACK是指在接收方收到乱序报文时,所发出的一类TCP报文。TCP使用报文头的序列号和确认号以有效保证数据按照发送的顺序接收和重组。

当TCP连接建立以后,握手过程中交换的一个最重要的信息是初始序列号(ISN)。一旦连接双方设定了ISN之后,接下来发送的报文所包含的序列号增加一个数据载荷值。

假设有个主机ISN是5000,发送500字节报文至接收方。一旦报文接收之后,接收端回复一个ACK号为5500的TCP ACK报文,基于以下公式:

Sequence Number In + Bytes of Data Received = Acknowledgment Number Out

按照上述计算结果,返回发送端的确认编号实际上是接收端希望收到的序列号。示例如下图:

数据接收方通过序列号来检查报文丢失。接收方通过追踪接收到的序列号,能够确认序列号是否乱序。当接收方收到一个不正常的序列号,它会假设传输过程中有报文丢失。为了正确重传数据,接收方必须拥有丢失报文,所以它发送包含有丢失报文正确序列号的ACK报文,以便发送方重传此报文。

当重传主机从发送端接收到3个重复ACK时,它会假设此报文确实在传送中丢失,并且立即发送一个快速重传。一旦触发了快速重传,所有正在传输的其他报文都被放入队列中,直到快速重传报文发送为止。过程如下图所示:

承接上文的彩图:

本例中第一个报文如下图:

这是一个TCP ACK报文,从数据接收端(172.31.136.85)发给发送端(195.81.202.68)①,确认前一个报文所发送的数据。
此报文中的确认编号是1310973186②,应当是下一个接收报文的序列号,如下图所示:


不幸的是接收端的序列号是1310984130①,并不是所期望的值。这意味着报文在传送中丢失。接收端注意到报文乱序,并且在第三个报文中发送重复ACK,如下图所示:

可以通过以下两种方式之一来确认这是一个重复ACK:

在Packet Detaisl面板中的Info栏。报文呈现黑色背景红色字体。

SEQ/ACK Analysis下的Packet Deatails面板。扩展这一栏会发现报文显示为duplicate ACK。接下来几个报文重复此过程。如下图所示:

此文件中的第四个报文是发送端所发出具有错误序列号①的另一个数据块。因此,接收端发送第二个重复ACK②。接收端又收到一个乱序报文③。从而触发了第三以及最后一个重复ACK④.

一旦发送方接收到接收方所发来的第三个重复ACK,它就会暂停所有传输报文并且重传丢失报文,下图显示了快速重传过程:

重传报文同样可以通过Packet List面板的Info栏观察到。报文呈现黑色背景红色字体。这个报文的SEQ/ACK Analysis截面告诉我们这可能是一个快速重传帧。(标识报文为快速重传的信息不是报文本身所包含的内容,而是Wireshark的功能)。最后一个报文是接收到快速重传的ACK。

时间: 2024-11-07 13:43:47

一站式学习Wireshark第四章的相关文章

一站式学习Wireshark(四):网络性能排查之TCP重传与重复ACK

作为网络管理员,很多时间必然会耗费在修复慢速服务器和其他终端.但用户感到网络运行缓慢并不意味着就是网络问题. 解决网络性能问题,首先从TCP错误恢复功能(TCP重传与重复ACK)和流控功能说起.之后阐述如何发现网络慢速之源.最后,对网络各组成部分上的数据流进行概况分析.这几张内容将会帮助读者识别,诊断,以及排查慢速网络. 更多信息接下来的内容,较多是黑白图片了.虽然看起来有点不爽,但还是很值得一看. TCP错误恢复功能: TCP的错误恢复功能是定位,诊断及修复网络延时的最佳工具.延时可以在单程也

一站式学习Wireshark第五章

TCP通过滑动窗口机制检测丢包,并在丢包发生时调整数据传输速率.滑动窗口机制利用数据接收端的接收窗口来控制数据流. 接收窗口值由数据接收端指定,以字节数形式存储于TCP报文头,并告知传输设备有多少数据将会存储在TCP缓冲区.缓冲区就是数据暂时放置的地方,直至传递至应用层协议等待处理.因此,发送端每次只能发送Window Size字段指定的数据量.为了使发送端继续传送数据,接收端必须发送确认信息:之前的数据接收到了.同时必须对占用缓冲区的数据进行处理以释放缓存空间.下图显示了接收窗口是如何工作的:

一站式学习Wireshark第七章

Summary: 从statistics菜单,选择Summary: 如下图的截屏所示,你会看到: File: 捕捉文件的一般信息,如文件名和路径,长度,等等 Time: 第一个包和最后一个包的时间戳,以及抓包过程持续时间 Capture: 显示文件捕捉于哪一个接口,以及评论窗口 在窗口的较低部分是Display窗口,展示抓包文件统计信息的摘要,包括: 捕捉报文的总数与百分比 显示报文的数量(加上过滤条件之后) 标记报文的数量 何时使用: 这一菜单简单收集所有抓包数据,在定义了过滤条件的时候,将呈

一站式学习Wireshark第三章

基本IO Graphs: IO graphs是一个非常好用的工具.基本的Wireshark IO graph会显示抓包文件中的整体流量情况,通常是以每秒为单位(报文数或字节数).默认X轴时间间隔是1秒,Y轴是每一时间间隔的报文数.如果想要查看每秒bit数或byte数,点击"Unit",在"Y Axis"下拉列表中选择想要查看的内容.这是一种基本的应用,对于查看流量中的波峰/波谷很有帮助.要进一步查看,点击图形中的任意点就会看到报文的细节. 为了讲解方便,点击示例报文

一站式学习Wireshark第六章

在某些情况下,丢包可能并不是造成延时的原因.你可能会发现尽管两台主机之间通讯速度很慢,但这种慢速并没有伴随着TCP重传或是重复ACK的征兆.在这种情况下,需要使用另一种方式来定位高延时点. 查找高延时点最有效的方法之一是检查最初的握手信号以及跟随其后的几个报文.例如,一个简单的客户端与网络服务器的连接,客户端尝试通过浏览器访问网络服务器的站点.我们只关心这一通信序列的前六个报文,包括TCP握手过程,首次HTTP GET请求,对此GET请求的确认,以及从服务器发至客户端的第一个数据报文. 更多信息

《Linux内核设计与实现》第八周学习总结——第四章 进程调度

<Linux内核设计与实现>第八周学习总结——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发行的效果. 调度程序没有太复杂的原理,最大限度地利用处理器时间的原则是只要有可以执行的进程,那么就总会有进程正在执行,但是只要系统中可运行的进程的数目比处理器的个数多,就注定某一给定时刻会有一些进程不

一站式学习Wireshark(一):Wireshark基本用法 | 快课网

body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;

“AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (上)

“AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (上) 原作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com 一提到“A*算法”,可能很多人都有"如雷贯耳"的感觉.用最白话的语言来讲:把游戏中的某个角色放在一个网格环境中,并给定一个目标点和一些障碍物,如何让角色快速“绕过障碍物”找出通往目标点的路径.(如下图) 在寻路过程中,角色总是不停从一个格子移动到另一个相邻的格子,如果单纯从距离上讲,移动到与自身斜对角的格子走的距离要长一些,

2019-2020-1学期 20192415 《网络空间安全专业导论》第一周学习总结 第四章

2019-2020-1学期 20192415 <网络空间安全专业导论>第二周学习总结 第四章 门与电路 硬件元件,用电信号表示操作二进制值 4.1 计算机与电学 信号电平区分信号的值: 0~2伏为低电压,由二进制数字0表示 2~5伏为高电压,由二进制数字1表示 门(gate):对电信号执行基本运算的设备. 电路(circuit):相互关联的门组合,用于实现特定的逻辑函数. 表示法: 布尔代数--用数学符号定义和操作逻辑电路 逻辑框图--图形化表示(特定) 真值表--列举,定义功能 注:三种表示