netflow 如何定义 udp 会话的结束。也就是说,据我所知,随着时间的推移,动态端口没有请求时必须有一定超时,之后才会形成此端口的新会话。如果是,它是如何实现的,如果超时,持续时间是多长
答案1
这是一个可以写很多内容的领域,但这里简要列出几点:
1.) 任何 Netflow 实现中都有一系列计时器,当超过这些计时器时,就会导致流记录被导出并从缓存中刷新。
2.) 其中一个计时器是最大计时器。这里的想法是,即使是正在进行的流也会导致生成记录。长寿命流实际上可能会生成数十(或数百)个连续记录。一个很好的例子是,在最大计时器为 5 分钟的实现中,TCP 流持续 60 分钟。该流实际上可能由 12(+/-)条记录表示。换句话说,即使没有 FIN(或根本没有结束会话),也会生成记录。
3.) 另一个计时器是非活动/空闲计时器。在这种情况下,如果在指定时间内未看到给定流的流量X秒后,缓存条目将超时,记录将被导出。这就是 Netflow 如何识别任何非 TCP 流的结束(提示:并非所有实现都能正确处理 TCP FIN 作为关闭方法)。这里有一个关键点需要考虑:如果这个计时器很长,那么您可能无法非常准确地了解给定流程的实际结束时间。
4.) 更有趣的是,如果有足够的流量超出 Netflow 收集器上的缓存,那么许多实现实际上会提前淘汰流量以腾出空间。理想情况下,选择空闲时间较长的流量,但如果缓存耗尽的情况变得足够严重,我们实际上可能会达到退化状态,即每个数据包都会生成一个新流量。顺便说一句,这就是为什么在大多数现代 DC 交换机中,完整(即未采样)Netflow 几乎已成为过去,因为流量缓存的绝对大小变得完全无法维持。
因此,一如既往,魔鬼藏在细节中。Netflow 实现在缓存大小和采样率、这些计时器(以及其他一些计时器)可以设置多低(或多高)、它们是否正确跟踪 TCP 标志等方面各不相同。在 IPFIX/v9 中计算时,它会变得更加复杂,因为本地可编程聚合在流收集中增加了另一个中介级别,等等。