Wireshark 学习手册(二)

七、使用显示和捕获过滤器

无论是在捕获流量时实时分析数据,还是调查预先捕获的文件,您通常都会面临大量数据。你如何理解所有这些信息?最有可能的是,您将受益于过滤通信量以缩小范围,这样 Wireshark 只显示您想要查看的通信量。本章回顾了在 Wireshark 中过滤流量的许多方法。

处理数据时,似乎捕获和显示过滤器是相同的。然而,尽管两者都可以过滤流量,但它们都有自己的语法,在创建过滤器时必须使用这些语法。为了帮助您更好地理解优化视图的不同方法,我们将介绍何时过滤流量,并概述显示过滤器和捕获过滤器之间的区别。为了使您能够在瞄准特定流量时提高技能,我们将回顾通过构建表达式来深入到特定字段值的方法。此外,我们将学习如何使用逻辑运算符创建更复杂的过滤器。最后,由于过滤器非常有用,我们将介绍一些技巧、快捷方式和常用过滤器,帮助您实现更有效的分析。

本章将涵盖以下内容:

  • 过滤网络流量
  • 理解显示过滤器
  • 创建捕获过滤器
  • 了解表达式生成器
  • 发现快捷方式和方便的过滤器

过滤网络流量

Wireshark 以及许多其他数据包分析工具可以捕获大量数据,过滤特定类型的流量,并优化您的视图以帮助分析。在 Wireshark 中,有几个选项可用于过滤流量:

  • 显示过滤器:在活动捕获期间或在预捕获文件上使用
  • 捕获过滤器:在捕获之前应用,仅显示特定类型的流量
  • 表达式:使用逻辑操作符创建复杂的过滤器
  • 快捷方式:在分析数据包时,动态构建过滤器

Wireshark 具有捕获和显示过滤器,可用于优化您的视图。分析流量时,每个过滤器都在特定时间内应用。在下一节中,让我们探索应用过滤器的最佳时机。

分析流量

在检查流量时,数据包分析有四个主要阶段,如使用 Wireshark 的 第 2 章中所述。这些阶段是采集解码分析显示,如下图所示:

Figure 7.1 – Phases of packet analysis
)

图 7.1–数据包分析的各个阶段

当您使用捕获过滤器收集流量时,可以开始优化您的视图。在数据包呈现给用户之前,过滤器会移除不需要的流量。

捕获流量

在收集网络流量时,数据包通过适当的捕获引擎,如 Npcap 或 WinPcap。如果您只想查看特定的流量,您将需要使用捕获过滤器,当使用时,Wireshark 将丢弃任何不在过滤器中的数据包。例如,当捕获无线局域网 ( WLAN )流量,并且您想要过滤掉任何信标帧时,您将应用这个捕获过滤器:wlan[0] != 0x80

捕获过滤器将删除任何不必要的流量。但是,要在保留所有流量的同时过滤掉不需要的数据包,您应该使用显示过滤器。

查看流量

一旦数据包通过 Wireshark 的增强型数据包分析器 ( EPAN ),它就会将解析后的流量通过图形用户界面 ( GUI )呈现给用户,然后进行分析。在 Wireshark 界面中显示数据包时,您可以使用适当的语法应用显示过滤器,并在捕获之前、期间或之后应用过滤器。

类似于我们前面的例子,当捕获无线流量时,如果您想要过滤掉任何信标帧,同时保留所有数据包,您将应用这个显示过滤器:!(wlan.fc.type_subtype == 8)

在构建捕获或显示过滤器时,Wireshark 将检查语法以查看字符串是否有效。让我们看看这是如何工作的。

检查语法

在分析流量的同时创建过滤器时,我们天生就知道要构建什么,并且在大多数情况下,我们会生成一个有效的过滤器。Wireshark 通过在运行捕获之前检查语法来帮助我们创建合适的过滤器。语法检查器的工作方式如下:

  • 有效的显示过滤器将使背景变成绿色,并且过滤器运行。
  • 无效或不完整的字符串将使背景变红,过滤器将不会运行。
  • 未知的显示过滤器或字符串将使背景变成黄色,过滤器可能会运行。

虽然常见的是绿色或红色背景,但在极少数情况下,您可能会看到黄色背景。例如,在过滤动态主机配置协议 ( DHCP )时,如果输入bootp而不是dhcp,背景会变成黄色,如下图所示:

Figure 7.2 – Syntax checker with a yellow background
)

图 7.2–黄色背景的语法检查器

虽然过滤器可能会运行,但您可能会得到意外的结果。

在下一节中,我们将概述 Wireshark 文件夹中的两个文件dfilters.txtcfilters.txt的用途,这两个文件用于保存过滤器列表。

比较过滤器的文件

在 Wireshark 文件夹中,有两个文本文件用于 Wireshark 的内置过滤器和任何用户保存的过滤器,它们如下:

  • dfilters.txt保存显示过滤器列表。
  • cfilters.txt保存捕获过滤器列表。

这些文件与显示或捕获过滤栏左侧的硬上的书签图标相关。如此处所示,我们看到显示过滤栏上的蓝色图标:

Figure 7.3 – Viewing the bookmark icon
)

图 7.3–查看书签图标

使用任一单词过滤器文件,一旦被修改,它们可以被复制,然后与同事共享。此外,当使用特定的配置文件时,您可以定制任一文件,这样您就可以通过简单地切换配置文件来访问定制的过滤器。

首先,我们来看看显示过滤器文件。

调查显示过滤器

您将在dfilters.txt文件中找到一个包含显示过滤器的列表。找到文件后,您可以在记事本中打开它,如下所示:

Figure 7.4 – dfilters.txt
)

图 7.4–d filters . txt

过滤器由一个名称 | 过滤器配对来表示。例如,当检查排除地址解析协议 ( ARP )流量的过滤器时,您会看到以下内容:

  • 名称:滤镜的名称,用引号括起来。比如"No ARP"
  • 过滤器:过滤器的语法。比如not arp

接下来,我们将查看捕获过滤器是如何存储的。

检查捕获过滤器

cfilters.txt文件包含捕获过滤器的列表,如下面的屏幕截图所示:

Figure 7.5 – cfilters.txt
)

图 7.5–c filters . txt

与显示过滤器类似,捕获过滤器也由一个名称 | 过滤器对表示。例如,当检查仅包含传输控制协议 ( TCP )流量的过滤器时,您将看到以下内容:

  • 名称:滤镜的名称,用引号括起来。比如"TCP only"

  • Filter: The syntax for the filter. For example, tcp.

    注意

    虽然可以在记事本中打开和修改这两个文件,但如图所示,使用 Wireshark 界面来更改过滤器更安全、更方便。例如,通过进入分析 | 显示过滤器… 菜单选项,然后在对话框中编辑,您可以保留正确的语法。

现在您已经看到了主要的区别,让我们更仔细地看看显示过滤器。

理解显示过滤器

在捕获流量或分析预先捕获的文件时,显示过滤器有助于缩小范围并锁定特定类型的流量。捕获超过 3000 个包含多种不同类型流量的数据包并不罕见。

当您启动 Wireshark 时,您会看到启动屏幕。图标下方的顶部是过滤器工具栏。工具栏中有文本 Apply a display filter… ,您可以在其中轻松应用和编辑显示过滤器,如下所示:

Figure 7.6 – Wireshark startup screen
)

图 7.6–Wireshark 启动屏幕

通过使用单个协议或添加逻辑运算符,您可以在 Wireshark 支持的任何协议上创建简单的过滤器。例如,如果您想查看 TCP 或 ARP 流量,那么您可以使用tcp || arp显示过滤器。

Wireshark 的显示过滤器很容易修改。以下部分说明了如何编辑显示过滤器来定制您的工作流程。

编辑显示过滤器

使用显示过滤器后,您可能需要更改 IP 地址、端口号或进行其他更改。要编辑显示过滤器,进入分析菜单,然后选择显示过滤器… ,将弹出以下对话框:

Figure 7.7 – Display Filters dialog box
)

图 7.7–显示过滤器对话框

在那里,您可以选择三个图标中的一个,如显示过滤器对话框左下角所示:

  • 加号图标将添加一个新的显示过滤器。选中时,Wireshark 会在左侧创建一个空间,您可以在此输入名称,在右侧输入实际的过滤器,如图图 7.7 所示。
  • 减号图标将删除一个显示过滤器。选择(突出显示)想要移除的过滤器,点击减号从对话框中移除过滤器,并更新dfilters.txt文件。
  • 一个复制图标将复制一个显示过滤器。复制后,您可以在不更改原始过滤器的情况下修改过滤器。Wireshark 会将新的过滤器添加到dfilters.txt文件中。

在下一节中,我们将看到当你得到一个有效的显示过滤器,并且你想重用它时,你如何把它保存到一个书签中。

使用书签

在显示过滤器的右侧,有一个名为书签的蓝色工具栏图标。这就是 Wireshark 的内置过滤器和任何用户保存的过滤器所在的位置。如果单击图标,您将看到选项,以及几个您可以使用的预装过滤器,如下所示:

Figure 7.8 – Display filter bookmark dropdown
)

图 7.8–显示过滤器书签下拉列表

使用书签时,您将看到包括以下内容的配置选项:

  • 保存该过滤器:创建过滤器后,可以通过选择该选项将过滤器保存到书签。
  • 删除该过滤器:这将删除当前正在使用的过滤器,该过滤器存储在dfilters.txt文件中。
  • 管理显示过滤器:这将打开显示过滤器对话框。
  • 滤镜按钮首选项… :这将打开首选项对话框,其中滤镜按钮选项高亮显示。

在选项下面,您会看到一个过滤器列表。即使您从未保存过过滤器,您也会看到列表,因为 Wireshark 会显示在dfilters.txt文件中找到的过滤器列表。

一旦您创建了自己的过滤器或从下拉列表中选择了一个,您可以按输入或点击显示过滤器右侧的蓝色箭头来运行过滤器。

显示过滤器的最右侧是一个下拉箭头(插入符号)。选中后,您可以看到以前使用的过滤器,如下面的屏幕截图所示:

Figure 7.9 – Previously used display filters
)

图 7.9–以前使用的显示过滤器

可以在数据包捕获之前、期间或之后应用显示过滤器。当您准备清除过滤器时,选择过滤器右侧的 X ,如下所示:

Figure 7.10 – The display filter toolbar
)

图 7.10–显示过滤器工具栏

正如我们所看到的,显示过滤器非常有助于提供更有针对性的捕获视图。然而,有时你可能只想收集某种类型的流量。在这种情况下,您将使用一个捕获过滤器,我们将在下一节讨论。

创建捕获过滤器

了解如何使用显示过滤器很重要。但是,捕获过滤器有助于仅锁定您想要查看的流量。此外,过滤可以消除许多噪音,如管理流量和 ARP 广播。

您可以通过以下几种方式创建捕获过滤器:

  • 转到启动屏幕的中间,进入**之后的过滤器…使用该滤波器:**如图图 7.6 所示。
  • 进入捕获菜单,然后选择选项…,如下图所示:

Figure 7.11 – Capture menu dropdown
)

图 7.11–捕获菜单下拉菜单

在那里,您将看到捕获选项,并且在对话框的底部,您将看到捕获过滤器区域,如下面的屏幕截图所示:

Figure 7.12 – Location to add a capture filter
)

图 7.12–添加捕获过滤器的位置

虽然这两个选项都可以让你创建一个捕获过滤器,但我通常会去捕获菜单选择并选择选项…,因为这将允许我看到所有的界面。

通过使用单个或多个协议并添加逻辑运算符,您可以在 Wireshark 支持的任何协议上创建捕获过滤器。要清除过滤器,选择捕获过滤器右侧的 X

要查看您以前使用的捕获过滤器,请转到捕获过滤器的右侧,并选择向下箭头以显示列表。这类似于显示过滤器下拉列表,如图图 7.8 所示。

除了能够修改显示过滤器之外,您还可以自定义捕获过滤器,如下一节所述。

修改捕获过滤器

要编辑捕获过滤器,进入捕获菜单选项,然后选择捕获过滤器,这将显示预构建过滤器的列表,如以下截图所示:

Figure 7.13 – Capture Filters dialog box
)

图 7.13–捕获过滤器对话框

在对话框的底部有三个图标:

  • 加号图标将添加一个新的捕获过滤器。选中后,Wireshark 将创建一个空间,您可以在左边输入名称,在右边输入实际的过滤器。
  • 减号图标将删除一个捕获过滤器。选择(突出显示)想要移除的过滤器,点击减号从对话框中删除过滤器,并更新cfilters.txt文件。
  • 复制图标将复制一个捕获过滤器。复制后,您可以在不更改原始过滤器的情况下修改过滤器。Wireshark 会将新的过滤器添加到cfilters.txt文件中。

尽管“捕获过滤器”界面可能看起来像“显示过滤器”工具栏,但语法是不同的。因此,在制作一个捕获过滤器时,你需要小心,因为它使用了 Berkeley 数据包过滤器 ( BPF )语法。在下一节中,我们将通过一个例子来使用适当的语法创建一个捕获文件。

识别 BPF 语法

捕获过滤器可以减少通过只收集你想看到的流量类型获得的数据包数量。例如,如果我需要一个过滤器来捕获文件传输协议 ( FTP )流量,那么我可以在捕获过滤器中输入ftp,就像我在显示过滤器中一样。但是,您会看到语法检查器变成红色,这意味着这是一个无效的过滤器,如下所示:

*Figure 7.14 – Invalid capture filter syntax
)

图 7.14–无效的捕获过滤器语法

虽然这个过滤器可以作为显示过滤器,但是您必须使用正确的语法编写一个捕获过滤器。

创建新的捕获过滤器时,尝试使用一个预构建的过滤器作为指南来正确构建您的过滤器。让我们看看这是如何工作的。

制作捕获过滤器

当你需要创建一个捕获过滤器时,找到一个与你需要的相似的捕获过滤器*,选择过滤器,点击复制图标。Wireshark 将复制过滤器并将其放在末尾,您可以在那里对其进行编辑。*

让我们来看一个通过复制现有过滤器来创建 FTP 捕获过滤器的示例:

  1. 进入捕获菜单,选择捕获滤镜
  2. 选择HTTP TCP port (80)捕获过滤器,然后点击复制图标。Wireshark 会将复制的过滤器放在列表的末尾,如下面的屏幕截图所示:

Figure 7.15 – Create new capture filter
)

图 7.15–创建新的捕获过滤器

  1. 要编辑过滤器,将名称更改为FTP,并将过滤器更改为tcp port ftptcp port 21
  2. 关闭捕获过滤器对话框。
  3. 重新启动 Wireshark,以便识别新创建的捕获过滤器。

要使用新创建的过滤器,请遵循以下步骤:

  1. 转到捕获菜单选项,然后选择选项…
  2. 单击将用于捕获流量的接口。比如下面的截图,选择了微软:Wi-Fi 界面。
  3. 在 capture filter 区域,下拉绿色书签并选择您刚刚创建的过滤器。书签将变成黄色,如下所示:

Figure 7.16 – FTP capture filter
)

图 7.16–FTP 捕获过滤器

  1. Once you click Start to begin your capture, you will only capture FTP traffic.

    注意

    当你使用完一个捕获滤镜时,进入捕获菜单,然后进入选项,确保你移除了滤镜的任何痕迹…。一旦打开,删除捕获过滤器,以便您可以再次捕获所有流量。

您可能已经使用了一个运行良好的捕获过滤器,并且您希望保留该过滤器以供将来使用。接下来,让我们看看如何将捕获过滤器保存到书签中。

给过滤器添加书签

在捕获过滤器的右侧是一个名为书签的绿色工具栏图标,内置的捕获过滤器存储在这里。每当您创建并保存过滤器时,Wireshark 都会将过滤器存储在书签中。

如果单击绿色工具栏图标,您将看到一个捕获过滤器列表,如以下屏幕截图所示:

Figure 7.17 – Capture filter bookmark drop-down
)

图 7.17–捕获过滤器书签下拉列表

在那里,您可以选择一个过滤器,Wireshark 将填充 capture filter 字段。

如果您创建了一个过滤器并想要保存它,请下拉书签图标并选择保存该过滤器,Wireshark 会将该过滤器保存在书签中。

捕获过滤器可能很有用;但是,请记住,在使用捕获过滤器时,您可能会错过在故障排除或搜索入侵证据时有所帮助的重要流量。

在分析过程中,您可能需要使用特定的字段值来创建一个表达式。以下部分概述了如何使用表达式生成器。

了解表达式生成器

除了构建简单的显示过滤器,Wireshark 还能够创建一个表达式,将特定字段值归零。要构建表达式,请转到分析,然后选择显示过滤表达式,如下图所示:

Figure 7.18– The Display Filter Expression menu choice
)

图 7.18–显示过滤器表达式菜单选项

单击链接启动表达式构建器。在左侧,您会看到 Wireshark 支持的所有协议的列表,如下面的屏幕截图所示:

Figure 7.19 – Display Filter Expression
)

图 7.19–显示过滤器表达式

Wireshark 能够解析数百个协议,并且不断添加新的协议,因此列表会很长。

为了进一步细化过滤器,您可以从右侧列出的四个变量中选择:

  • 关系:这是使用逻辑运算符将一个字段值与另一个值进行比较的比较运算符列表:
    • 存在:表示所选字段存在于抓图中
    • == :等于
    • != :不等于
    • > :大于
    • < :小于
    • > = :大于等于
    • < = :小于或等于
  • :表示所需的适当值。Wireshark 用适当类型的值填充它,即布尔或字符串。
  • 预定义值 : Wireshark 为给定字段填充适当的值。
  • 范围(偏移量:长度):这允许您输入一个整数范围,如4-812-20,如果它们是该字段或过滤器的合适选择。

现在您已经很好地理解了表达式生成器的功能,让我们来看一个构建自定义过滤器的简单示例。

建立表情

在这个例子中,我希望过滤器显示所有带有 TCP SYN 标志的数据包。在显示过滤表达式对话框的左侧,我向下钻取并选择了tcp.flag.syn值。Wireshark 将在对话框的右侧填充以下内容:

  • 关系 : ==
  • : 1
  • 预定义值 : 设定

Range is grayed out as this is not an appropriate selection for this field value.

一旦选择了所有的值,Wireshark 就会用生成的表达式填充底部的显示过滤器区域。在这种情况下,过滤器是tcp.flags.syn == 1,如下所示:

Figure 7.20 – TCP SYN flag filter
)

图 7.20–TCP SYN 标志过滤器

