英特尔 AMT(主动管理技术)如何不干扰 TCP/IP 主机堆栈?

mpo*_*llo 17 networking tcp amt

我一直在使用的英特尔开发工具包包括一个远程管理功能 (另请参阅此处Ubuntu 手册页),它允许在操作系统挂起时进行远程重启。

它能够在与操作系统共享的 IP 地址上侦听少数端口(具体来说是 16992 和 16993)。(通过侦听 DHCP 请求或发出自己的请求;我不确定,但无论哪种方式,它都在此模式下使用共享 MAC 地址)

我让它在一个单独的 IP 地址上运行,因为我担心一个潜在的用例:AMT 如何防止主机网络堆栈与其发生冲突?

换句话说,英特尔管理软件现在正在侦听 [至少] 两个 TCP 端口,带外且操作系统不知道。假设我发起了到远程主机的 TCP 连接,并且主机堆栈选择 16992 或 16993 作为本地端口来侦听 [返回到盒子的数据包]。

从远程主机返回的数据包不会被“黑洞”而永远不会到达操作系统吗?或者是否有一些预防措施,例如 Linux 内核中的 Intel 驱动程序知道 TCP 应该避免端口 16992?(似乎不太可能,因为这是一个与操作系统无关的功能。)或者管理接口可以将发送到端口 16992 的不属于已知管理会话的流量转发回主机堆栈?

无论哪种方式,在我了解其工作原理之前,我都不愿意将其用于网络密集型负载。我搜索了英特尔文档,也找不到任何内容。

我想这可以通过启动大约 30,000 个 TCP 连接并检查连接是否有效来测试,即使端口重叠。但我还没有机会这样做。

(脚注:我意识到这个问题类似于基于 Intel vPro 的计算机如何保持 IP 连接?但该问题涉及一般连接,而不是与与主机堆栈重叠的特定 TCP 端口的连接。)

mpo*_*llo 9

将 AMT 配置为侦听共享 IP 地址后,我运行了上面评论中kasperd提到的测试。(针对我自己的带有 SSH 服务器的远程主机example.com,当然实际上不是)结果如下:

正面测试用例(使用AMT使用的端口):

$ nc -p 16991 example.com 22
SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.4
^C
$
Run Code Online (Sandbox Code Playgroud)

否定测试用例(使用 AMT 使用的端口):

$ nc -p 16992 example.com 22
$
Run Code Online (Sandbox Code Playgroud)

(几分钟后,否定测试用例超时并返回到 shell 提示符。)

如您所见,返回端口 16992 的数据包在到达主机的 TCP/IP 堆栈之前就被丢弃了。

建议:如果可靠的网络对您很重要,请不要在与主机 TCP/IP 堆栈相同的 IP 地址上启用 AMT!