鄂州市门户网站,关于中国幼教网站开发的经验,什么播放器能看无线新闻台直播,绿色食品销售网站建设本文整理自#xff1a;《Wireshark网络分析的艺术 第1版》 作者#xff1a;林沛满 著 出版时间#xff1a;2016-02 我一直谨记斯蒂芬霍金的金玉良言—每写一道数学公式就会失去一半读者。不过为了深度分析网络包#xff0c;有时候是不得不计算的#xff0c;好在小学一年级…本文整理自《Wireshark网络分析的艺术 第1版》 作者林沛满 著 出版时间2016-02 我一直谨记斯蒂芬·霍金的金玉良言—每写一道数学公式就会失去一半读者。不过为了深度分析网络包有时候是不得不计算的好在小学一年级的加减法就够用了。
网络的承载量就是一个需要计算的值。怎样理解这个概念呢如图 1 所示一架波音 747 能够承载上万个小包裹而一架无人机只能承载一个这就反映了它们不同的承载量。换个角度也可以说承载量就是处于运输工具中的货物量即已经从源仓库发货但还没有到达目的地的包裹数量。 图1 和运输机类似网络承载量也可以用已经发送出去但尚未被确认的字节数来表示。在英文技术文档中形象地用“bytes in flight”来描述它我觉得用“在途字节数”来翻译最好。
飞机如果超载了是会发生严重事故的。而在途字节数如果超过网络的承载能力也会丢包重传这就是我们需要计算它的原因。怎么计算呢假如网络上只有一个 TCP 连接在通信那么还可以通过带宽和延迟来计算最多能承载多少在途字节数。而实际环境往往如图 2 所示同一条网络路径是由多台主机之间共享的根本不知道多少比例的带宽是分配给某个 TCP 连接。这时候就需要用到网络神器 Wireshark 来分析了。 图2 分析之前要先抓包。应该在哪一端抓呢我们先两边都尝试一下。上文《书上错了吗》已经交代过网络延迟会导致同样的网络包在两端体现出不同的顺序并用下面的图 3 演示 图3 我在图 3 的服务器上随机挑选一个时间点并标志为 T1。由于服务器在该点之前收到 8 号包并立即回复了“Ack 9”表示 9 号之前的包都收到了所以在途字节数为 0。也就是说在数据接收方抓的包里是看不到在途字节数的没有分析意义。
接着我在图 3 的客户端随机挑选一个时间点并标志为 T2由于在该时间点之前 10 号包已经发出去但收到的“Ack 7”只表示 7 号之前的包都收到了也即意味着 7、8、9、10 号包都还没有确认所以在途字节数就是这 4 个包所携带的数据量。这说明在数据发送方抓到的包才能用来分析在途字节数。
从模型图中理解了原理接下来就可以用 Wireshark 来分析真实的包了。图 4 是在客户端数据发送方抓到的如果我们想知道第 0.400000 秒时的在途字节数应该如何计算呢 图4 在该时间点之前客户端发送的是 10 号包即“Seq265248Len180”字节表示序号在 265248180265428 之前的字节已经发送出去了。而第 0.400000 秒之前服务器的 Ack 为 3284表示序号在 3284 之前的字节已经收到了。那么在途字节数就是 265428−3284262144 字节。如果要归纳出一条公式可以表示成
在途字节数 Seq Len − Ack 其中 Seq 和 Len 是来自上一个数据发送方的包而 Ack 则来自上一个数据接收方的包。我们再拿第 0.500000 秒来练习一下套用公式可以算出在途字节数应该是 266816361−5033262144与第 0.400000 秒的一样多。
我们也可以使用Wireshark提供的功能来查看在途字节数,这样就不用我们手动来计算了。
图5