当我启动程序时“dhcptest.exe”(在 Win7 上),我收到防火墙警告。阻止会创建两个新的入站规则,阻止 TCP 和 UDP。(没有出站规则)。当我运行测试时,它会发送 DHCP 请求(不足为奇),并收到 DHCP 响应(WTF?)。DHCP 响应清楚地传达给可执行文件,可执行文件会报告此情况。
当然,有一个 DHCP 入站规则允许 DHCP 客户端接收 DHCP 回复,但是客户端不接受新的 DHCP 提供 - 而且无论如何都没关系,当我禁用该规则时,dhcptest.exe 程序仍会报告 DHCP 提供。
怎么做到的?为什么?DHCP 提供的是无连接广播协议,因此它不应该通过传出请求所创建的连接进入。
我错过了什么?
答案1
该程序首先开始监听端口 68。这会触发防火墙消息。Windows 显示的消息仅与“服务器”有关。传出连接不受影响。
然后,当您选择发送 DHCP 请求时,将创建一个关联。此关联允许响应到达程序。
Windows 注意到程序正在向广播地址发送消息,因此允许回复到达。否则,程序永远无法在本地网络上执行服务发现。
UDP 确实是无连接的。但是,在许多情况下,如状态防火墙或 NAT,仍然需要“连接”跟踪。发送数据包时,会创建临时关联。一段时间没有流量后,该关联就会失效。
来自“Windows 防火墙的工作原理”文章(重点是我的):
由于 UDP 是无连接协议,没有序列号或标志,因此它没有终止和关闭连接的机制。因此,UDP 连接的超时时间比 TCP 连接的超时时间短得多。已建立但不活动的 UDP 连接的超时时间为 60 秒。换句话说,如果已建立的 UDP 连接处于非活动状态 60 秒,则该连接的状态表条目将从 NAT 映射表中删除。此行为适用于所有端口上的 UDP 连接。
UDP 连接的 60 秒超时有一些例外。当计算机发送多播或广播消息时,Windows 防火墙会等待最多 3 秒钟才能收到单播响应。本质上,多播或广播连接的状态表条目最多维持 3 秒;如果多播或广播连接 3 秒内处于非活动状态(即没有响应),则状态表条目将从 NAT 映射表中删除。动态主机配置协议 (DHCP) 多播消息是一种特殊情况,不受 3 秒超时限制。