文章:计算机网络 31:NAT 与防火墙改变了什么,五元组、连接跟踪、SNAT/DNAT 与超时 研究与验证日期:2026-09-24 一手资料核查 1. RFC 3022: Traditional IP Network Address Translator — IETF URL: https://www.rfc-editor.org/rfc/rfc3022.html 版本/日期:RFC 3022,2001-01。 使用范围:Basic NAT 与 NAPT 定义、会话流量需经过持有转换状态的 NAT、传统 NAT 的限制。 2. RFC 4787: Network Address Translation Behavioral Requirements for Unicast UDP — IETF URL: https://www.rfc-editor.org/rfc/rfc4787.html 版本/日期:RFC 4787,2007-01。 使用范围:UDP 映射、过滤、映射刷新及计时条件;不把其 UDP 要求泛化为 TCP。 3. RFC 7857: Updates to NAT Behavioral Requirements — IETF URL: https://www.rfc-editor.org/rfc/rfc7857.html 版本/日期:RFC 7857,2016-04。 使用范围:NAT44 的 TCP 会话跟踪状态及对 RFC 4787/5382 的更新。 4. nftables manual — Netfilter project URL: https://netfilter.org/projects/nftables/manpage.html 版本/日期:在线手册,访问于 2026-09-24。 使用范围:nat 类型链基于 conntrack,通常首包建立 NAT 绑定;不同 hook 与优先级影响实际处理顺序。 5. Netfilter Conntrack Sysfs variables — Linux kernel project URL: https://docs.kernel.org/networking/nf_conntrack-sysctl.html 版本/日期:Linux Kernel Documentation 在线版本,访问于 2026-09-24。 使用范围:不同协议和 TCP 状态具有不同 conntrack 超时,设置可按网络命名空间变化。未把在线文档默认值写成所有系统的固定值。 环境能力检查 command -v ip command -v nft command -v tcpdump 三项均无输出,未尝试加载模块、安装工具或改变宿主网络。 运行方法 python3 source/_posts/2026-09-24-计算机网络31-NAT与防火墙改变了什么/tuple_model.py --help python3 source/_posts/2026-09-24-计算机网络31-NAT与防火墙改变了什么/tuple_model.py 预期验证条件 - SNAT 只改固定示例的源端点,DNAT 只改目标端点。 - 两种映射的回复方向均恢复到原始五元组的反向。 - TCP 和 UDP 的相同四元组不相等。 - ROUTE_FAILURE、FILTER_DROP、STATE_EXPIRED、FORWARD 四种结果互不混淆。 - 任一断言失败时脚本退出码为 1。 验证边界 验证类型:HAND_CALC。 NOT_RUN:自建网络命名空间网关、真实路由、nftables NAT/过滤、conntrack 事件、双侧 pcap、真实超时与端到端请求。原因是当前环境缺少 ip、nft、tcpdump 和经确认的相应能力。