此时,我们可以选择以下任一选项:

  • 取消:这将退出表达式生成器,并且不会创建过滤器。
  • OK :这将把过滤器放置在显示过滤器工具栏中。

一旦过滤器出现在显示过滤器工具栏中,您就可以进行任何必要的修改,比如将tcp.flags.syn == 1更改为修改过的过滤器,比如tcp.flags.syn == 0。一旦您对过滤器感到满意,您可以通过按下回车或点击显示过滤器右侧的蓝色箭头来运行过滤器。

如您所见,表达式构建器是构建定制过滤器的一种简单方法。

在下一节中,我们将看到,在处理数据包捕获时,Wireshark 有许多快捷方式,允许您快速创建过滤器来简化您的工作流程。

发现快捷方式和便捷的过滤器

多年来,Wireshark 不断发展。现在,在进行分析时,只需右键单击并选择应用或准备为过滤器,即可非常轻松地动态创建显示过滤器。

在这一节中,让我们来看看应用过滤器的许多方法,而不必经历启动表达式生成器的复杂练习。此外,我们将看到一些方便的过滤器,您可以使用这些过滤器直接进入问题。我们将从过滤流量时使用的许多快捷方式的概述开始。

拥抱滤镜快捷键

在使用 Wireshark 的数据包详细信息面板中的时,您可能想要过滤特定的 IP 地址或特定的端口号。一旦您确定了感兴趣的项目,您可以右键单击它,您将看到几个过滤器快捷方式,如下所示:

Figure 7.21 – Right-click to view filter shortcuts
)

图 7.21–右键单击查看过滤器快捷方式

虽然右击时有很多选项,但是在中间可以看到处理滤镜的快捷方式。以下是可用的选项:

  • Apply as Filter :选中时,将创建并运行选中的字段值。
  • 准备为过滤器:选中时,它将创建所选字段值并将其放置在显示过滤器区域,让您有机会对过滤器进行任何修改或添加。
  • 会话过滤器:选中后,可以根据协议跟踪会话,如以太网IPv6TCP ,如下截图所示:

Figure 7.22 – Conversation Filter selections
)

图 7.22–对话过滤器选择

  • 用过滤器着色:这允许你给一个特定的对话着色。正如你所看到的,你可以从许多可用的颜色中选择,或者你可以创建自己的着色规则,如下图所示:

Figure 7.23 – Colorize with Filter
)

图 7.23–用滤镜着色

注意

如果您已经应用了过滤器对特定的流进行着色,然后想要撤销您的更改,请前往查看 | 着色对话,然后选择重置着色

当您右键单击字段值上的并选择应用为过滤器准备过滤器时,您将看到构建过滤器时的附加选项。让我们研究一下这是如何工作的。

查看附加选项

即使在快捷方式中,当使用应用为过滤器准备为过滤器时,您也会发现其他方法来过滤流量。如图图 7.21 所示,可以右键查看过滤快捷方式。以下列表显示了如何选择简单过滤器或添加逻辑运算符:

  • 选中:选择当前字段值。
  • 未选中:创建一个过滤器,删除选中的字段。例如,如果我右键单击目的端口443并选择未选择,Wireshark 将生成!(tcp.dstport == 443)并将其放入显示过滤器。
  • …并选择:向过滤器添加一个字段值。
  • …或者选中:创建一个OR滤镜。
  • …未选中的:添加一个过滤器,删除选中的字段。
  • …或未选择的:创建一个OR过滤器,该过滤器用于删除所选字段。

使用过滤器是帮助你找到问题的工具之一。下一节提供了一些有用的过滤器建议,可以帮助您搜索特定类型的流量。

应用有用的过滤器

Wireshark 是开发人员、网络管理员、学生和安全分析器常用的工具。网络管理员使用 Wireshark 调查许多可能出现并导致网络降级或传播恶意软件的问题。

一旦您使用 Wireshark 工作了一段时间,您将会学到简化工作流程的技巧和技术。一个常见的任务是应用各种显示过滤器。

使用显示过滤器

虽然您可以随时构建过滤器,但通常有一些方便的显示过滤器,包括以下内容:

  • http.request:这将在捕获文件中搜索任何HTTP GETPOST请求。
  • tcp.port==xxx:如果您使用特定端口监控 TCP 流量,请使用此过滤器。
  • tcp.stream eq X:该过滤器将跟随特定的流,其中X是流索引。
  • !(arp or icmp or dns):该过滤器将消除arpdnsicmp流量。
  • vlan.id ==X:显示具体的vlan

Wireshark 还提供了一个方便的拖放功能,您可以简单地从数据包树中拖动一个字段,并将其放入显示过滤器中。

除了显示过滤器之外,有时还会使用捕获过滤器来收集特定的流量。

使用捕获过滤器

众所周知,捕获过滤器在捕获流量时缩小了范围。一些实例包括如下:

  • port ftp || port ftp-data:这将捕获 FTP 流量。
  • ip host x.x.x.x:这将捕获来自特定主机的流量。
  • ip multicast:这将捕获多播流量。

Wireshark wiki 还列出了几个用于检测恶意软件的捕获过滤器。例如,dst port 135 and tcp port 135 and ip[2:2]==48会显示 Blaster 蠕虫病毒的证据。

注意

通过访问https://docs . Microsoft . com/en-us/trouble shooting/windows-server/security-and-malware/Blaster-worm-virus-alert了解更多关于 Blaster 蠕虫病毒的信息。

有许多方法可以过滤流量,只显示您想要查看的流量,这有助于删除不必要的流量并提高您的分析技能。根据您每天使用的网络类型,您很可能会建立自己的过滤器库。

总结

Wireshark 是一个强大的工具,让我们能够捕获和分析流量。在本章中,我们回顾了如何通过使用内置的过滤函数来更有效地研究捕获。我们学习了如何使用显示过滤器,并讨论了它如何提供仅显示单个协议的简单过滤器或字段值的组合。然后,我们回顾了如何编辑显示过滤器,以及如何创建自己的过滤器并将其存储在书签中以便于参考。

然后,我们讲述了如何在收集流量之前应用捕获过滤器,以便只显示特定类型的流量。我们还看到了如何通过构建表达式来深入查看特定的字段值。此外,我们看到,在执行粒度调查时,我们可以创建包含逻辑运算符和特定字段值的过滤器。有了许多过滤流量的方法,我们在进行分析的同时,研究了动态构建过滤器的捷径。最后,我们发现了在您的武器库中拥有几个有用的过滤器的好处。

在下一章中,我们将看一看开放系统互连 ( OSI )模型,这是为了有效地进行数据包分析而必须掌握的基本概念。为了让您更好地理解 OSI 模型,我们将逐一回顾七层。我们将讨论寻址、协议数据单元以及每层中的协议。此外,我们将逐步完成封装过程,因为数据已准备好形成帧,以便通过适当的介质发送。

问题

现在,是时候检查你的知识了。选择最佳答案,然后对照评估附录中提供的答案检查您的答案:

  1. 创建显示过滤器时,如果背景是 ____,则您输入了有效的过滤器。
    1. 红色
    2. 绿色的
    3. 黄色
    4. 蓝绿色
  2. 当使用表达式生成器创建表达式时,您可以通过修改右侧列出的四个变量中的任何一个来优化过滤器,这四个变量是关系、_ _ _ _ _ _、预定义值范围
    1. 浮动
    2. 整数
    3. 布尔型
  3. 要创建一个只查看 DNS 请求和响应的捕获过滤器,您应该在捕获过滤器中输入 _____。
    1. tcp port 53
    2. DNS
    3. dns
    4. udp port 53
  4. 如果您需要构建一个过滤器来关注特定的字段值,您可以使用 _____ 构建器。
    1. 表示
    2. 伯克利
    3. EPAN
    4. 解剖器
  5. 当使用应用为过滤器准备为过滤器时,您将看到创建简单过滤器或添加逻辑运算符的附加选项。_____ 添加删除选定字段的过滤器。
    1. …或者选中
    2. …并选择了
    3. 未选中
    4. …并且没有被选中
  6. 在 Wireshark 中,捕获过滤器使用 _____ 语法。
    1. 表示
    2. BPF
    3. EPAN
    4. 解剖器
  7. 当选择快捷方式 _____ 时,它将创建选定的字段值并将其放置在显示筛选区域,使您有机会对筛选进行任何修改或添加。
    1. 准备过滤器
    2. 应用为过滤器
    3. 构建过滤器
    4. 生成过滤器

延伸阅读

请参考以下链接了解更多信息:

八、概述 OSI 模型

有效的数据包分析始于对开放系统互连 ( OSI )模型的深入理解。OSI 模型是一个七层框架,概述了操作系统 ( OS )如何转换、封装和准备数据以便在网络上传输。在本章中,我们将介绍七个层次以及每一层的作用和目的。此外,您将了解在 OSI 模型中,有三层使用特定的地址或标识符。传输层有关联端口,网络层使用互联网协议 ( IP )地址,数据链路层需要媒体访问控制 ( MAC )地址。为了使您能够区分每一层的标识符,我们将回顾并描述每一层的意义。

然后,我们来看看每层的协议数据单元 ( PDU )。

完成后,您将更加熟悉术语,并对每层中的一些协议有更好的理解。从超文本传输协议 ( HTTP )请求当数据从一个网页检索到它在网络上传输的比特,你将知道数据是如何转换的。此外,我们还将了解每个 PDU 如何进入下一层,正确格式化帧,以便使用适当的介质发送数据。

在本章中,我们将讨论以下主要话题:

  • OSI 模型概述
  • 发现每层的用途、协议和 PDU
  • 探索封装过程
  • 在 Wireshark 中演示帧的形成

OSI 模型概述

OSI 模型是一个七层框架,概述了每层的主要功能,代表了执行特定功能的一组协议。了解该模型将有助于您更好地准备使用 Wireshark 分析流量。此外,您将能够认识到在交易过程中所涉及的协议的角色。

注意

所有协议在网络上都有特定的用途。今天,Wireshark 已经为大多数协议提供了解析器,并且一直在添加新的解析器。

在本节中,我们将后退一步,了解框架是如何开始的,并认识到谁会从使用该模型中受益。

让我们从 OSI 模型背后的灵感开始。

开发框架

我们在 20 世纪 60 年代末到 70 年代中期开始了这段旅程,在这段时间里,我们看到了计算的扩展,以及总体技术的进步。除此之外,我们还见证了计算机的发展,从小型个人计算机到超级计算机,如 1976 年的 Cray,以及视频游戏,如 1972 年的 Pong。

在这个开发的同时,两个国际组织,即国际标准化组织 ( ISO )和国际电报电话咨询委员会 ( CCIT ),开始致力于一个参考模型来定义和标准化网络互操作性。最终,在 1983 年,这两个组织开发了 OSI 模型。

OSI 模型有多种用途,包括:

  • 为开发人员提供一个通用框架
  • 缩小网络管理员的问题范围
  • 支持各层和设备之间的互操作性。
  • 分解每一层,帮助学生更好地理解数据封装的整个过程。

结果,许多人从使用 OSI 模型中受益,我们将在下面概述。

使用框架

虽然 OSI 模型是一个参考模型,但是有许多组织在使用它。这些群体包括:

  • 开发人员参考 OSI 模型来概述系统如何相互通信。
  • 网络管理员在排除网络故障时,会根据他们认为应对故障负责的层来提及问题。
  • 设备制造商依靠 OSI 模型来确保他们的产品能够跨所有层工作。

此外,学生使用该模型开始他们的网络之旅。每个大学新生网络课程的主要内容是 OSI 模型的介绍。在大多数情况下,这些学生从来没有听说过这个,所以以简单的方式提出一个复杂的话题可能是困难的。因为这是他们第一次见面,所以以简单易学的方式传达这一信息很重要。

此外,该模型还提供了每一层中正在发生的事情的可视化描述。该模型定义了协议、PDU 和每层的用途,如下一节所述。

发现每层的用途、协议和 PDU

在这一节中,我们将带仔细看看 OSI 模型的七个层中的每一层,并描述以下内容:

  • OSI 模型的各层,从层七层到层一层:应用演示会话传输网络数据链路,以及物理
  • 在封装过程中使用源寻址和目的寻址的三层:传输、网络数据链路层
  • 每个层的 PDU,它定义了数据在通过到上面的层或下面的层时的形状。

在下图中,我们可以看到 OSI 模型的总结:

Figure 8.1 – The OSI model
)

图 8.1–OSI 模型

在深入研究各层之前,使用记忆方法来记住每一层的第一个字母是很有帮助的。对于 OSI,我们有两个,如下图所示:

Figure 8.2 – OSI mnemonics
)

图 8.2–OSI 助记符

一旦你知道了这些层的名字,下一步就是解决每个层的角色、目的和协议。

当概述每一层时,我通常从应用层开始,因为这是我们开始与网络联系的地方。接下来我们来讨论这个。

评估应用层

应用层(或第 7 层)包含允许进程间通信的协议,这使我们能够完成以下任务:

  • 检索网页
  • 获取或发送电子邮件
  • 将文件上传到 FTP 服务器
  • 请求动态分配的 IP 地址

在 TCP/IP 网络上,每个应用层协议根据其功能遵循特定的建议、要求和选项。让我们讨论一下这一层 PDU 的一些协议。

探索应用层协议

应用层有数百个协议。许多常见的或众所周知的协议在 20 世纪 80 年代很早就被开发和标准化了。有些已经弃用,我们很少见到,比如 Telnet 和简单认证和安全层 ( SASL )。然而,根据需要,新的协议被开发出来,以跟上今天的需求,例如受限应用协议 ( CoAP )和消息队列遥测传输 ( MQTT ),它们都与物联网 ( 物联网)设备一起使用。以下是应用层协议的候选名单:

Table 8. 1 – The Application layer protocols
)

表 8。1–应用层协议

在许多情况下,这一层的协议涉及一系列客户端请求和服务器响应。接下来,我们来谈谈这一层的 PDU。

了解应用层 PDU

应用层PDU 是专用于所用协议的数据。

每个协议的报头结构会有所不同,因为每个协议都是特定于应用的。除此之外,客户端的标头通常不同于服务器的标头。

大多数协议都有一个相关的端口,该端口位于传输层报头中。以下是应用层的总结:

Table 8. 2 – Summary of the Application layer
)

表 8。2–应用层概述

数据离开应用层后,会被传递到表示层,以便正确格式化数据。接下来我们来探讨一下。

剖析表示层

表示层负责正确的数据格式化,以及可选的压缩和加密。这一层确保在将数据呈现给应用(如 Word 文档)之前,或者在将数据发送到网络之前,数据处于正确的格式。例如,如果你从互联网上下载一个扩展名为.gz的文件,那么表示层将搜索一个与之相关的应用,这样操作系统就可以正确打开该文件。如果没有安装该应用,您将会看到一条消息,如下面的屏幕截图所示:

Figure 8.3 – The dialog box to select an application
)

图 8.3–选择应用的对话框

如果您没有安装应用,那么您可以进入并手动选择您想要用来打开文件的应用,或者获取并安装正确的应用。

表示层还提供可选的服务来压缩和解压缩数据。压缩消除了冗余,使数据变得更小。这个函数是可选的,因为不是所有的数据都被压缩。

此外,这一层还处理加密,包括使用密钥对数据进行加扰,使其处于不可读的格式,除非拥有密钥,否则对任何人都没有意义。因为加密也是一个可选功能,所以这可能不是必需的。

表示层中,有一些协议,我们将在下一节和 PDU 一起研究。

描述协议和 PDU

在这一层中,协议处理适当的数据翻译和编码/解码,例如外部数据表示 ( XDR )。此外,由于表示层在加密中的作用,您会发现以下协议:

  • 传输层安全(TLS)/安全套接字层(SSL) :这些协议使用加密保护端到端通信,如银行交易和网页检索。
  • 安全/多部分互联网邮件扩展(S/MIME) :这些协议以数字方式对电子邮件消息进行签名和加密。

表示层, PDU 仍然是数据,我们看到数据被翻译或转换成正确的格式。下面的是展示层的总结:

Table 8.3 – Summary of the Presentation layer
)

表 8.3-表示层总结

在许多方面,表示层是应用层的扩展。接下来是会话层,在这里我们可以看到会话管理的所有关键元素。

了解会话层

会话层(或第 5 层)负责建立、维护和拆除会话。在开始与网络联系后交换任何数据之前,操作系统必须建立一个会话。创建会话时,操作系统将创建适当的套接字,即 IP 地址和端口。这是为了使两个端点可以相互交换数据。

在网络上通信时,您将建立多个并发会话和连接。您可以通过进入命令行并运行netstat来查看您的活动连接,如下面的屏幕截图所示:

Figure 8.4 – Netstat showing active connections
)

图 8.4-显示活动连接的 Netstat

在前面的截图中,我们只看到了传输控制协议 ( TCP )连接。TCP 是一个面向连接的协议,两个端点都需要相互交流数据事务的状态。因此,您将看到一个本地和外地地址,以及交易的状态。例如,下面表示一个连接:

TCP 172.20.4.31:51393 104.118.222.227:443  ESTABLISHED

除了管理两个端点之间的通信,会话层还提供其他服务,包括:

  • 认证:通过要求密码或其他形式的认证来验证和识别一个实体。
  • 授权:如果实体有适当的权限,这允许访问系统资源。
  • 检查点:它监控会话的错误,并确保所有数据都已接收。如果传输中有错误,会话层可能会重新请求任何丢失的数据。

通信流结束后,会话层安全关闭会话。接下来,我们来看看这一层的一些关键协议。

识别协议和 PDU

会话层中存在几个协议。尽管大多数协议可能起源于其他层,但这些协议部分始于会话层:

  • 实时传输控制协议(RTCP) :它与实时传输协议 ( RTP )一起工作,将控制信息传递给所有IP 语音 ( VoIP )呼叫中的参与者。
  • 域名系统(DNS) :将主机名解析为 IP 地址,以便进行会话。
  • 点对点隧道协议(PPTP) :这通过使用通用路由封装隧道来创建 VPN,以提供比使用纯文本更安全的方式来传递数据。
  • 远程过程调用(RPC) :这允许一个程序在共享网络上的另一个主机上运行一个子程序。

会话层,PDU 是数据。以下是会话层的总结:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

表 8.4-会话层总结

会话层管理会话的所有方面,使主机能够在对话中相互通信。在这一点上,数据然后移动到传输层层,在那里它现在变成一个段,在传输层报头中有必要的端口寻址。

Appreciating the Transport layer

The Transport layer (or layer 4) is responsible for transporting the data, either using a connectionless or connection-oriented protocol across the network. The encapsulation process starts at this layer. The data will have additional headers added as it traverses down the layers to become a frame, ready to be sent on the network.

