TCP之在途字节数

在途字节数(bytes in flight):已经发送出去,但尚未被确认的字节数。
数据发送方抓到的包才能用来分析在途字节数。

下图是在客户端抓的包:

image

假如我们想知道第0.400000秒时的在途字节数,该如何计算?

在该时间点之前客户端发送的是10号包,即”Seq=265248,Len=180”字节,表示序号在265248+180之前 的字节已经发送出去了。而第0.400000之前的服务器的Ack为3284,表示序号在3284之前的字节已经收到,那么在途字节数就是265248+180-3284=262144字节。

公式可以表示为: 在途字节数=Seq + Len - Ack(Seq和Len是来自上一个数据发送方的包,而Ack则是来自上一个数据接收方的包)

再看一个例子:
image
如果我们要求0.460000秒的在途字节数,套用公式,0.460000秒的上一个数据发送方的包是9号包,上一个数据接收方的包为6包。则在途字节数为1+6-1=6

我们也可以使用Wireshark提供的功能来查看在途字节数,这样就不用我们手动来计算了。
1.使用Wireshark打开所抓的包。
image
2.点击菜单栏【编辑】—> 【首选项】—>【Appearance】—> 【Columns】
image
3.点击+号,添加自定义列。
image

4.保存,移动新列【byte in flight】到合适位置。这列显示的数据就是对应时刻的在途字数,单位为字节。 如图可知结果和我们使用上面公式计算的结果是一致的。
image


Ref:
1.《Wireshark网络分析的艺术》
2.https://www.youtube.com/watch?v=sIxv3YO2eYw