为什么 Wireshark 的 tcptrace 图中 SACK 标记的颜色不同?

网络工程 线鲨
2022-02-23 17:21:08

Wireshark 的tcptrace时序图显示了大量信息,但我找不到能准确说明这一切含义的文档。除了配色方案和一些缺失的元素外,它与原版tcptrace大致相似:

  • 蓝色 I 型光束表示发送的数据包(参见 中的白色和红色箭头tcptrace;Wireshark 不会以不同方式显示重传)
  • 指示计算的接收窗口的绿线(参见 中的黄线tcptrace
  • 一条棕色线表示已确认的序列号,带有小刻度表示收到的 ACK 没有确认任何新内容(参见 中的绿线tcptrace
  • SACK 显示为红色或棕色垂直线(参见 中的紫色线tcptrace
  • 特殊数据包(SYN、FIN 等)没有特别显示。

这是一个显示所有这些功能的示例。

示例 Wireshark tcptrace 图

但是,我看不出红色和棕色 SACK 之间有任何明显的区别;似乎最高的 SACK 是红色的,而较低的 SACK 是棕色的,但在我看来,这似乎不是值得用不同颜色区分的东西,所以我想我错过了一些东西。两种不同 SACK 颜色的真正原因是什么?


1个回答

是的,似乎只是第一个(编号最高的)SACK 范围的绘制与其他范围不同。来源特别注意到分支i == 0

 854             // add SACK segments to sack, sack2, and selectable packet graph
 855             for (int i = 0; i < seg->num_sack_ranges; ++i) {
 856                 double half = seg->sack_right_edge[i] - seg->sack_left_edge[i];
 857                 half = half/2.0;
 858                 double center = seg->sack_left_edge[i] - seq_offset_ + half;
 859                 if (i == 0) {
 860                     sack_time.append(ts);
 861                     sack_center.append(center);
 862                     sack_span.append(half);
 863                     if (allow_sack_select) {
 864                         pkt_time.append(ts);
 865                         pkt_seqnums.append(center);
 866                     }
 867                 } else {
 868                     sack2_time.append(ts);
 869                     sack2_center.append(center);
 870                     sack2_span.append(half);
 871                 }
 872             }

在同一个源文件的其他地方,我们看到sack2数据被绘制成与数据不同的颜色sacktango_scarlet_red_6vstango_scarlet_red_4分别。