所选择的传输协议将取决于应用。数据主要使用 TCP 或用户数据报协议 ( UDP )进行传输。然而,传输层还有其他几种协议。让我们来看看它们。

区分协议和 PDU

传输层有几个协议来传输数据,包括:

Table 8.5 – Common protocols in the Transport layer
)

表 8.5-传输层中的常见协议

虽然还有其他一些鲜为人知的传输层协议,但我们将从使用更广泛的 TCP 协议开始,讨论两个主要的协议:TCP 和 UDP。

通过 TCP 提供可靠性

TCP 是面向连接的协议具有端到端的可靠性。TCP 以三方握手开始一个会话,以交换finish(FIN)数据包结束会话。

TCP 使用 11 字段报头中的字段值主动对数据进行排序和确认,以确保所有数据都到达终端设备。

一旦进入连接,TCP 就会经历一系列状态。例如,在图 8.4 中,可以看到ESTABLISHEDTIME_WAIT状态。

TCP 状态列表如下:

  • LISTEN :系统等待远程主机的连接请求。
  • SYN_SENT :客户端发出连接请求后,系统等待响应。
  • SYN _ RECEIVED:SYN 请求返回给客户端后,服务器等待最终的 ACK 来启动连接。
  • ESTABLISHED :这是两个端点主动通信的正常状态。
  • FIN_WAIT_1 :主机等待响应发送到远程主机的 FIN 的 ACK 或来自远程主机的 FIN 请求。
  • FIN_WAIT_2 :主机等待来自远程主机的 FIN 请求。
  • CLOSE_WAIT :这意味着服务器已经从客户端收到一个 FIN 包,正在等待结束会话。
  • 关闭:FIN 包发出后,主机开始关闭连接,等待相应的确认,以便完全关闭会话。
  • LAST_ACK :发送 FIN 包后进行最终确认,以确保远程主机已收到终止请求。
  • TIME_WAIT :发送终止请求后,此状态等待确保远程主机已经收到结束会话的请求。
  • 关闭:这根本不是一种状态;它代表一个封闭的连接。

对于面向连接的会话,获取通信流的所有部分非常重要,TCP 是传输层协议的首选。然而,当需要数据传输的速度时,UDP 是更好的选择。UDP 是一种只有四个字段值的无连接协议,我们将在下面学习。

使用 UDP 确保及时交付

UDP 是一种无连接的轻量级传输层协议,它有一个四字段的报头。UDP 没有任何握手或连接过程、排序或可靠性服务,也没有拆卸。作为一个轻量级协议,它非常适合速度是一个问题的地方,并且用于时间敏感的应用,例如:

  • 动态主机配置协议 ( DHCP )
  • 路由信息协议 ( RIP )
  • 网络电话(VoIP)
  • 琐碎的文件传输协议 ( TFTP )。

无论使用 TCP 还是 UDP,传输层都是确保数据传输的关键组件。在封装过程中,数据开始转换,PDU 现在是一个数据段。此时,传输层需要一个端口号(或地址),该端口号与正在使用的应用或进程相关联。这将在下一节讨论。

提供端口寻址

在传输层,我们添加一个端口地址,用于标识特定的应用或进程。端口号分为三大类:

  • 众所周知的端口范围在 1 到 1,023 之间,包括 HTTP、DNS 和 SMTP 等协议。
  • 注册的端口范围在 1,024 到 49,151 之间,被分配并用于特定服务,如游戏应用、OpenVPN 和 IPsec。
  • 动态私有短暂端口在 49,152–65,535 的范围内,并且没有分配给任何特定的应用。它们通常由客户端在会话期间临时使用。

当传输层报头应用于数据时,会添加源端口和目的端口。使用的端口类型取决于数据包是来自客户端还是服务器:

  • 如果一个客户端发送一个数据包,那么源端口将是(在大多数情况下)一个随机分配的动态或临时端口。因此,当服务器向主机发送数据包时,它会使用该端口来发送数据。
  • 如果一个服务器发送一个数据包,那么源端口将是一个众所周知的端口或者是一个注册端口。

传输层提供端点之间的主机间通信。下面概述了传输层:

Table 8.6 – Summary of the Transport layer
)

表 8.6-传输层总结

传输层之后,下一层是网络层。正如我们将在下一节中看到的,这一层完全是为了将数据传输到正确的网络。

解释网络层

网络层(或第 3 层)有两个关键作用:寻址和路由数据。这一层使用逻辑 IP 地址提供寻址。此外,网络层确定通过其他网络传输的数据包的最佳逻辑路径,以便它们能够到达目的地。它通过在路由过程中与其它设备通信来实现这一点。

除了数据转发之外,网络层还会传达传输中的错误。为了实现这一点,网络层有几个关键协议,我们将在下一节看到。

区分协议和 PDU

网络层负责寻址和路由。这一层的主要有三个协议:IP、地址解析协议 ( ARP )、以及互联网控制消息协议 ( ICMP )。先说 IP。

用 IP 路由数据包

IP 是一种尽力而为的无连接协议,它使用逻辑 IP 地址将数据包从源路由到目的地。

多年来,TCP/IP 套件中的许多原始协议都有微小的变化、更新和修改。然而,IP 不得不做出重大改变,这主要是由于缺少地址空间。因此,有两个版本的 IP: IPv4 和 IPv6。以下是两者的简要比较:

  • IPv4 有一个 32 位地址空间。私有 IP 地址的使用延长了 IPv4 在局域网上的寿命,但是向 IPv6 的迁移很慢。
  • IPv6 拥有 128 位的地址空间,并提供了对该协议的总体增强,例如简化的网络配置和更高效的路由。

接下来,我们来看看 ARP,它将 IP 地址解析为 MAC 地址。

使用 ARP 解析地址

IP 通过网络将流量路由到目的局域网。当一个包到达局域网时,它不再需要 IP 地址。它需要一个物理地址或 MAC 地址才能到达目的地。ARP 发出广播,将 IPv4 地址解析为 T2 局域网 T3(T4 局域网 T5)上的 MAC 地址,这样就可以传送帧。

注意

ARP 是一种不常见的协议,因为它出现在 OSI 模型的第三层和第二层之间。ARP 将 IP 地址(网络层)解析为 MAC 地址(数据链路层)地址。然而,许多人认为它是第三层协议。

除了 IP 和 ARP,我们还需要 ICMP 来帮助报告数据传输过程中可能出现的任何问题。这将在下一节讨论。

使用 ICMP 传送消息

ICMP 是另一个重要的网络协议。但是,ICMP 不交换或传输数据。它的主要作用是错误报告。因为 IP 是一个尽力而为的、不可靠的协议,ICMP 必须由每个 IP 模块来实现,正如最初的征求意见稿 ( RFC )中所概述的,可以在https://tools.ietf.org/html/rfc792找到。ICMP 报告传输过程中遇到的任何问题,例如网络不可达和主机不可达。因为有两个 IP 版本,所以有两个 ICMP 版本:

  • IPv4 使用 ICMP。
  • IPv6 使用 ICMPv6。

在封装过程中,网络层的 PDU 是一个数据包。网络层负责路由和寻址数据。一个关键要素是 IP(或逻辑)地址,如下所述。

为数据包提供 IP 地址

在这一层,IP 报头将保存 IPv4 格式或 IPv6 格式的源地址和目的地址。两者都被称为逻辑地址,并表示为如下:

  • IPv4 地址有 32 位,Wireshark 将使用点分十进制表示法显示。
  • IPv6 地址有 128 位,Wireshark 将使用由冒号分隔的十六进制数字来显示。

在上一节中,我们讨论了另外两种协议:ARP 和 ICMP。让我们结合寻址的需要来讨论这两个问题。

我们知道 IP 使用包含 IP 地址的报头。但是,ARP 和 ICMP 都是独特的,如下所述:

  • ARP 没有 IP 报头。ARP 是一种将 IPv4 地址解析为 MAC 地址的服务协议。
  • ICMP 是 IP 的伙伴协议,它报告传输过程中遇到的问题,例如网络不可达和主机不可达。ICMP 本身不需要 IP 地址,因为它封装在 IP 报头中,如以下 ICMP 回送请求的屏幕截图所示:

Figure 8.5 – An ICMP echo request
)

图 8.5–ICMP 回应请求

到目前为止,您应该已经了解网络层通过提供逻辑寻址和路径确定,允许不同网络上的主机相互通信。

下表概述了网络层:

Table 8.7 – Summary of the Network layer
)

表 8.7-网络层总结

随着数据被封装并沿 OSI 模型向下传递,下一步是数据链路层,其中一个关键作用是正确的帧形成,以便帧可以在局域网上传输。让我们来看看。

检查数据链路层

数据链路层(或第 2 层)主要关注正确的帧形成,并在数据在网络上发送之前准备好数据。在数据链路层层中,有几个协议负责正确格式化数据,以便数据能够在目的网络上成功传输。接下来让我们关注几个关键的数据链路层协议。

研究协议和 PDU

数据链路层是数据沿着 OSI 模型传输的最后一站,因为这一层添加了帧头和帧尾来为网络准备帧。这一层使用的协议包括:

  • 以太网 II 是当今应用最广泛的以太网技术。它使用物理(或 MAC)地址在 LAN 上建立连接。
  • 高级数据链路控制 ( HDLC )使用帧将数据从点到点传送。

在这一层,PDU 是一个帧。每个帧都需要一个地址,我们将在下面概述。

描述数据链路层地址

在局域网上,数据链路层使用目的机器的 MAC 地址而不是 IP 地址。数据链路层有一个帧头,包含源和目的 MAC 地址,也称为物理地址。预告片,或帧校验序列,保存一个称为循环冗余校验 ( CRC )的值,用于网络上的错误检测。

下表总结了数据链路层:

Table 8.8 – Summary of the Data Link layer
)

表 8.8-数据链路层总结

数据链路层确保通过网络介质传输时,帧的格式和链路的访问正确,并能进行错误检测。然后,数据传输到物理层,我们将在下一节中看到。

穿越物理层

物理层(或第一层)通过媒体以比特流的形式传输数据。

一旦数据被格式化成帧,网络接口卡 ( NIC )就以比特流的形式将其发送到网络媒体。

示例协议

在物理层,有几种不同的协议用于通过网络介质传输数据:

  • 数字用户线 ( DSL )通过电话线为的居民和企业提供宽带。
  • 综合业务数字网 ( ISDN )利用公共交换电话网 ( PSTN )传输语音、视频和数据。ISDN 主要用于广播行业。
  • IEEE 802.3—以太网物理层—根据媒体类型定义传输属性,如快速以太网、千兆(GB) 以太网。

物理层是通过网络介质进行二进制传输的地方。让我们回顾一下这一层的 PDU。

描述 PDU

在这一层,帧形成完成并准备在介质上传输。PDU 是最基本的形式,即比特。传播的方法将取决于媒介。

网络媒体包括以下内容:

  • 铜缆采用非屏蔽双绞线 ( UTP )、屏蔽双绞线 ( STP ),或者同轴;用电脉冲传输
  • 光纤使用多模或单模电缆;用光脉冲传输
  • 无线使用 802.11 规范;通过无线电波传输

下表总结了物理层:

Table 8.9 – Summary of the Physical layer
)

表 8.9-物理层概述

在通过网络传输之前,数据必须采用正确的格式。下一节将探讨封装过程,即添加报头和地址,并为通过介质传输数据做好准备。

探索封装过程

现在我们已经对各层有了了解,让我们看看在封装过程中各层如何协同工作来创建一个帧。

在帧形成期间,该过程从数据开始。随着数据沿各层向下移动,一个接一个地添加报头,直到帧完整。每个框架都有以下组件:

  • 数据和适当的应用层报头(如果适用)
  • 段标题
  • 数据包(或 IP)报头
  • 帧头

我们将从帧的数据部分开始。

查看数据

在大多数情况下,当帧形成和封装开始时,我们从数据开始,如下所示:

Figure 8.6 – The encapsulation process—data
)

图 8.6-封装过程-数据

该数据可能是以下任何一种:

  • HTTP GET请求
  • 将主机名解析为 IP 地址的 DNS 请求
  • 请求动态分配 IP 地址的 DHCP 广播

然后,数据继续它的旅程,成为一个片段。

识别细分市场

接下来发生的事情是数据将(在大多数情况下)变成使用 TCP 报头或 UDP 报头的数据段:

Figure 8.7 – The encapsulation process—segment
)

图 8.7–封装过程-分段

该段包含一个源和目的端口地址,如图 8.7 所示。封装过程的下一步是添加 IP 报头,使其成为数据包。我们接下来将讨论这一点。

表征数据包

随着数据被封装,我们现在有了数据,以及保存 TCP 或 UDP 端口地址的数据段。封装的下一部分是通过将源和目的 IPv4 或 IPv6 地址添加到 IP 报头来创建数据包,如下所示:

Figure 8.8 – The encapsulation process—packet
)

图 8.8–封装过程—数据包

封装过程的最后一部分是添加帧头,这将在下一节中演示。

形成框架

创建框架之旅的最后一站是添加标题。在该框架中,我们有以下内容:

  • 数据,如 HTTP 请求或 DNS 回复
  • 传输层报头(或数据段)
  • 网络层报头(或数据包)

此时,我们通过添加源 MAC 地址和目的 MAC 地址来完成帧,如下所示:

Figure 8.9 – The encapsulation process—frame
)

图 8.9-封装过程-框架

对于一个帧,我们不仅有一个帧头,还有一个帧尾,称为帧校验序列 ( FCS )。FCS 保存一个称为循环冗余校验的值,该值用于网络上的错误检测,并在行进途中被校验。

注意

FCS 用于错误检测,而不是错误校正

下一节将介绍当 Wireshark 捕获流量并将其呈现给用户时,帧的结构是什么样子。

演示 Wireshark 中的帧结构

一旦您理解了封装和帧形成,您将能够学习 Wireshark 如何表示帧形成,如下面的截图所示:

Figure 8.10 – Frame formation in Wireshark
)

图 8.10-Wireshark 中的帧结构

注意

并非所有帧都包含数据;然而,这一个有,所以它是一个完全封装的帧的好例子。

查看单个帧时,您会在图 8.10 的顶部看到Frame 4371行,这是关于该单个帧的元数据,它总结了该帧的内容。该帧的元数据包括诸如401 bytes on wire401 bytes captured的信息。

在帧元数据之后,您将看到以下内容:

  • :帧头显示以太网 II,之后是源和目的 MAC 地址。
  • 数据包:IP 头代表网络层,保存源和目的 IP 地址。
  • :TCP 报头代表传输层,它保存源和目的端口地址。
  • 数据:HTTP 头表示应用层。在这种情况下,它是一个 web 请求。

这是 Wireshark 如何显示封装过程及其与 OSI 模型关系的示例。

既然您已经了解了 Wireshark 中的封装过程和帧形成过程,那么让我们来看看 NIC,看看 OSI 模型在您自己的系统上的运行情况。

检查网络绑定

在你自己的笔记本电脑或台式机上,你可以很容易地看到 OSI 模型的运行。如果您检查您的网络连接,然后选择您的网络接口卡的属性,如下面的屏幕截图所示,您可以看到 OSI 模型中的各层是如何表示的:

Figure 8.11 – Network bindings
)

图 8.11–网络绑定

下面描述了不同的层以及它们在以太网属性中的表现方式:

  • 数据链路层和物理层在网卡中表示。
  • 微软网络的客户端和微软网络文件和打印共享中表现了应用层、表示层和会话层。
  • 网络层显示为互联网协议(TCP/IP)

到目前为止,您应该能够识别 OSI 模型的每一层,以及每一层在 Wireshark 中是如何表示的。

总结

在本章中,我们仔细研究了一个重要的概念,OSI 模型和封装过程。OSI 模型是一个服务于多种目的的框架。该模型为开发人员提供了一个通用框架,并提供了一种方法来帮助学生理解每一层发生的过程。除此之外,了解每一层、PDU 和寻址将有助于您更好地理解 Wireshark 中的流程,并提高您的数据分析技能。

至此,您应该对每一层的作用、目的、协议和 PDU 有了更好的理解。我们探讨了封装过程,并研究了 Wireshark 中的帧结构。为了帮助您理解您的系统如何使用 OSI 模型,我们查看了该模型在网络绑定中是如何表示的。

在下一章中,我们将仔细研究如何解码两个主要的传输层:TCP 和 UDP。我们将首先回顾传输层的用途,然后讨论 TCP 并研究 Wireshark 中的 11 字段报头格式。然后,我们将对 UDP 的目的进行概述,并检查四个字段的报头和每个字段值的重要性。

问题

现在是时候检查你的知识了。选择最佳答案,然后将您的答案与评估附录中列出的答案进行核对:

  1. ____ 层或第 5 层负责建立、维护和拆除会话。
    1. 运输
    2. 应用
    3. 会议
    4. 介绍会;展示会
  2. ____ 层或第 4 层负责传输数据,要么使用无连接协议,要么使用面向连接的协议。
    1. 运输
    2. 应用
    3. 会议
    4. 介绍会;展示会
  3. ____ 层或第 6 层负责正确的数据格式化以及可选的压缩和加密。
    1. 运输
    2. 应用
    3. 会议
    4. 介绍会;展示会
  4. TCP 端口334在 _____ 端口范围内。
    1. 短暂的
    2. 众所周知
    3. 注册的
    4. 安全的
  5. 传输层的 PDU 是 _____。
    1. 数据
    2. 基本框架
    3. 小包裹
  6. ARP 没有(n) ___ 报头,因为它是一种将 IPv4 地址解析为 MAC 地址的服务协议。
    1. 数据传输器
    2. 基本框架
    3. 互联网协议(Internet Protocol)
  7. 在局域网中,数据链路层使用目的机器的 _____ 地址,而不是 IP 地址。
    1. 测量与控制(Measurement and Control)
    2. 短暂的
    3. 小包裹

第三部分:互联网套件 TCP/IP

在这一节中,我们将学习 internet 套件,并研究传输数据的协议,TCP、UDP、IP 和 ICMP。我们将仔细研究 TCP 如何管理连接,并剖析握手和拆卸过程。您将看到 IPv4 和 IPv6 之间的区别,并了解为什么 ICMP 是数据传输过程中不可或缺的一部分。

本节将涵盖以下章节:

九、解码 TCP 和 UDP

自从 20 世纪 80 年代早期标准化以来,传输控制协议/互联网协议 ( TCP/IP )套件已经定义了数据如何被寻址、打包、传输和路由。多年来,TCP/IP 套件已经过修改,以在当今不断变化的网络中提供更高的效率。本章将重点介绍该套件的 TCP 部分,即开放系统互连 ( OSI )模型的传输层(或第 4 层)。第 4 层有几种传输数据的协议;然而,我们将重点放在最广泛使用的传输层协议,TCP 和 UDP。

在本章中,我们将首先回顾传输层的作用和目的。然后,我们将进一步了解 TCP(一种面向连接的协议)及其用途。为了便于您分析 TCP,我们将详细检查报头格式和字段值,例如序列号、偏移量、窗口大小 ( WS )和 TCP 标志。我们将回顾一下用户数据报协议 ( UDP ),并讨论这种轻量级、无连接协议的常见用途。我们将通过检查 UDP 的简化的四字段报头来结束。

本章将涵盖以下内容:

  • 查看传输层
  • 描述 TCP
  • 检查 11 字段 TCP 报头
  • 了解 UDP
  • 发现四字段 UDP 报头

查看传输层

OSI 模型的传输层负责通过在 IP 网络上使用无连接或面向连接的协议来提供端到端的数据传输。所使用的传输协议将取决于应用。

除了 TCP 和 UDP 之外,这一层还有几个协议,包括:

  • 可靠数据协议 ( RDP ):用于以面向连接的方式传输数据
  • 流控制传输协议 ( SCTP ):为有多个 IP 地址的数据流提供可靠的传输

虽然还有其他传输层协议,但两个主要的协议是 TCP 和 UDP,如下图所示:

Figure 9.1 – The OSI model—Transport layer
)

图 9.1-OSI 模型-传输层

UDP 是无连接的,在需要快速传输数据时使用。UDP 有一个轻量级的四字段报头,其长度总是 8 个字节。

注意

与 TCP 不同,UDP 目前没有任何报头选项。然而,由于互联网不断变化的特性,人们一直在积极讨论是否可能包含 UDP 选项。你可以查看名为UDP传输选项的草案,这里:https://www . IETF . org/archive/id/draft-IETF-tsvwg-UDP-Options-13 . txt

与 UDP 相反,TCP 是面向连接的协议。它有一个 11 字段的标题,能够包含选项。在下一节中,我们将了解该协议在监控拥塞和提供流量控制的同时确保完整数据传输的能力是多么令人印象深刻。

描述 TCP

TCP 是面向连接的协议具有端到端的可靠性。这两个重要特征描述如下:

  • 面向连接意味着在传输任何数据之前,两个端点必须建立连接。要开始一个会话,TCP 以一次(三方)握手开始,以一系列finish(FIN)数据包结束,从而结束会话。
  • 端到端可靠性是指在数据传输过程中,数据被排序和确认。所有数据都被仔细监控,如果传输中有任何间隙,TCP 将请求任何丢失的数据包。

两台主机建立连接后,TCP 会监控会话,以确保数据传输完成,而不会给主机或网络造成过度压力。在下一节中,我们将总结 TCP 连接期间发生的情况。

建立和维护连接

使用 TCP 时,在进行任何数据交换之前,会话必须从主机之间的三方握手开始。握手确立了对话的参数。在开始通信之前,客户端和服务器必须就所有参数达成一致。

在许多情况下,除了 TCP 报头之外,还有报头选项来概括和进一步定义对话的参数。

任何 TCP 选项都可以在三次握手的前两个数据包中找到。例如,两个常见选项如下:

  • 窗口缩放:通过提供乘数来扩展规定的 WS 的值,该乘数更准确地反映了真实的 WS。

  • Selective Acknowledgements (SACK): When SACK is enabled, the receiver will notify the sender only if there are any missing packets.

    注意

    TCP 选项将在第十章 、管理 TCP 连接中详细介绍。

一旦两台主机之间建立了连接,本地和外部(或远程)主机的操作系统都会创建一个套接字,它是一个 IP 地址和一个端口。

要查看 Windows 机器上所有活动的 TCP 连接,请打开命令行提示符并运行netstat -anp tcp。这将显示您的活动连接。

在顶部,您会看到以下标题:

原始本地地址外部地址状态

这些定义如下:

  • Proto(协议)
  • Local Address(本地 IP 地址和端口)
  • Foreign Address(远程 IP 地址和端口)
  • State连接的

运行netstat命令后,我的输出如下:

Figure 9.2 – Netstat showing TCP connection status
)

图 9.2–显示 TCP 连接状态的 Netstat

图 9.2 中,您会看到一个本地 IP 地址和端口,以及一个外地(或远程)IP 地址和端口。例如,在第一行中,我们看到以下内容:

  • Proto : TCP
  • Local Address : 10.0.0.148:49559
  • Foreign Address : 172.249.124.141:5223
  • State : ESTABLISHED(或主动沟通)

在对话过程中,TCP 会确认收到的所有数据包,以确保数据的完整传递。每次 TCP 收到数据,接收方主机都会向发送方发回一个确认 ( ACK )数据包,通知发送方收到了什么数据。

会话结束后,TCP 通过交换 FIN 数据包来结束会话。

接下来,让我们看看这个强大的协议是如何帮助控制数据流和减少网络拥塞的。

管理流程

在连接过程中,TCP 主动监控连接,发送方和接收方不断相互通信。在数据交换期间,TCP 将按如下方式管理主机和网络的数据:

  • 流量控制是一种使用 WS 的端到端控制方法,因此发送方不会传输太多数据,并且会淹没主机
  • 拥塞控制防止一个节点发送过多数据使网络不堪重负。

当提供拥塞控制时,有两个在数据传输期间计算的状态变量:

  • 拥塞窗口 ( Cwnd ):发送方限制定义了主机在接收到确认之前可以发送的数据量。
  • 接收窗口 ( Rwnd ):接收端限制定义了主机可以接收的数据量。

在 TCP 连接中,这两个变量共同调节数据流,最大限度地减少拥塞,并提高网络性能。

很难相信,但是在一个单独的帧中有大量的细节,并且每个帧可以包含许多组件。组件可以包括各种标题、标题中的字段值和可选数据。在下一节中,我们将查看单个 TCP 帧中的所有信息。

探索单个 TCP 帧

要深入了解 TCP 报头,请访问 https://www.cloudshark.org/captures/0012f52602a3 的。在 Wireshark 中下载并打开HTTP.cap数据包捕获文件。

如下面的屏幕截图所示,选择Frame 4并关注数据包细节窗格:

Figure 9.3 – The packet details pane for Frame 4
)

图 9.3–帧 4 的数据包详细信息窗格

每个标题都有一个摘要,后面是标题的详细信息。要查看协议摘要,将光标放在协议上,单击右键,然后选择协议首选项,如下所示:

Figure 9.4 – Protocol preferences for TCP
)

图 9.4–TCP 的协议首选项

进入后,选择显示协议树中的 TCP 摘要,如图所示。此外,您可以通过单击右侧的箭头(或插入符号, > )来展开标题,以查看详细信息。

我们来分解一下Frame 4的各个元素,从画面细节开始。

描述框架细节

图 9.3 的顶部开始,我们看到Frame 4。点击左侧的箭头展开框架标识符,查看如下详细信息:

 Figure 9.5 – Frame metadata on a single frame
)

图 9.5–单个帧上的帧元数据

注意

标识符Frame不是一个协议,它是由 Wireshark 生成的值列表,描述关于单个帧的信息(或元数据)。

图 9.5 所示,我们看到的是关于Frame 4的元数据,它总结了帧的内容,比如帧长度和任何着色规则。

下一个标识符开始真正的帧封装,正如我们看到的Ethernet II报头。

扩展以太网 II 报头

(真正的)帧头是Ethernet II帧,这是一种常见的帧格式,可以在局域网 ( 局域网)上找到。帧头跟随元数据摘要,并提供关于源和目的媒体访问控制 ( MAC )地址的信息,如下面的截图所示:

Figure 9.6 – Frame header
)

图 9.6–帧标题

在报头中,我们在帧的最后一行看到了下面的:Type: IPv4 (0X0800)。这意味着跟在后面的下一个报头是 IPv4 报头,我们接下来将对此进行研究。

查看 IP 报头

Internet Protocol Version 4报头以包括源和目的地 IP 地址的总结开始,随后是 IPv4 字段值。

注意

IPv4 报头将在第十一章 、分析 IPv4 和 IPv6 中详细介绍。

Frame 4的 IPv4 报头如下图所示:

Figure 9.7 – IPv4 header
)

图 9.7–IP v4 报头

类似于帧头,我们在帧内看到下面的:Protocol: TCP (6)。这意味着接下来的下一个报头是 TCP 报头。

导航 TCP 报头

TCP 报头以标识符Transmission Control Protocol开始,并列出源和目的地端口、序列和确认号。此外,您还会看到 Wireshark 生成的数据,显示在[ ]中,比如[Stream index: 0]

Frame 4的 TCP 报头如下图所示:

Figure 9.8 – TCP header
)

图 9.8–TCP 报头

这里我们看到了 TCP 报头的细节。在这种情况下,我已经禁用了协议树协议首选项中的 Show TCP summary,因此整个报头能够适合页面。

Frame 4的最后一个组件是超文本传输协议 ( HTTP )头。

检查 HTTP 头

因为客户端正在从 web 服务器请求数据,所以使用的应用是 HTTP。在这种情况下,我们会看到 HTTP 标头,如下所示:

Figure 9.9 – HTTP header
)

图 9.9–HTTP 标题

注意

HTTP 协议将在 第十五章解码 HTTP 中详细介绍。

既然我们已经介绍了单个帧中的细节,让我们详细检查 TCP 报头和每个字段值的。

检查 11 字段 TCP 报头

TCP 有一个 11 字段的报头。字段包含跟踪对话的值,如下图所示:

Figure 9.10 – The TCP header
)

图 9.10–TCP 报头

TCP 使用字段的值来监控通信。一旦接收到所有字节,TCP 将指示终端设备已成功接收到所有数据。如果在数据传输过程中出现问题,TCP 会提醒另一台主机任何丢失的数据段。

在本节中,我们将查看每个报头字段,以便您更好地理解 TCP 如何能够在主机之间提供可靠的通信。在适当的时候,我将以下面的方式列出字段和大小,[Field: Size],以便您理解组成 TCP 报头的值。

HTTP.capFrame 4中的 TCP 报头顶部开始,我们可以看到标签Transmission Control Protocol,如图图 9.8 所示。在标签下方,您可以看到 TCP 报头字段。

查看 TCP 报头内容时,Wireshark 生成的任何信息都会显示在括号中。这些生成的内容将帮助您更好地理解标题的细节,例如[Timestamps][SEQ/ACK analysis],如靠近图 9.8 底部所示。

让我们从端口和 TCP 数据段长度开始,逐步查看前几个报头字段。

探索 TCP 端口

在 Wireshark 中,您可以解析物理、网络和传输层地址。数据包捕获HTTP.cap使用传输层名称解析。因此,只要使用已知或注册的端口,Wireshark 就会识别与该端口号相关联的应用。比如 HTTP 使用端口80,使用端口80时会被识别为 HTTP。

下面列出了端口号,以及 Wireshark 提供的生成信息,如Stream IndexSegment Length:

  • 源端口 16 位 : Frame 4是客户端对服务器的请求。通过指示一个端口号,告诉服务器,当你传送数据时,使用这个端口。在这种情况下,值为Source Port: 57678 (57678),其中不与任何应用相关联;它是在此连接中使用的短暂(或临时分配的)端口。因此,您不会看到端口号前列出的协议。
  • 目的端口 16 位 : Frame 4是客户端对服务器的请求,很可能是 web 服务器,因为值是Destination Port: http (80)
  • 流索引:该值显示在括号中,Wireshark 计算该值以跟踪流的,其中每个流是两个端点之间的通信。在Frame 4中,我们可以看到[Stream index: 0],这意味着这是该捕获中的第一个流。该值在进行分析时是一个有用的工具,因为您可以轻松地右键单击一个帧并选择跟随,然后选择一个流(如 TCP 或 HTTP ),如下面的屏幕截图所示:

Figure 9.11 – Following the stream
)

图 9.11–顺流而下

  • 对话完成度:这个生成的值表示对话是否完成。在这种情况下,我们看到Complete, WITH_DATA (31)]。这意味着捕获的对话是完整的,因为它具有完整对话的所有元素,例如握手、数据传输和 FIN 数据包交换。
  • TCP 段长度:在传输层,协议数据单元 ( PDU )是一个段。段长度是 TCP 有效载荷的值,它是 TCP 报头和任何选项之后的数据。Wireshark 计算该值,如括号中所示。在Frame 4中,我们可以看到[TCP Segment Len: 134],它与TCP payload (134 bytes)的值相同,如图 9.8 最后一行所示。

接下来,我们将看看记录数据传输期间发送和接收的数据的字段。

排序字节

因为 TCP 是面向连接的协议,所以操作系统跟踪收到的每个字节(或八位字节)数据。每个字节被排序,一旦被接收,就被确认。三次握手开始排序过程。

在看序列号之前,让我们讨论一下它们是如何计算的。

同步序列号

在交换数据之前,客户端和服务器必须同步序列号。这是通过使用 TCP 报头中的同步 ( 同步)标志来实现的。SYN 数据包位于三次握手的前两个数据包中,负责同步连接期间使用的序列号。

例如,如下面截图中的所示,客户端向服务器发送一个 SYN 数据包,其序列 ( SEQ )编号为100:

Figure 9.12 – The three-way handshake
)

图 9.12-三次握手

注意

在本例中,序列号 100 是随机选择的。在实际的 TCP 连接中,操作系统将生成一个随机序列号来启动该过程。

服务器通过发送带有序列号300和 ACK101同步确认 ( SYN,ACK )进行响应。客户端发送一个序列号为301的最终 ACK 和一个序列号为101的 ACK。序列号现在已同步。

注意

你可以在HTTP.cap的前三包里看到一个的例子三次握手。

接下来,我们将评估 Wireshark 在分析数据时如何表示序列号。

了解序列号

当处理数据包捕获时,您可以选择如何表示您的序列号。Wireshark 能够生成相对序列号,主要是因为实际(或绝对)序列号非常大。相对序列号易于理解,表示与特定对话的值相关的值*。*

要进行切换,右击 TCP 报头的任意位置,选择协议首选项,然后选择相对序列号

请记住,为了显示相对序列号,您还必须选择分析 TCP 序列号,如下图所示:

 Figure 9.13 – Protocol preferences—relative sequence numbers
)

图 9.13-协议首选项-相对序列号

这将把序号调整为更容易理解的值。

使用相对序列号时,绝对序列号在下方显示为Sequence Number (raw): 3344099089,如以下截图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 9.14–查看序列号

现在你已经了解了序列号是如何产生和显示的,让我们看看在数据传输过程中它们是如何表示的。

查看序列字段值

正如我们所知,处理序列的字段值有助于提供 TCP 连接期间交换的数据的快照。这些字段如下所示:

  • 序列号(32 位):握手结束后,数据流开始。在Frame 4中,我们可以看到Sequence number: 18825 (relative sequence number)
  • 序列号(原始):该值代表未改变的序列号。在Frame 4中,我们可以看到值为3344099089
  • 下一个序列号:括号内为计算值。Wireshark 将当前序列号添加到 TCP 数据段长度中,以获得下一个序列号。

除了对数据进行排序,TCP 还会确认所有数据的接收。

确认数据

在数据传输过程中,操作系统通过使用序列号来跟踪所有字节和重新排序。每次操作系统接收数据时,接收主机都会确认数据已收到,并准备好接收更多数据,从下一个预期字节开始。

该过程与服务器发送数据同时发生。因此,它被称为期望确认。如下图所示,客户端向服务器发送 ACK,声明他们已经收到 524 字节的数据,并准备好接收更多数据,从 525 字节开始:

Figure 9.15 – Acknowledging the data
)

图 9.15–确认数据

在 TCP 报头中,有几个用于确认收到数据的字段。这些字段如下所示:

  • 确认号 32 位:在Frame 4中,我们可以看到值为Acknowledgment Number: 1 (relative ack number)。该值为1,因为它是来自客户端的第一个数据包。
  • 确认号(原始):该值代表未更改的确认号。在Frame 4中,我们可以看到值为3344080265

在图 9.14 中确认号后的一行,您会看到1000。这一行代表数据偏移字段,它以 32 位倍数表示 TCP 报头的长度。先说这个值是怎么算出来的。

计算偏移

固定 TCP 报头字段的大小是 20 字节。然而,在当今的网络中,TCP 报头通常具有额外的选项。因此,该值并不总是一致的。为了使接收设备知道数据何时开始,偏移字段将指示报头的长度,因为紧接在 TCP 报头之后,数据部分开始。

Frame 4的 TCP 报头按以下方式计算:

  1. 偏移值为1000,二进制等于八(8)。
  2. 偏移量以四(4)个字节为增量。
  3. 计算出的 TCP 报头长度: 8 * 4 = 32 字节。

Frame 4的偏移值(或 TCP 报头)是 32 字节。

评估 TCP 报头时,请记住以下几点:

  • 最小 TCP 报头长度为 20 字节。
  • 最大 TCP 报头长度为 60 字节。

如果您想快速检查报头长度,将光标放在Frame 4的 TCP 报头上,该值将反映在状态栏中,如下所示:

Figure 9.16 – Viewing the TCP header length
)

图 9.16–查看 TCP 报头长度

在跟踪数据交换的同时,TCP 报头中的另一个重要元素是标志的使用,这将在下一节中讨论。

跟随旗帜

TCP 标志用于指示对话期间的特定状态。有些是常见的,比如 ACK、FIN、SYN 但有些在实际应用中很少见到。TCP 有八个控制标志,如下所示:

Table 9. 1 – Defining the TCP control flags
)

表 9。1–定义 TCP 控制标志

TCP 标志在被设置时,将讲述 TCP 连接的故事。Wireshark 将在数据包列表窗格的Info列中反映这一状态:

 Figure 9.17 – Viewing the TCP flags
)

图 9.17–查看 TCP 标志

注意

TCP 被广泛使用,标志对于控制每个会话非常重要。但是,TCP 标志可以被恶意使用来发起攻击或逃避检测。因此,安全分析器应确保对设备进行调整,以监控 TCP 标志的非标准和不当使用。

TCP 标志提供了对话过程中正在发生的事情的指示。保持数据移动是很重要的。正如我们将在下一节中看到的,WS 用于通知发送方主机在任何给定时间可以接收多少数据。

解剖窗口大小

TCP 是一种全双工通信协议,其中发送方和接收方不断地相互通信。在激活的连接期间,会发生以下情况:

  • 服务器向客户端发送数据。
  • 客户端用一个 ACK 和一个 WS 值(以字节为单位)来响应,WS 值表示客户端可以接受多少数据。

通过每个 ACK 传输 WS 有助于控制数据流。让我们来谈谈这是如何工作的。

控制流量

流量控制是 TCP 使用的一种协议。在此过程中,客户端会在每个 ACK 中发送一个 WS,这样发送方就不会传输太多数据而使主机不堪重负:

  1. 如果客户端无法处理所有数据,客户端将发送一个具有较低 WS 值的 ACK。
  2. 一旦客户机通告了一个较小的 WS,服务器就抑制数据传输。
  3. 当客户端恢复并能够接受更多数据时,客户端会发送一个 ACK,其中包含反映新值的窗口更新。
  4. 然后,服务器可以继续发送数据,直到所有数据都发送到客户端。

请记住,WS 值可以在对话过程中随时更改。

注意

流量控制的一个相关术语叫做滑动窗口,因为随着端点调整它可以接受的流量,该值将来回滑动。

Frame 4的情况下,我们可以看到Window: 46:

 Figure 9.18 – Viewing the window size
)

图 9.18–查看窗口大小

尽管客户端已经指示 WS 为 46 字节,但是这个值很可能更大。先说为什么这个值不一样。

计算窗口大小

沿着Window: 46线,如图图 9.18 所示,我们可以看到[Calculated window size: 5888]。这个值比实际的 WS 大,因为这个流使用了一个缩放因子,它改变了窗口大小的值。这是由于 WS 随时间的不同而不同。

最初的 TCP 征求意见稿 ( RFC ) 793写于 1981 年。当时,缓冲区空间较小,16 位窗口大小值字段将容纳 20 世纪 80 年代可用的实际窗口大小。

如果所有 16 位都被使用,这将意味着窗口大小等于 216,或 65,536 字节。随着时间的推移,硬件得到了改进,缓冲区空间也超出了这一限制。因此,选项用于扩展 TCP 报头中的 WS 值。在 20 世纪 90 年代早期,RFC 被编写来解决较大的缓冲区大小,并且窗口缩放选项提供了解决实际 WS 的方法。

因此,Wireshark 通过将 128 的缩放因子乘以所列的 46 字节的窗口大小字段值来计算窗口大小,这为我们提供了 5888 字节的计算窗口大小。

接下来,我们来看看比例因子是如何确定的。

缩放窗口值

[Window Size scaling factor: 128]由 Wireshark 计算。这反映了三方握手期间交换的 TCP 选项的比例因子。如三次握手的第一个包(Frame 1)所示,我们可以看到服务器发送的 TCP 选项将最后一个选项列为Window scale: 7 (multiply by 128),如下图:

Figure 9.19 – TCP options
)

图 9.19–TCP 选项

Wireshark 将通过将比例因子乘以窗口大小字段值来确定计算出的 WS。

如果捕获是在三次握手之后开始的,Wireshark 无法知道缩放因子是什么,将显示[Window Size scaling factor: -1 (unknown)]。你也可能看到[Window size scaling factor: -2 (no window scaling used)]。在这种情况下,Wireshark 将显示实际的窗口大小。

如果您知道比例因子,您可以修改该值。右键单击 TCP 报头中的任意位置,选择协议首选项 | 缩放因子,以便在无法从捕获中获得时使用。在那里,选择适当的值,如下面的屏幕截图所示:

Figure 9.20 – TCP protocol preferences
)

图 9.20–TCP 协议首选项

除了监控通信的字段值,TCP 报头中还有一些其他字段值和选项。让我们来看看。

查看附加标题值

报头的最后一部分列出了额外的值和帮助保持 TCP 连接正常的选项。

在数据传输过程中,可能会出现错误。校验和是数据包数据部分的计算值,在传输过程中会定期重新计算以确保数据完整性。校验和用于错误检测,而不是校正。如果在重新计算过程中校验和不准确,数据包将被丢弃。

Frame 4中,我们可以看到校验和的值为Checksum: 0x4729 [unverified]。进行数据包捕获时,在硬件或网络驱动程序计算校验和之前,捕获的数据包会呈现给 Wireshark。它可能被错误地计算,这将导致错误。

为了避免校验和错误,您可以通过右键单击 TCP 报头中的任意位置,选择协议首选项,以及取消选中 来禁用校验和验证,如果可能的话

TCP 标志(包括 URG 标志)指示应该具有优先级的数据包。如果设置了 URG 标志,接收主机将需要检查帧以获取相关数据。这个很少用。一个更常用的标志是 PSH,因为它通知 TCP 数据应该立即被发送到堆栈上。

添加 TCP 选项

在任何 TCP 对话之前,有一个三方握手的。在握手过程中,TCP 通常有几种选择。在 SYN 包交换期间,选项将被列出。在Frame 4中,选项包括Timestamps不操作 ( NOP ),如下图:

Figure 9.21 – TCP options for Frame 4
)

图 9.21–第 4 帧的 TCP 选项

在捕获过程中,Wireshark 收集统计数据并计算可用于分析的值。

计算值

在 TCP 报头的底部,有两个计算,[Timestamps][SEQ/ACK analysis],如下面的截图所示:

Figure 9.22 – Calculated values in the TCP header
)

图 9.22–TCP 报头中的计算值

[Timestamps]计算指示经过的时间,并用于提供关于在统计 | 捕获文件属性中找到的捕获的详细信息。

[SEQ/ACK analysis]是一个计算字段,它包括诸如确认了什么帧和往返时间 ( RTT )等信息,这些信息用于诸如在统计 | TCP 流图下找到的时序图等功能中。

列出的最后一个组件是TCP payload (134 bytes),它(如前所述)是计算出的偏移值。

如您所见,TCP 有很多优点,它提供可靠的数据传输。在下一节中,我们将了解 UDP,这是一种在数据传输需要速度而非可靠性时使用的传输协议。

了解 UDP

UDP 是用于数据传输的轻量级无连接协议。UDP 没有握手或连接过程,也没有拆卸。

要查看 Windows 机器上所有活动的 UDP 连接,请打开命令行并运行netstat -anp udp,如下面的屏幕截图所示:

Figure 9.23 – Netstat command showing UDP connection status
)

图 9.23–显示 UDP 连接状态的 Netstat 命令

UDP 没有任何订购或可靠性服务;它只是传递数据。因此,不需要外部(或远程)IP 地址和端口。因此,如图 9.23 所示,您将只看到一个用于 UDP 的本地 IP 地址和端口。

由于 UDP 的流线型本质,它是对时间敏感的应用的合适协议,例如:

  • 动态主机配置协议 ( DHCP )
  • 域名系统 ( DNS )
  • 琐碎的文件传输协议 ( TFTP )
  • 网络电话 ( 网络电话)

UDP 是一种轻量级协议,长度只有 8 个字节。在下一节中,让我们看看单个 UDP 帧的元素。

研究单个 UDP 帧

与 TCP 不同,UDP 是一种轻量级的协议,具有非常简单的报头。UDP 只有四个字段,没有选项。

要检查 UDP 并深入研究 UDP 报头,请到 https://www.cloudshark.org/captures/0320b9b57d35 的下载DNS Question & Answer.pcapng文件。前往Frame 1,这样你就能跟上。选择后,您将看到以下详细信息:

Figure 9.24 – Frame 1 showing the packet details pane
)

图 9.24–显示数据包详细信息窗格的第 1 帧

Wireshark 从顶部开始列出这一帧的内容。

Frame 1中,我们可以看到以下内容:

  • Frame 1:Frame标签不是一个协议。它是由 Wireshark 生成的值或元数据的列表,描述关于单个帧的信息。
  • Ethernet II:帧头跟随元数据,提供关于源和目的 MAC 地址的信息。
  • Internet Protocol Version 4:提供所用 IP 协议的详细信息,包括源和目的 IP 地址。
  • User Datagram Protocol:提供 UDP 头的详细信息。

既然我们已经查看了单个 UDP 帧中的信息,让我们检查 UDP 报头和每个字段值。

发现四字段 UDP 报头

UDP 有一个包含四个字段的头,其中包含跟踪会话的值,如下图所示:

 Figure 9.25 – The UDP header
)

图 9.25–UDP 报头

现在,让我们来看看四个 UDP 报头。

分析 UDP 报头字段

从 UDP 报头的顶部开始,我们可以看到User Datagram Protocol,后面是报头所代表内容的摘要。标题和摘要下面是 UDP 标题字段,如下所示:

Figure 9.26 – The UDP header as shown in Wireshark
)

图 9.26–Wireshark 中显示的 UDP 报头

与 TCP 不同,UDP 有一个简单的报头,没有列出额外的通信细节,如TimestampsSEQ/ACK analysis

在标题之后,您将看到以下内容:

  • 源端口 16 位:源端口字段是发送方的端口。在Frame 1中,发送方是一个 DNS 客户端,使用Source Port: 54585,不与关联任何应用;它是在此连接中使用的短暂或临时分配的端口。

  • 目的端口 16 位:目的端口字段是接收方的端口。在这种情况下,Frame 1中的端口是Destination Port: domain (53,它是 DNS 服务器上接受解析域名请求的端口。

  • Length 16-bit :在一个 UDP 包中,Length 代表 UDP 头和后面任何数据的字节数。在Frame 1中,我们可以看到Length: 36,它等于 UDP 头(8 字节)和 DNS 头(28 字节)。

  • Checksum 16-bit: The UDP checksum is a calculated value of the data portion of the packet that is periodically recalculated during transmission to ensure data integrity.

    注意

    使用 IPv4 时,使用 UDP 校验和是可选的;但是,使用 IPv6 时需要*。使用 IPv6 时需要校验和的原因是 IPv6 没有校验和,UDP 报头中的值用于确保数据完整性。*

*UDP 总是 8 字节长,因为它没有任何报头选项。此外,UDP 是无连接的。因此,如果在数据传输过程中出现问题,则由更高级别的协议来传达任何问题或请求任何丢失的数据。

总结

在本章中,我们重点介绍了 OSI 模型的传输层(或第 4 层),特别是这一层中的两个主要协议:TCP 和 UDP。我们从传输层的概述开始。然后我们评估了 TCP,一种面向连接的协议。我们看到,为了实现可靠性,TCP 对每个二进制八位数进行排序和确认。我们现在了解了,除了传输数据之外,TCP 如何监控传输,并且不仅提供流量控制,还提供拥塞控制。我们还仔细查看了标题以及八个控制标志,然后回顾了窗口缩放是如何工作的。

除了 TCP 之外,我们还研究了另一种主要的传输层协议 UDP,它可以确保对时间敏感的数据和协议(如 DHCP 和 DNS)的快速传输。我们回顾了四字段 UDP 报头的细节,它提供了足够的信息来传递数据,而没有额外的开销。

现在您已经对 TCP 有了坚实的了解,下一步是更详细地了解 TCP 如何建立和拆除连接。在下一章中,我们将逐步完成启动 TCP 对话的过程。我们将研究 TCP 三次握手和由此产生的套接字创建。此外,我们还将学习数据包交换,并进一步了解 TCP 选项。最后,我们将概述 TCP 如何通过交换 FIN 包来结束数据传输。

问题

现在,是时候检查你的知识了。选择最佳答案,然后检查您的答案,这些答案可在评估附录中找到:

  1. ____ 被定义为 IP 地址和端口。
    1. 窗户
    2. (电源)插座
    3. 校验和
    4. 顺序
  2. ACK 725 表示我已经收到了 _____ 字节的数据,并准备好接收更多数据,从 _____ 开始。
    1. 七百和八百
    2. 724 和 725
    3. 725 和 726
    4. 725 和 725
  3. ____ 标志通知 TCP 应该立即发送数据。
    1. RST
    2. SYN
    3. ACK
    4. PSH
  4. 如果偏移值是 0101,则 TCP 报头长度= ___ 字节。
    1. Thirty-two
    2. eight
    3. Twenty
    4. Sixty-four
  5. 在正常连接中,___ 将使用 UDP。
    1. 超文本传送协议
    2. 简单邮件传输协议
    3. 动态主机配置协议
    4. 文件传送协议
  6. 与 TCP 不同,UDP 报头没有任何 _____。
    1. 港口
    2. 套接字
    3. 总和检查(checksum 的复数形式)
    4. 选择
  7. 如果客户端公布的缩放因子为 9,操作系统将需要将 WS 乘以 ____。
    1. Two
    2. nine
    3. One hundred and twenty-eight
    4. Five hundred and twelve

延伸阅读

要了解 Wireshark 中 TCP 分析的更多信息,请访问https://www . Wireshark . org/docs/wsug _ html _ chunked/chadvtcpanalysis . html。*

十、管理 TCP 连接

最重要的,但最不为人所知的,传输控制协议 ( TCP )概念之一是三次握手。TCP 握手启动连接并设置参数。在此过程完成之前,不会交换任何数据。与握手类似的是当两个端点交换一系列finish(FIN)包时的拆卸,这表示会话完成。

在这一章中,我们将更详细地看看握手和由此产生的套接字创建。为了让您能够专注于单个 TCP 流,我们将进行大规模捕获,并对数据包进行子集化、标记和过滤,以便我们能够检查 TCP 握手。随着本章的深入,我们将对握手过程中交换的 TCP 选项有更深入的了解。我们将了解它们的含义,以及为什么它们需要在今天的网络上进行对话。此外,我们将看到如何轻松地修改协议首选项,例如通过简单的右键单击来分析 TCP 序列号。最后,我们将检查 TCP 拆卸过程,并了解 FIN 标志如何指示数据传输的结束。

本章将通过涵盖以下内容来解决所有这些问题:

  • 剖析三次握手
  • 发现 TCP 选项
  • 了解 TCP 协议首选项
  • 识别 TCP 拆除

剖析三次握手

在计算中,握手是设备之间的信息交换,它设置了对话的参数。每一方发送可用的内容,在交换任何数据之前,两个端点就条款达成一致。

在大多数情况下,客户端会通过发送同步 ( SYN )数据包来发起与服务器的对话;服务器同步确认 ( SYN-ACK )响应,客户端随后以确认 ( ACK 完成握手。TCP 握手如下:

Figure 10.1 – The TCP three-way handshake
)

图 10.1–TCP 三次握手

握手完成后,将会进行数据交换。

要进一步了解三方握手,请访问。一旦到了那里,下载bigFlows.pcap以便你可以跟随。BigFlows 是一个包含许多协议和对话的大型捕获,如下面的屏幕截图所示:

Figure 10.2 – bigFlows.pcap
)

图 10.2–big flows . pcap

BigFlows 有791615个数据包,如图图 10.2 中状态栏的右下方所示。虽然您可以在技术上处理整个捕获,但是在下一节中,我们将隔离一个单独的流,然后创建一个更小、更易于管理的文件。

隔离单个流

当捕获流量时,Wireshark 会跟踪所有数据流。在一个bigFlows.pcap大小的文件中,会有很多 TCP 和用户数据报协议 ( UDP )流。虽然我们可以过滤任何流,但是现在,让我们用TCP stream 312来过滤,因为这包括握手、选项、数据,然后 FIN 交换来结束会话。

要仅显示流 312,转到显示过滤器并输入tcp.stream eq 312,然后按输入。因为这是一个很大的文件,Wireshark 需要几秒钟来运行过滤器。完成后,您将看到一个完整的 TCP 流示例,如下所示:

Figure 10.3 – tcp.stream eq 312
)

图 10.3–TCP . stream eq 312

既然我们已经有了一个单独的流,我们将希望对捕获进行子集化,并将其保存为一个更小的文件。要子集只需中的TCP stream 312,转到文件 | 导出指定数据包

这将打开一个对话框,提供各种导出指定数据包的方法,如以下屏幕截图所示:

Figure 10.4 – Select the All packets and Displayed options
)

图 10.4–选择所有数据包和显示选项

在对话框的底部附近,您会看到一个标题,数据包范围,您可以在这里选择。如果您已经过滤了捕获,Wireshark 将假设您只想导出显示的数据包,并且显示的单选按钮将被激活。

选择所有数据包显示的,如截图所示,然后另存为Flow312.pcapng

关闭bigFlows.pcap并清除显示过滤器,然后打开新创建的文件。在下一节中,让我们关注握手,并检查交换的每个数据包。

标记 TCP 握手

在 Wireshark 中隔离一系列数据包的方法之一是对其进行标记,这将修改数据包,使其具有白底黑字。一旦我们标记了它们,我们就可以根据标记的数据包进行过滤,以专注于握手。

在文件中,我们将通过标记数据包来识别握手。我们知道,要开始一个会话,TCP 从握手开始,握手使用三个数据包,如下所示:

  1. 客户端向服务器发送一个 SYN 数据包。
  2. 服务器通过发送 SYN ACK 数据包进行响应。
  3. 客户端发送最后一个 ACK 包。

握手完成后,数据流开始。

Wireshark 将通过在 info 列中显示交易详细信息来识别三次握手和数据包交换(如果您激活了此列标题)。在Flow312.pcapng捕获中,数据包 1、2 和 3 代表握手。

一旦握手被识别,我们将标记三个数据包中的每一个。要标记数据包,选择每个数据包并右键单击标记/取消标记数据包子菜单选项,如以下屏幕截图所示:

Figure 10.5 – Mark/Unmark Packet
)

图 10.5–标记/取消标记数据包

标记数据包后,背景将变为黑色,文本将变为白色,如下所示:

Figure 10.6 – Results of marking a packet
)

图 10.6–标记数据包的结果

之后,我们将希望通过在显示过滤器中输入frame.marked==1并按下 Enter 来仅查看标记的数据包。进入编辑 | 清除所有显示的标记,这样我们就可以开始分析握手了。

既然我们已经挑出了三次握手,让我们来看看三个数据包中的每一个。

识别握手数据包

在这一节中,我们将看一下每个包并检查标志,以及序列和确认号。让我们从 SYN 包开始。

发送 SYN 数据包

在第一个包中,客户机将通过向服务器发送一个 SYN 包来启动连接,然后等待响应。

要查看所有字段值,请转到帧 1 ,并展开 TCP 报头,如下图所示:

Figure 10.7 – The Flow312.pcapng TCP header in Frame 1
)

图 10.7–第 1 帧中的 Flow312.pcapng TCP 报头

帧 1 中,您将看到源端口和目的端口以及报头中的其他字段值。这包括序列号和 ACK 号,如下所示:

  • Sequence number: 0 (relative sequence number)
  • Acknowledgment Number: 0

如果我们展开标志,我们会看到Syn标志是set,如下面的屏幕截图所示。请记住,在握手的前两个数据包中,Syn标志将用于同步序列号:

 Figure 10.8 – The TCP Syn flag set
)

图 10.8–TCP Syn 标志集

虽然握手的三个包都很重要,但是前两个包设置了对话的参数。选择帧 1 并在数据包细节窗格中查看 TCP 报头。然后,选择 TCP 报头,我们会在底部的状态栏中看到Transmission Control Protocol (tcp), 40 bytes,如下面的截图所示:

Figure 10.9 – TCP header 40 bytes
)

图 10.9–TCP 报头 40 字节

正常的 TCP 报头是 20 字节,而这个报头是 40 字节。TCP 报头更大,因为它包含添加到报头的选项。

注意

在大多数情况下,您会在三次握手的前两个数据包中看到较大的报头。当 TCP 报头包含选项时,您可能还会在后续帧中看到更大的报头。

此外,在字段值中,我们看到 Wireshark 将这个对话标识为[Stream: 0]。在客户端,操作系统会创建一个 IP 地址和端口号组合为172.16.133.132: 50405的本地套接字来接收数据。

现在我们已经看到了三次握手的第一个数据包,让我们来看看第二个数据包,SYN-ACK 数据包。

返回 SYN-ACK 数据包

一旦服务器同意加入连接,服务器将返回一个 SYN-ACK 并等待最后的 ACK 来启动连接。

帧 2 中,您将看到字段值。在这种情况下,ACK 号已经改变。帧 2 中的序列和 ACK 号如下:

  • Sequence number: 0 (relative sequence number)
  • Acknowledgment Number: 1

此外,TCP 标志现在设置为 SYN-ACK,如下面的屏幕截图所示:

Figure 10.10 – Viewing the TCP SYN-ACK flags set
)

图 10.10–查看 TCP SYN-ACK 标志集

在交换任何数据之前,握手必须与 ACK 包一起完成,如下所述。

用 ACK 包结束

第 3 帧是三次握手中的最后一个数据包。此时,序列号和 ACK 号如下:

  • Sequence number: 1 (relative sequence number)
  • Acknowledgment Number: 1

要查看详细信息,请转到帧 3 ,然后转到 TCP 报头,然后展开 TCP 标志,这些标志现在设置为 ACK,如下面的屏幕截图所示:

Figure 10.11 – The TCP ACK flag set
)

图 10.11–TCP ACK 标志集

此外,我们还可以在底部的状态栏中看到Transmission Control Protocol (tcp), 32 Bytes,如前面截图中的所示。同样,这是因为该连接具有 TCP 选项,这增加了 TCP 报头的长度。

在许多情况下,TCP 报头选项概述并进一步定义了对话的参数。在下一部分中,我们将大致了解 TCP 选项,然后重点关注Flow312.pcapng中的 TCP 对话选项。

学习 TCP 选项

虽然 TCP 已经是一个令人惊叹的协议,但它也允许将各种选项添加到 TCP 报头中以扩展功能。完整的列表最后一次更新于 2021 年 2 月,可在https://www . iana . org/assignments/TCP-parameters/TCP-parameters . txt上找到。

请记住以下关于 TCP 选项的内容:

  • 并非所有选项都被使用。
  • 有些选择是实验性的。
  • 有些用于特定原因,没有关联的意见征询 ( RFC )。
  • 有些是在没有得到适当的互联网号码分配机构 ( IANA )分配的情况下开发和使用的。

下表列出了七个最常见的选项:

Table 10.1 – TCP options
)

表 10.1–TCP 选项

前三个,EOL、NOP 和 MSS,来自最初的 TCP RFC 793。其他的是随着时间的推移发展起来的。任何选项都将跟随 TCP 报头,并且是 8 位(或 1 字节)的倍数。为了存储器对齐,整个报头必须是 32 位或 4 字节的倍数。因此,在某些情况下,需要填充以确保报头是 4 字节的倍数。为了存储器对齐,整个报头必须是 32 位的倍数(或四个 4 字节)。

要查看Flow312.pcap的 TCP 选项,选择帧 1 中的选项标题,其中列出了附加的对话参数,如下所示:

Figure 10.12 – Flow312 Frame 1 options
)

图 10.12–流程 312 框架 1 选项

为了让您对七个常见选项中的每一个都有更好的理解,让我们从 EOL 选项开始逐一了解一下。

抓住 EOL 选项

EOL 是选项列表末尾使用的单个字节。要查看示例,打开Flow312.pcap数据包捕获,将tcp.option_kind == 0放入显示过滤器,按进入。Wireshark 将显示帧 2 。展开 TCP 报头选项,这将在列表末尾显示EOL:

Figure 10.13 – Flows312 Frame 2 options list
)

图 10.13–流程 312 框架 2 选项列表

另一个 TCP 选项是 NOP,它根本不是一个选项,而是一种占用空间的方式,我们接下来会看到。

使用 NOP

NOP 本质上是一个占位符,用来分隔不同的选项。NOP 的使用方式和取决于操作系统。例如,如前面的截图所示,我们可以看到在Window ScaleTimestamps选项之间放置了两个 nop。

除了使用 NOP 来分隔各种选项之外,NOP 还用于确保 options 报头是 32 位的倍数(或四个 4 字节),以便进行内存对齐。

例如,如果有一个 3 字节的选项,如窗口缩放,将添加一个单个 1 字节的 NOP,使选项的长度总计为 4 字节。

接下来,我们将查看一个选项,它有助于概述可接受的接收段大小,这在许多方面都很重要。

定义 MSS

MSS 是一个定义最大(接收)段大小的选项。这个值很重要,原因有几个。

在端点之间的会话期间,TCP 监控连接以确保发送最佳数据,从而不浪费带宽。查看典型帧时,我们可以看到 TCP MSS 和互联网协议 ( IP ) 最大传输单元 ( MTU )之间的差异,如下图所示:

Figure 10.14 – Comparing the MSS with the MTU
)

图 10.14–比较 MSS 和 MTU

在数据处理过程中,TCP 跟踪以下值:

  • 窗口大小 ( WS ),用于流量控制,以免淹没接收主机。
  • 网络,使用拥塞窗口 ( CWND )进行拥塞取证。当需要的时候,服务器会对数据传输进行节流。
  • MTU 因此主机只发送网络能够处理的数据量,以避免需要对数据报进行分段。

在网络上,发送主机监控这些值,因为它只能发送三个值中最小的*。*

*例如,主机需要发送 1,800 字节的数据。网络限制如下:

  • CWND : 900 bytes
  • MTU : 1,500 bytes
  • WS:1800 字节

根据列出的值,TCP 必须发送最小值,即 CWND : 900 字节。

MSS 并不总是包含在选项标题中。如果不使用此选项,服务器可以发送任意大小的数据段,同时保持符合网络限制。

正如我们所见,MSS 提供了确保最佳数据流的基本信息。现在让我们回顾另一个常见的选项,WS。

缩放 WS

TCP 是一种全双工通信协议,其中发送方和接收方不断地相互通信。流量控制是一种端到端控制方法,其中主机传输一个带有每个 ACK 的 WS,指示它可以接受多少字节,因此发送方不会传输太多数据而使主机不堪重负。

窗口缩放是一个选项,它允许根据从三次握手期间交换的 TCP 选项中获得的缩放因子来扩展 ws。WS 值用于增加允许的最大 WS。尽管这是可选的,但它为服务器提供了更准确的 WS 值的信息。

让我们概括一下为什么这是一个重要的选择。在 TCP 报头中,window字段值是 16 位,这允许 2^16(或 65,535)字节的最大大小。TCP 的原始 RFC 是在 20 世纪 80 年代早期编写的,当时缓冲区很小,所以这个值是有意义的。然而,随着时间的推移,显然需要更大的值,窗口缩放选项提供了一种真正表示该值的方法。

使用窗口缩放选项时,总值可达 2^30.当数据传输时,尤其是在高带宽的广域网链路上,这个值作为一个度量是有益的。较大的 WS 将提高性能。中间设备可以被调整以接受更大的 WS;例如,当配置支持窗口缩放的 Cisco 路由器时,您可以将该值调整到 1,073,741,823 字节。

为了说明这一点,下图显示了一个连接,其中客户端公布了一个 35,000 字节的 ws。服务器开始按照 WS:

Figure 10.15 – Server sending data in line with a smaller WS
)

图 10.15–服务器按照较小的 WS 发送数据

在连接过程中,如果 WS 开始掉线,服务器将需要控制数据,以免淹没客户机。但是,如果客户端使用缩放,现在公布 70,000 字节的 WS,服务器可以发送两倍的数据包,如下图所示:

Figure 10.16 – A larger WS allows the server to send more data
)

图 10.16-较大的 WS 允许服务器发送更多的数据

增加 WS 将利用所有可用的带宽,并提供更有效的数据传输。

网络可能不稳定,数据传输也不总是有序的。这个下一个选项概述了客户端如何有选择地确认收到的数据,因此服务器只需重新传输丢失的字节。

允许麻袋

随着时间的推移,TCP/IP 协议套件也有所改进。其中一个改进就是 SACK。在 SACK 的情况下,如果有丢失的数据包,客户端将只通知服务器T2,目的是保持数据流动。让我们讨论一下这个选项是如何改善数据流的。

TCP 是面向连接的协议。在传输过程中,所有数据都经过排序和确认,以确保该会话所需的所有数据都能完整传输。这是通过以下方式实现的。

服务器向客户端发送数据后,客户端将确认数据已收到,并准备好接受更多数据。这通过发送指示下一个预期字节的 ACK 来传达给服务器。为了确保完整的数据传输,服务器会监控确认。但是,有时传输会有间隙。

例如,服务器收到 ACK 1-100,然后收到 ACK 151-200。在这种情况下,存在 ACK 101-150 的感知间隙,并且服务器认为客户端丢失了字节 101-150。

服务器不知道为什么在传输中会有间隙,并且会重新发送它认为丢失的所有数据。这种差距可能是由以下原因之一造成的:

  • 客户端没有收到数据。
  • 客户端收到了数据,但是服务器没有收到确认。

这可能导致不必要的数据重传。

通过使用 SACK,服务器只需重新发送任何丢失的数据。使用 SACK 时,在三次握手的前两个数据包中发送两个选项,如下所示:

  • SACK-permitted 选项表示可以在建立连接后使用 SACK。
  • SACK 选项允许有选择地确认数据。

TCP SACK 选项使用两个 16 位字段,因此客户端可以指示它已经接收到的字节。

例如,打开的bigFlows.pcap捕获,并使用tcp.stream eq 198滤镜。在tcp.stream 198中,我们看到了一些问题的迹象,例如一个重复确认 ( Dup ACK )以及几个Out-Of-Order数据包,如下面的截图所示:

Figure 10.17 – Stream 198
)

图 10.17–流 198

画面 4006 中,客户端使用了TCP option – SACK 10852-11096,如下图所示:

Figure 10.18 – TCP SACK option evident in bigFlows.pcap
)

图 10.18–big flows . pcap 中明显的 TCP SACK 选项

在 SACK 选项中,我们看到以下值,它们表示传输中的间隙:

  • left edge = 10852 (relative)
  • right edge = 11096 (relative)

通过使用 SACK,服务器只需要发送从序列号1085211096的数据,可以防止不必要的重传,保持数据流动。

另一个 TCP 选项是时间戳,它监视传输并跟踪数据交换期间的往返时间。

使用时间戳

TCP 依赖时间作为流量控制和可靠数据传输功能的一部分。数据通过局域网和广域网传输。每个网络都是不同的,TCP 需要了解每个网络上的延迟程度,以便设置适当的 ACK 超时值。

使用Timestamps选项,TCP 可以监控往返时间。这样,如果发送主机没有及时收到 ACK,它就可以重新传输数据包。

帧 2Flow312.pcap截图中,打开选项查看时间戳选项,如以下截图所示:

Figure 10.19 – Viewing the TCP Timestamps option
)

图 10.19–查看 TCP 时间戳选项

在该选项中,有以下值:

  • 种类 : (1 字节)该字段表示选项的类型,在本例中,值为(8),即时间戳选项。
  • Length : (1 字节)表示该选项头的长度,以字节为单位;在这种情况下,它是10字节。
  • 时间戳值 ( TSval ): (4 字节)这是发送方的时间戳时钟。值为1707407197
  • 时间戳回应回复 ( TSecr ): (4 字节)这是远程主机发送的回应回复。该值在帧 2 中,为131517608

TCP 使用时间戳值来监控路径中各段的往返时间。必须在握手期间设置时间戳选项。之后,您将在对话期间看到报告选项。

正如我们所看到的,TCP 可以在握手过程中设置各种选项,这些选项进一步定义了对话的参数。

使用 Wireshark 时,协议响应或配置的方式可能会有偏好。我们可以修改许多协议首选项,我们将在接下来看到。

了解 TCP 协议偏好

在 Wireshark 中,根据我们的偏好,我们可以修改几个协议来显示数据。要修改协议的显示方式,选择一个标题,右键查看协议首选项,如下图所示:

Figure 10.20 – Viewing TCP protocol preferences
)

图 10.20–查看 TCP 协议首选项

在首选项列表的顶部,有另一个选项,打开传输控制协议首选项…,这将打开 Wireshark 首选项,如以下截图所示:

Figure 10.21 – TCP preferences
)

图 10.21–TCP 首选项

一旦首选项对话框打开,您可以选择和修改一些 TCP 选项。

修改 TCP 首选项

当在 TCP 的首选项对话框中时,您将看到一个概述您的选择的列表,如下所示:

  • 在协议树中显示 TCP 摘要:选中时,该选项将显示该数据包中发生的事件的摘要。
  • 如果可能,验证 TCP 校验和 : TCP 有一个用于错误检测的校验和。在大多数情况下,不选择此选项,因为校验和将卸载到 NIC,值将无效并指示错误。
  • 允许子分配器重组 TCP 流:选中时,允许上层协议重组 TCP 流。
  • 重新组装无序段:选中时,会将段按正确的顺序排列,以有序的形式显示。默认情况下,此选项是禁用的,因为使用它会消耗过多的内存。
  • 分析 TCP 序列号:此选项有助于分析,因为 Wireshark 会监控序列号,帮助识别故障,如 TCP 重新传输、重复 ack 和零窗口。
  • 相对序列号(需要“分析 TCP 序列号”):使用时,该功能有助于使序列号更容易读取和比较。对于每个流中的第一个数据包,相对序列号从零开始,然后从该点开始递增。
  • 当从捕获中不可用时使用的缩放因子:窗口缩放用于增加允许的最大 WS。该选项在第 9 章 、解码 TCP 和 UDP 中有详细介绍。
  • 跟踪飞行中的字节数:要查看飞行中的字节,在Flow312.pcapng中,使用tcp.analysis.bytes_in_flight显示过滤器,这将产生两帧。选择帧 5 ,展开 SEQ/ACK 分析,查看传输中的字节,如下所示:

Figure 10.22 – Calculating TCP bytes in flight
)

图 10.22–正在计算 TCP 字节

  • 计算会话时间戳:该选项将监控时间值,有助于发现 TCP 会话期间的延迟。

  • 首先尝试启发式子解析器:此选项有助于 Wireshark 通过使用端口号来正确解析数据包,从而尝试识别所使用的应用类型。这是根据展示的行为完成的,Wireshark 认为是合适的协议。

  • 忽略 TCP 时间戳摘要 : Wireshark 从操作系统内核获取时间戳。如果您觉得时间戳可能不准确,请使用此选项。

  • 快速重传取代无序解释:在繁忙的网络中,数据包会丢失并出现延迟。使用此选项,您可以修改 Wireshark 在分析过程中优先考虑的方式,并在任何乱序数据包之前对快速重传进行解释。

  • 不要为错误数据包调用子拦截器 : Wireshark 会尽最大努力根据 RFC 正确解析每个协议。在某些情况下,解剖者可能会错误地识别错误。因此,最好选中此选项,这样 Wireshark 就不会继续错误地解析数据包并抛出更多错误。

  • 带有幻数的 TCP 实验选项:在某些情况下,捕获可能包括一个会话,其中 TCP 选项是实验性的,可能用于测试。因为选项是实验性的,而不是标准的,Wireshark 需要使用一个幻数来标识选项,所以可以对其进行适当的剖析。

  • Display process information via IPFIX: Internet Protocol Flow Information Export (IPFIX) is a format used to analyze network traffic. When selected, Wireshark will display the process information that can be used to analyze and troubleshoot IPFIX flows.

    注意

    对于任何更改默认值的选项,请小心使用!您输入的内容可能会被粘住,并且可能不允许您在没有重新安装的情况下撤销该选项。

在分析过程中,Wireshark 会尝试调查协议行为的所有方面。如您所见,可以个性化您的偏好并定制 TCP 的解释方式。

这最后一节提供了 TCP 拆除的概述,它正确地关闭了两个端点之间的连接。

拆除连接

当一个 TCP 连接完成时,TCP 通过交换一系列 FIN 包,关闭端口,并拒绝任何更多的通信请求来断开连接。让我们看一下整个过程。

两台主机通信时,TCP 会话会经历几个阶段:

  • TCP 从(三次)握手开始建立会话。在许多情况下,还有额外的标题选项来进一步定义参数。
  • 在会话期间,TCP 监控通信并确认收到的所有字节,以确保数据的完整传递。
  • 会话结束后,TCP 通过在两个端点之间交换 FIN 数据包来结束会话,这表示会话已完成。

现在让我们看看 Wireshark 是如何表示会话拆除的。

Flows312.pcapng捕获中,数据包6, 7, 8,9代表会话拆除,如下所示:

Figure 10.23 – The four-packet FIN exchange
)

图 10.23–四包 FIN 交换

为了关闭会话,TCP 使用 FIN 标志,如下面的屏幕截图所示,这表示没有数据要发送:

Figure 10.24 – The TCP FIN flag set
)

图 10.24–TCP FIN 标志集

如 RFC 793 中所述,为了完全关闭连接,TCP 从已建立状态前进到FIN-WAIT-1FIN-WAIT-2CLOSE-WAITCLOSINGTIME-WAIT,然后是CLOSED

注意

有些应用(比如 Outlook 和 Exchange)会关闭一个 TCP 连接,用Reset()和 FIN 来尝试,防止端口耗尽。

**TCP 会等到双方说了最后的再见并发送了 FIN 包,然后操作系统会关闭套接字。今后任何交流的尝试都将被拒绝。

总结

建立面向连接的会话的一个重要概念是在交换任何数据之前概述会话的参数。在本章中,我们学习了 TCP 如何通过三次握手开始对话,然后进一步了解了握手的每一步。我们看到了一旦握手完成,操作系统如何创建一个套接字以便进行数据交换。

此外,我们还回顾了在三次握手过程中交换的 TCP 选项,如 SACK、MSS 和时间戳。本章还解释了 TCP 协议首选项,并概述了如何在 Wireshark 中修改 TCP 首选项。最后,我们看了 TCP 是如何通过交换 FIN 数据包来结束会话的,FIN 数据包会向每台主机发出关闭会话的信号。

IP 是 TCP/IP 套件中的另一个主要协议。在下一章中,我们将仔细研究 IPv4 和 IPv6。为了让您更好地理解这种网络层协议,我们将从 IPv4 的全面概述开始,研究报头格式以及每个字段值。然后我们将看看 IPv6 以及相应的报头格式和字段值。此外,由于 IPv4 是与 IPv6 完全不同的格式,我们将通过在双栈环境中使用各种隧道协议来解决两者如何共存的问题。

问题

现在是时候检查你的知识了。选择最佳答案,然后检查您的答案,这些答案可在评估附录中找到:

  1. 要仅过滤您在 Wireshark 中标记的数据包,请在显示过滤器中使用 _____。
    1. marked:all
    2. frame = black
    3. frame.marked==1
    4. marked: on
  2. ____ 用于增加允许的最大 WS。
    1. nototherwiseprovided(for)除非另有规定
    2. 窗口比例
    3. 时间戳
    4. 解雇
  3. 使用 _____ 时,如果有任何丢失的数据包,接收方将通知发送方。
    1. nototherwiseprovided(for)除非另有规定
    2. 窗口比例
    3. 时间戳
    4. 解雇
  4. TCP 通过交换数据包来结束会话,表示每一端都应该关闭各自的套接字。TCP 使用 _____ 标志来表示会话的结束。
    1. 结束
    2. synchronizing 同步
    3. 鳍状物
    4. 紧急的
  5. 如果 TCP 报头中的序列号为 1,下一个序列号为 937,则该数据包包含 _____ 字节的数据。
    1. Thirty-two
    2. Three hundred and eighty
    3. Nine hundred and thirty-six
    4. Thirty-three thousand three hundred and four
  6. 使用 TCP 选项时,_____ 是在选项末尾使用的单个字节。
    1. 寿命终止
    2. 解雇
    3. nototherwiseprovided(for)除非另有规定
    4. 《华盛顿明星报》(Washington Star)
  7. 使用 _____ 选项,TCP 可以监控往返时间。这样,如果发送主机没有及时收到 ACK,它就可以重新传输数据包。
    1. 寿命终止
    2. SACL
    3. nototherwiseprovided(for)除非另有规定
    4. 时间戳

延伸阅读

请参考以下链接了解更多信息:

十一、解析 IPv4 和 IPv6

任何参与网络的人都需要了解互联网协议,这是一种负责在网络上传输数据的网络层协议。在本章中,我们将首先回顾网络层,更具体地说,IP 作为主要网络协议的目的。然后,我们将进一步了解 IPv4 和 IPv6,它们负责两个关键角色:寻址和路由数据。Wireshark 为 IPv4 和 IPv6 提供了出色的支持。为了加强您的分析技能,我们将从两个版本的全面概述开始,并检查每个协议的报头格式。

您将开始理解每个版本中的字段值是如何进行比较和对比的,并能够识别每个字段的重要性。由于寻址是一个重要的概念,我们将研究特殊和私有 IPv4 寻址的使用。此外,我们将概述 IPv6 中使用的不同地址类型。为了让您了解如何自定义 Wireshark 显示 IP 的方式,我们将评估协议首选项。最后,由于 IPv4 的报头格式与 IPv6 完全不同,我们将研究在双栈环境中,两者如何通过使用各种隧道协议共存。

本章将通过涵盖以下内容来解决所有这些问题:

  • 查看网络层
  • 概述 IPv4
  • 探索 IPv6
  • 编辑协议首选项
  • 发现隧道协议

查看网络层

网络层(或第三层)有两个关键角色:寻址和路由数据。这一层使用逻辑 IP 地址提供寻址。此外,网络层确定数据包通过其它网络传输的最佳逻辑路径,以便它们能够到达目的地。它通过在路由过程中与其它设备通信来实现这一点。

如图所示,网络层有三个主要协议,IP、ARP 和 ICMP,它们是传送数据的基本协议:

Figure 11.1 – The OSI model—network layer
)

图 11.1-OSI 模型-网络层

除了 IP 之外,其他协议包括:

  • 地址解析协议 ( ARP ): ARP 将一个 IPv4 地址(网络层)解析为局域网上的媒体访问控制 ( MAC )(数据链路层)地址,这样帧就可以被传送到合适的主机。ARP 显示在第 3 层和第 2 层之间,因此,许多人认为 ARP 是第 3 层协议。
  • 互联网控制消息协议 ( ICMP ):报告传输过程中遇到的问题,如网络不可达或主机不可达。

接下来,我们将讨论 IP 的作用和目的,以及当数据包必须通过网络才能到达最终目的地时,它是如何帮助数据包找到路径的。

理解知识产权的目的

IP 是一种网络层协议,它有两个关键作用:寻址、使用逻辑 IP 地址和路由流量。当传输层传输数据时,网络层与其他设备通信以确定数据包的最佳逻辑路径*。*

*网络层的主要协议之一是 IP,它提供尽力而为的无连接服务,如下所述:

  • Best-effort 表示不保证数据会被传送。这类似于使用一般递送邮寄一封信。虽然有些邮件会丢失,但大多数情况下还是会到达最终目的地。
  • 无连接表示 IP 不保留任何状态信息;那个过程留给了更高层的协议,比如传输控制协议 ( TCP )。

虽然 IP 不能保证传送,但它可以优先化流量,这样时间敏感的数据,如IP 语音 ( VoIP )和流媒体,比电子邮件或网页更优先传送。

由于互联网的不可预测性,优先考虑某些类型的流量将有助于更快地传输数据。优先级以下列方式标记:

  • IPv4 中,通过使用区分服务 ( DiffServ )字段
  • IPv6 中,通过使用的流量类的字段

为了详细检查 IP 报头,我们将使用位于http://tcpreplay . app neta . com/wiki/captures . html # big flows-pcapbigFlows.pcap数据包捕获。下载文件并在 Wireshark 中打开它。

让我们从对 IPv4 的评估开始。

概述 IPv4

1981 年,征求意见稿 ( RFC ) 791 概述了 IPv4 的规范。RFC 概述了 IPv4 有两个主要任务,寻址和分段,如1.4 节所定义。操作,在https://tools.ietf.org/html/rfc791#section-1.4找到。

如上所述,IPv4 最初的作用之一是分段,它将数据包分开。在当时,这是必要的,因为在 20 世纪 80 年代初,大多数网络带宽有限,无法传输大数据包。

随着时间的推移,人们一直在努力升级和替换陈旧的数据路径,互联网的大部分已经被高速光纤电缆所取代。因此,在今天的网络中,很少使用分段。

注意

最大传输单位 ( MTU )小于 1500 字节时,使用分片。

随着时间的推移,我们可以看到,为了将数据发送到最终目的地,IPv4 仍然在寻址方面发挥着重要作用,路由也是如此。

IPv4 于 1983 年标准化,使用 32 位地址空间。科学家们在早期就发现了对更大地址空间的需求。IPv6 拥有 128 位地址空间,并提供了对协议的增强,例如简化的网络配置和更高效的路由。向 IPv6 的迁移很慢,主要是因为在 T4 的局域网上使用私有 IP 地址延长了 IPv4 的寿命。

因此,IPv4 仍然被广泛使用。为了让您在处理 IPv4 时具备应对日常网络相关问题所需的技能,在下一节中,我们将研究 IPv4 报头和每个字段值。一旦您理解了字段值,您在查看数据包捕获时就会更有信心,这样您就能够快速深入问题。

解析 IPv4 报头

IPv4 报头有几个字段,如下图所示:

 Figure 11.2 – IPv4 header
)

图 11.2–IP v4 报头

有些字段很少使用,比如那些处理碎片的字段。其他的提供有助于故障排除的信息,例如解决网络冲突时的地址字段。

要检查 IPv4 报头,打开bigFlows.pcap,转到帧 1 ,如下所示:

Figure 11.3 – bigFlows Frame 1—IPv4 header
)

图 11.3-大流量帧 1-IP v4 报头

下一节将列出每个字段,使用多少位或字节,以及每个字段所代表的信息。我们将从版本和长度字段开始。

发现版本和长度

IPv4 报头中的前两个字段如下:

  • 版本(4 位):该字段值表示正在使用的 IP 版本。许多设备同时支持 IPv4 和 IPv6 因此,获取版本很重要,这样设备就知道如何处理流量。在帧 1 中,我们看到Version: 4,这意味着这是一个 IPv4 报头。
  • 报头长度(4 位):报头长度是 4 字节的倍数,等于基本报头和任何选项。尽管长度可以变化(因选项而异),但最小必须是 5,等于 20 字节的报头长度。在帧 1 中,数值显示为Header Length: 20 bytes (5)

在这两个字段之后,我们看到一个名为DiffServ的字段,它将在下一节中介绍。

分解服务类型

互联网是不可预测的,这可能会影响时间敏感的数据,如 VoIP 和流媒体。因此,IPv4 具有DiffServ字段来对时间敏感的流量进行优先级排序,从而使其比电子邮件或网页的优先级更高。

DiffServ字段为 8 位,分为两个功能:服务质量 ( QoS )和显式拥塞通知 ( ECN )。

在第一帧的中,我们可以看到Differentiated Services Field: 0X00 (DSCP: CSO, ECN: Not-ECT)

如上所述,DiffServ字段有两个功能。让我们看看这代表了什么。我们将从DiffServ字段的前 6 位开始,它用于表示通过网络时请求的 QoS。

确保服务质量

QoS 提供了选项来区分流量的优先级。大多数(但不是全部)设备支持 QoS。当请求优先级时,字段值将通过使用几个不同的类选择器 ( CS )值之一来指示这一点。

例如,CS6CS7用于包括以下内容的网络控制协议:

  • 增强型内部网关路由协议 ( EIGRP )
  • 先开最短路径 ( OSPF )
  • 热备路由协议 ( HSRP )
  • 互联网密钥交换 ( 艾克)
  • 边界网关协议 ( BGP )

这些网络协议的优先级更高,因为任何延迟都会影响网络性能。

其他值如下表所示:

Table 11.1 – Differentiated services field values
)

表 11.1–差异化服务字段值

第一列显示了区分服务码点 ( DSCP ),其中列出了 CS。如帧 1 所示,在图 11.3 中,该字段值汇总显示DSCP: CS0(或类选择器 0)。CS0 是默认或最大努力设置,因为没有为该数据包分配优先级。使用此设置的流量可以正常传送。

要查看高于尽力而为的 CS 的示例,请转到bigFlows.pcap并进入ip.dsfield.dscp > 0显示过滤器。选择第 4 帧,这里会列出 CS 值,如下图所示:

 Figure 11.4 – CS1
)

图 11.4–CS1

Class Selector 1 (8)用于清道夫应用,如 YouTube、游戏应用和 P2P,因为这种流量在互联网上传输时会受益于(稍微)更高的优先级。

注意

CS1 被列为清道夫应用。这个类意味着应用将在任何可用的时候获取带宽

DiffServ字段的最后 2 位用于标识 ECN,这有助于管理网络上的拥塞。让我们看看这是如何工作的。

发送 ECN

你可能还没有意识到 ECN 及其重要性;但是,这可能会影响设备在网络上传递拥塞信息的方式。让我们来看看这 2 位如何改善数据流。

在最初的 RFC 791 中,DiffServ字段的最后 2 位是Reserved for Future Use,如下图所示:

 Figure 11.5 – Service bit assignments
)

图 11.5–服务位分配

在 2001 年,RFC 3168 发现了最后 2 位的用途。RFC 3168 概述了 ECN,它在网络上提供拥塞通知,是对管理网络拥塞的传统方法的改进。

通常,当 TCP 遇到拥塞时,主机通过进入拥塞控制来响应丢弃的数据包,这会导致以下结果:

  • 客户端发送重复的确认,表示有丢失的数据包。
  • 服务器使用快速重传,重新发送丢失的数据包。

ECN 是对这种行为的改进,它提供了网络拥塞的通知。这最终防止了当存在重复确认和快速重传时出现的额外流量。

ECN 使用 TCP 和 IP 报头,如下所述:

  • IP 头使用DiffServ字段末尾的 2 位来表示 ECN 能力传输 ( ECT )和经历拥塞 ( CE )。
  • TCP 头使用两个标志:拥塞窗口缩小 ( CWR )和 ECN Echo ( ECE )。

使用 ECN 时,DiffServ字段的 2 位标识代码点。在下表中,您将看到这些位、组合所指示的内容,以及在 Wireshark 中显示DiffServ字段值时作为指示器可能看到的内容:

Table 11.2 – Identifiers in the DiffServ field
)

表 11.2-DiffServ 字段中的标识符

可以看到,代码点与1001的值基本相同。

在**帧 1 下的bigFlows.pcap,**中,如果我们展开 IPv4 报头,我们会看到Explicit Congestion Notification: Not ECN-Capable Transport (0),这意味着该连接不支持 ECN,如下所示:

Figure 11.6 – Not ECT-Capable
)

图 11.6–不支持 ECT

连接中涉及的设备将相互通信,并在可用时使用 ECN,这有助于通知端点网络拥塞问题。

虽然 IP 是一种无连接协议,但它提供了提高流量优先级的方法,以及通知设备网络拥塞问题的方法。

在 IPv4 报头的下一组字段值中,我们将评估处理使用分段的字段。

分割数据

在 RFC 791 中,IP 负责寻址和分段。我们将在后面的部分讨论寻址,但是现在,让我们概述一下什么是分段以及为什么它是必要的。

在网络上,监控各种值:

  • 最大段尺寸 ( MSS )就是数据有效载荷。
  • 最大传输单元 ( MTU )是 MSS 加上传输层头。

当数据在网络上路由时,它可能会遇到一个 MTU 小于数据包大小的数据段。如果允许,可以使用碎片化;这将数据报分成更小的片段,以便它们可以在具有限制性 MTU 的网络上发送。

以下三个字段与碎片相关:标识标志碎片偏移,如下所述:

  • 标识(16 位):该标识 ( ID )字段用于在数据分片时标识数据报。在这种情况下,所有片段将具有相同的 ID。
  • Flags :在一个 IP 头中,有三个标志,如下面的截图所示:

Figure 11.7 – IP flags
)

图 11.7–IP 标志

  • 片段偏移量(13 位):在 IP 报头中的三个标志之后,该字段提供使用分片时如何重组片段的信息。

在大多数情况下,IP 报头标志将在Don't Fragment设置。这是因为在今天的网络中,没有使用分段,因为大多数管道都有足够的带宽和可接受的 MTU。

虽然在当今的网络中,我们很少看到碎片,但是熟悉一些场景中处理碎片的字段和标志是一个好主意:

  • 故障排除期间,您可能需要查看字段,以确定数据无法通过的原因。
  • 安全评估期间,碎片字段的使用可能表示恶意活动。

网络设备监控数据报长度,并可能施加大小限制。在这种情况下,如果数据包太大,可能需要将其分段或重新路由才能传递。

总长度 IPv4 字段在评估大小限制时提供了一个度量,因为它指示报头长度和任何数据的值。该字段值为 16 位,这意味着整个长度不能超过 216,即 65,535 字节。

互联网控制消息协议 ( ICMP )充当 IP 的侦察兵。当 ICMP 遇到一个 MTU 比数据包的大小小的网络,并且设置了位时,路由器将丢弃该数据包。ICMP 然后会通过发送一个Type 3 Code 4 ICMP 消息:Destination Unreachable: Fragmentation Needed and Don't Fragment was Set来通知源。

如果数据包被丢弃在带宽受限、不允许分段的网段上,发送主机必须使用较小的 MSS 重新传输数据。

接下来的几个字段更具管理性。它们保存与跳数、遵循 IPv4 报头的协议以及用于错误检测的校验和相关的值。

查看 TTL、协议和校验和

查看 IPv4 报头时,有几个字段与数据包的路由或寻址没有直接关系,但其作用可能会影响其他类型的行为。我们的第一个例子是生存时间 ( TTL )字段,它的存在是因为互联网之父很早就意识到必须有一种方法来阻止数据包继续在网络中传输。如果配置错误和/或数据包处于路由环路中,就会发生这种情况。

注意

TTL 字段是 8 位,因此最大值是 28,即 255 跳。

在正常的网络运行期间,这种情况很可能不会发生。然而,如果存在路由环路,IP 报头中的TTL字段值是在丢弃分组之前分组可以经过的路由器或跳数。TTL 的工作方式如下:

  • 每当数据包到达路由器时,该数字就减 1。
  • 当 TTL 值达到 0 时,数据包被丢弃,ICMP Type 11 (TTL 在传输中过期)被发送到发送方。

要查看 TTL 值的示例,打开bigFlows.pcap,并转到帧 1 ,其中TTL字段被设置为Time to live: 64,这是该字段的默认值。

提供与管理流量和通知设备相关的信息的另外两个字段如下:

  • 协议(8 位):protocol字段标识跟随 IPv4 报头的高层协议。该字段标识数据报中携带的协议(通常是传输层协议)。在帧 1 中,我们看到值为Protocol: UDP (17)

  • Header checksum (16-bit): This field is used to house the checksum value. Similar to the checksum in the TCP header, this value is used for error detection. In Frame 1, we see the checksum and notification from Wireshark that the checksum validation is disabled.

    报头校验和:0x ee5e[验证禁用]

    [标题校验和状态:未验证]

在大多数情况下,最好禁用验证,因为校验和卸载到网络接口卡 ( NIC )会导致值不正确。

在处理 IPv4 时,在处理寻址时还有一些额外的考虑,例如特殊和私有 IP 地址,我们将在下一节中讨论。

了解 IPv4 寻址

在本节中,我们将检查 IPv4 报头中的最后两个字段。此外,我们将回顾 IPv4 中的不同类别,以及特殊和私有 IP 地址的概述。

IP 报头中最重要的元素之一是寻址。在最后两个字段中,我们看到了目的地址 (32 位)。每个字段包含源或目的 IPv4 地址,以易于理解的点分十进制格式表示。在帧 1 中,我们看到以下值:

Source Address: 172.16.133.57
Destination Address: 68.64.21.62

IPv4 将整个地址块分成多个类。在每个类别中,都有特殊的私有 IP 地址。让我们来看看那些概念。

比较 IPv4 类别和地址

当编写 IPv4 的 RFC 时,开发人员有一个将 IP 细分为五类或五种地址格式的概念。IPv4 地址分为 A-E 类,如下所示:

Table 11.3 – Classes of IPv4 addresses
)

表 11.3–IP v4 地址的类别

如上所述,A 类、B 类和 C 类主要分配给公司。D 类仅用于组播,E 类用于实验,不使用。

除了有五类寻址之外,IPv4 还有几个特殊和私有 IPv4 地址范围,如下所述。

检查特殊和私有 IP 地址

IPv4 的局限性之一是地址空间有限。为了扩大 IPv4 的使用范围,起草了一组 A、B 和 C 类专用 IP 地址,仅用于内部网络。还有一个很大的环回范围和一个广播 IP 地址。

下面的表显示了主要专用和私有 IPv4 地址的列表:

Table 11.4 – Special and private IPv4 addresses
)

表 11.4-特殊和私有 IPv4 地址

此外,自动私有 IP 寻址 ( APIPA )还有一个范围,当动态主机配置协议 ( DHCP )服务器没有 IP 地址时,它会给主机一个 IP 地址。

虽然这种情况很少见,但是可以使用 IPv4 选项,如下一节所述。

修改 IPv4 的选项

对于 IPv4,可能有必要使用提供源路由信息、时间戳和其他信息的选项。几个 IP 选项已被否决,不再使用。有关正式否决选项的更完整讨论,请参考 RFC 6814。

使用时,options字段必须是 32 位或 4 字节的倍数。可能需要填充,以便报头是 32 位的倍数。

既然我们已经回顾了 IPv4,那么让我们更深入地了解一下 IPv6。

探索 IPv6

早期,科学家们意识到 IPv4 的 32 位地址空间将会耗尽。虽然没有人有一个确切的日期,但是已经制定了用改进版本 IPv6 取代 IPv4 的计划。1998 年,IPv6 的 RFC 发布,可以在 https://www.ietf.org/rfc/rfc2460.txt 找到。

IPv6 有许多增强,包括以下内容。

  • 流线型表头:表头字段较少;但是,它更大,主要是由于扩展的地址空间。
  • 流标签:在 IPv6 中,有一个流标签。该字段值可用于标识需要特殊处理的流,例如实时流量。
  • 对扩展和选项的支持:虽然 IPv4 可以添加选项,但 IPv6 更容易做到。IPv6 提供了添加选项的能力,例如分段,它具有将数据分段的参数,以及逐跳,它确保路径中的所有设备都读取该选项。

IPv6 报头可以容纳更大的地址空间。但是,如下图所示,标题是简化的,因为没有太多的字段值:

 Figure 11.8 – IPv6 header
)

图 11.8–IPv6 报头

要跟踪并检查 IPv6 报头,打开bigFlows.pcap,并转到帧 347 。IPv6 报头如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 11.9-大流量帧 347-IPv6 报头

请注意,IPv6 地址要大得多,因为它们是 128 位的,而 IPv4 地址是 32 位的。与 IPv4 中使用的点分十进制表示法相反,地址使用十六进制表示法。

在下一节中,我们将回顾 IPv6 中的每个字段,每个字段包含的比特或字节数,以及每个字段所代表的信息。

导航 IPv6 报头字段

正如我们将看到的,IPv6 报头删除了不必要的字段值,只添加了传输数据所需的内容。让我们逐步了解字段值并了解它们的重要性。我们将从版本开始,一个字段用于存放流量类,一个标签用于保存特定流的值。

识别版本、流量类别和流标签

IPv6 报头中的前三个字段如下:

  • 版本(4 位):该字段表示正在使用的 IP 版本。在第 347 帧,我们看到Version 6
  • 流量等级(8 位):当在互联网上发送数据时,有些流量需要特殊处理和优先排序。与 IPv4 类似,该字段包含两个值:
    • TOS :该字段的前 6 位用于传达所请求的服务类型。TOS 使用与 IPv4 相同的 DSCP 值。帧 347 使用Differentiated Services Codepoint: Default (0)默认值。
    • ECN :该字段的最后 2 位用于指示网络上的拥塞,方式与 IPv4 相同。在帧 347 中,该值为Explicit Congestion Notification: Not ECN-Capable Transport (0)
  • 流标签(20 位):该字段可用于标识特定的信息流,以便提供排序或请求路径中的路由器进行特殊处理。在第 347 帧中,我们可以看到Flow Label: 0x00000。在 RFC 2460,附录 A:流标签字段的语义和用法中,有关于流标签的扩展讨论。

随着时间的推移,我们看到流标签的使用越来越多。让我们讨论如何使用它,并检查一个填充的流标签。

管理流程

该标签可用于区分流量的优先级,如实时数据(语音和视频),但也可用于其他用途。当使用时,一个随机分配的数字被附加到流标签上,然后所有流量将属于同一个流或流。

要查看正在使用的流标签的示例,请在您的网络上运行捕获,并收集大约 1,000 个数据包。应用(!(ipv6.flow == 0x00000)) && (ipv6)过滤器,它将只显示带有填充流标签的 IPv6 数据包。

另外,你可以去https://wiki . wireshark . org/sample captures # IPv6-and-tunneling-mechanism。选择sr-header.pcap文件并在 Wireshark 中打开它。

在这次捕获中,有 10 个数据包。使用ipv6.flow == 0xd684a过滤器,它将显示属于同一个流的六个数据包。

注意

流标签是一个 20 位的字段。在 Wireshark 中,您将首先看到位值,然后是十六进制值(通过在值前使用0x来标识)。例如,如果填充了该字段,您将在 Wireshark 中看到以下值:.... 1101 0110 1000 0100 1010 = Flow Label: 0xd684a

接下来的三个字段处理在 IPv4 报头中发现的类似值,但是有细微的差别,如下所示。

评估长度、下一个报头和跳数限制

在 IPv6 报头中,接下来的三个字段提供了有关有效载荷长度、IP 报头之后的协议以及数据包在离开之前可以经过多少跳的信息。这些字段如下所示:

  • 有效载荷长度(16 位):有效载荷长度表示数据包的有效载荷,包括高层报头、数据和任何扩展报头。与 IPv4 类似,整个长度不能超过 216,即 65,535 字节。在某些情况下,有效负载可能会超过 65,535 字节,这在使用扩展标头时可能会发生。如果该值大于 65,535 字节,则字段值设置为零(0)。
  • 下一个报头(8 位):该字段标识 IP 报头之后的高层协议。这类似于 IPv4 中的protocol字段,使用相同的值来标识更高层协议。然而,如果存在扩展报头,则该字段将指示 IPv6 报头之后是什么扩展报头。
  • 跳数限制(8 位):在 IPv4 中,IP 报头中的TTL字段值是一个分组在丢弃该分组之前可以经过的路由器或跳数。在 IPv6 中,这是相同的概念。然而,这一领域更多地反映了它今天所做的事情。该字段使用 8 位,可以保存不大于 255 的值。如果跳数限制达到 0,数据包将被丢弃。

帧 347 中,字段值是Hop Limit: 1,这是有意义的,因为该帧是来自试图获得 IP 地址的主机的 DHCPv6 多播。

与 IPv4 一样,IPv6 报头中的最后两个字段是地址字段,如下所述。

检查 IPv6 地址和地址类型

IPv6 有特定的寻址要求。在本节中,我们将检查最后两个字段,源地址目的地址(128 位),以及 IPv6 地址类型的概述。源地址和目的地址是 128 位字段,以容纳 IPv6 地址。Wireshark 以冒号分隔的十六进制数显示地址,这与 IPv4 中使用的点分十进制表示法相反。

在 IPv6 中,有各种不同的地址类型,而不是类别。现在让我们来看看你可能遇到的不同类型。

比较 IPv6 地址类型

IPv6 不像 IPv4 那样使用广播。但是,有几种类型的地址,如下所示:

  • 全球单播就像一个公共 IPv4 地址。该地址是全球公认的,可以在互联网上路由。
  • 本地链路用于与同一子网中的主机通信。这个地址总是以 FE80 开头。
  • 单播是网络上的单个主机。
  • 组播数据包使用一个组播地址发送到网络上的所有节点。
  • Anycast 用于向具有相同 IP 地址的多个位置发送数据。数据包被传送到最近的目的地。

帧 347 中,我们看到源地址和目的地址:

Source: fe80::9186:dbbd:2a45:50c2
Destination: ff02::1:2

如果可能,Wireshark 将使用适当的快捷方式,如目的地址所示。IPv6 快捷方式删除前导零,并折叠两个或更多包含连续零的块。

对于许多协议(但不是全部),Wireshark 提供了一种修改 Wireshark 显示数据方式的方法。以下内容让我们了解了如何调整 IPv4 和 IPv6 的首选项。

编辑协议首选项

在 Wireshark 中,您可以通过执行以下任一操作来修改大多数协议:

  • 在 IP 头上单击鼠标右键,选择协议首选项,您会看到一个首选项列表
  • 进入编辑 | 首选项 | 协议,然后选择合适的协议

让我们从 IPv4 的协议首选项开始,因为这是目前局域网上最常用的协议。

查看 IPv4 首选项

要修改 IPv4 首选项,您可以使用前面列出的方法之一,或者您可以在标题上单击鼠标右键并选择协议首选项,然后选择**开放互联网协议版本 4 首选项…**快捷方式,如图所示:

 Figure 11.10 – IPv4 preference shortcut
)

图 11.10–IP v4 首选项快捷方式

选择快捷方式后,将会列出一个首选项列表,如下图所示:

Figure 11.11 – IPv4 preferences
)

图 11.11–IP v4 首选项

在那里,您可以按如下方式修改选择:

  • 将 IPv4 TOS 字段解码为 DiffServ 字段 : RFC 791 使用 TOS 对流量进行分类。随着时间的推移,该字段被修改为使用DiffServ来识别流量,这允许更大范围的分类。在大多数情况下,这应该是启用的。
  • 重组分片的 IPv4 数据报:必要时,可能会对 IPv4 数据包进行分片。启用后,这将重新组装碎片 IP 数据报。
  • 在协议树中显示 IPv4 摘要:启用时,该选项将摘要报头内容。对于大型捕获,启用此功能可能会影响性能。
  • 如果可能,验证 IPv4 校验和:在大多数情况下,这是不启用的。
  • 支持从支持 IP TSO 的硬件捕获数据包 : TCP 分段卸载 ( TSO )是一种在虚拟化环境中使用的性能提升技术。使用时,数据包长度可能不准确。启用此选项将尝试纠正任何错误。
  • 启用 IPv4 地理定位 : Wireshark 使用 IP 地址通过[GeoIP]数据库识别数据包来源。选择是否要使用此选项。
  • 将保留标志解释为安全标志(RFC 3514):2003 年 4 月 1 日(愚人节),Steven M. Bellovin 写了一个 RFC,认为 IP 报头中的保留位应该被恶意参与者用来标记数据包,如果它包含恶意软件,那么 IDS 和防火墙将知道它包含恶意软件。如果使用的话,这个钻头被称为邪恶钻头
  • 首先尝试启发式子解析器:此选项有助于 Wireshark 通过使用端口号来正确解析数据包,从而尝试识别所使用的应用类型。
  • IPv4 UDP 端口:0…:如果您希望在 LAN 上使用时将协议行为更改为特定端口,请使用此选项。
  • 禁用 IPv4 :如果您想禁用 IPv4 并只关注帧头,请使用此选项(如图 11.10 所示)。请记住,如果选择了此选项,IPv4 和任何更高级别的协议(第 3-7 层)将不会被解析。

如您所见,有许多方法可以定制 IPv4 的首选项。接下来,我们来看看 IPv6 的选项。

调整 IPv6 的首选项

您可以通过进入编辑 | 首选项然后选择**开放互联网协议版本 6 首选项来修改 IPv6 中的首选项…**快捷方式。这将打开一个对话框,如下所示:

Figure 11.12 – IPv6 preferences
)

图 11.12–IPv6 首选项

在那里,您可以修改任何选项,如下所述:

  • 重组分片的 IPv6 数据报:启用后,将重组分片的 IPv6 数据报。

  • 在协议树中显示 IPv6 摘要:启用时,该选项汇总报头内容。

  • 启用 IPv6 地理定位 : Wireshark 使用 IP 地址通过[GeoIP]数据库识别数据包来源。选择是否要使用此选项。

  • 对 RPL 源路由头(RFC 6554) 执行严格检查:如果启用,这将有助于使用路由协议对低功率和有损耗网络(【RPL】)的流进行故障排除。

  • 首先尝试启发式子解析器 : Wireshark 将通过使用端口号来正确解析数据包,尝试识别使用的是什么类型的应用。

  • 在根协议树下显示 IPv6 扩展头 : IPv6 有几个扩展头,比如路由头和分片头。启用此选项将在根协议树下显示标题。

  • Use a single field for IPv6 extension header length: Enabling this will display a single field for the IPv6 extension header length (if any). If this is not enabled, the field will appear on two lines as follows:

    长度:0 (8 字节)

    [长度:8 字节]

  • 支持从支持 IPv6 TSO 的硬件捕获数据包 : TSO 是一种在虚拟化环境中使用的性能提升技术。使用时,数据包长度可能不准确。启用此选项将尝试纠正任何错误。

  • IPv6 UDP 端口:0… :如果要更改协议行为,请使用此选项。

从 IPv4 到 IPv6 的迁移一直不温不火,因为许多网络管理员继续在局域网上使用 IPv4,主要是因为使用私有 IP 地址的灵活性。以下部分概述了这两种协议如何使用各种隧道协议在同一网络中共存。

发现隧道协议

一些组织已经决定转向专用的 IPv6 网络环境。但是,许多公司运行的是双栈环境,在这种环境下,同时使用 IPv4 和 IPv6 的主机必须能够相互通信。

显然,IPv4 报头与 IPv6 报头完全不同。为了让流量从 IPv4 网络通过 IPv6 网络,反之亦然,流量必须使用隧道协议。RFC 7059 概述了通过 IPv4 网络传输 IPv6 数据包的各种方式,可在 https://tools.ietf.org/html/rfc7059 的找到。下图显示了在 IPv4 数据包中封装 IPv6 数据包的正确格式:

Figure 11.13 – Encapsulation of an IPv6 packet within an IPv4 packet
)

图 11.13–在 IPv4 数据包中封装 IPv6 数据包

支持 IPv6 数据包在 IPv4 网络上传输的一些隧道协议包括:

  • 站内自动隧道寻址协议 ( ISATAP ):通过 IPv4 网络向使用 IPv6 的主机发送数据,以及从使用 IPv6 的主机接收数据
  • 通用路由封装 ( GRE ):在 IPV4 网络内创建点对点 IPv6 连接
  • Teredo :在 Windows 操作系统中生成,当网络地址转换 ( NAT )就绪时,允许 IPv4 主机连接到 IPv6 网络。

隧道协议之一 Teredo 用 IPv4 报头包装(或封装)IPv6 数据包,以便数据包可以通过使用 NAT 的 IPv4 环境传输。要看特雷多隧道的例子,请去 https://www.cloudshark.org/captures/c0b7d1a1d1ec?filter = frame % 20 and % 20 eth % 20 and % 20ip % 20 and % 20 UDP % 20 and % 20 teredo,并在 Wireshark 中打开。转到第 29 帧,我们看到 IPv6 数据包封装在 IPv4 报头中,使用 UDP 作为传输协议,如下所示:

Figure 11.14 – IPv6 packet encapsulated in an IPv4 header
)

图 11.14–封装在 IPv4 报头中的 IPv6 数据包

虽然有几种隧道协议,但它们本质上都做同样的事情:用一个报头封装另一个报头,这样数据就可以在网络中传输。因此,创建隧道以及添加额外的报头会带来额外的开销。

由于我们复杂的网络环境,在排除网络故障时,您很可能会遇到隧道协议。

总结

在这一章中,我们首先讲述了知识产权的简史。我们了解了两个版本的 IP 如何完成路由和寻址的工作;但是,IPv4 和 IPv6 报头之间存在一些差异。我们检查并解释了 IPv4 和 IPv6 的每个字段值。此外,为了让您更好地理解这两种协议,我们比较了 IPv4 和 IPv6 之间的一些相似之处和不同之处。

为了帮助您巩固寻址知识,我们简要介绍了 IPv4 地址的类别,并回顾了不同类型的 IPv6 地址。然后,我们看了如何通过修改协议首选项来个性化 IPv4 和 IPv6 的设置。最后,由于需要两种 IP 版本在今天的网络上共存,我们比较了目前使用的不同类型的隧道协议。

在下一章,我们将学习 ICMP,IP 的伴生协议,它工作在 OSI 模型的网络层。我们将评估用于 IPv4 的 ICMP 和用于 IPv6 的 ICMPv6。然后我们将深入研究 ICMP 在这两个版本中是如何工作的,您将对这两种类型的消息有更好的理解:错误报告和查询。在本章的最后,您将看到 ICMP 如何成为 IP 的侦察兵,以及它的使用如何在传递数据中至关重要。

问题

现在是时候检查你的知识了。选择最佳答案,然后检查您的答案,这些答案可在评估附录中找到:

  1. DiffServ字段中的类别选择器 6 与 _____ 一起使用。
    1. 发信号
    2. 广播视频
    3. 网络控制
    4. 实时
  2. 172.18.23.119 IP 地址是:
    1. C 类 IPv4 地址
    2. B 类私有 IPv4 地址
    3. E 类 IPv4 地址
    4. D 类私有 IPv6 地址
  3. IPv6 地址有 _____ 位。
    1. Thirty-two
    2. Forty-eight
    3. Sixty-four
    4. One hundred and twenty-eight
  4. 在 IPv4 中,我们使用生存时间值来表示它在网络中传输时可以经过的跳数。在 IPv6 中,该字段值称为 _____。
    1. 路由器通行证
    2. 班级停课
    3. 晶体管-晶体管逻辑。
    4. 跳跃总数
  5. IPv4 标头有 _____ 个标志。
    1. one
    2. Two
    3. three
    4. four
  6. 下图显示了 IPv6 报头。流量标签的价值是什么?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 11.15–IPv6 报头

  1. 0X00

  2. fc00

  3. 0xfbb74

  4. 136

  5. 在 IPv4 或 IPv6 报头中,有效负载长度不能超过 _____ 字节。

    1. Sixty-five thousand five hundred and thirty-five
    2. One thousand one hundred and eleven
    3. Two hundred and fifty-six
    4. One hundred and twenty-eight

延伸阅读

请参考以下链接了解更多信息:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值