当前位置:首页>Linux>深入理解Linux 内核 Netfilter 与 NAT:容器如何出网

深入理解Linux 内核 Netfilter 与 NAT:容器如何出网

  • 2026-08-23 10:42:51
深入理解Linux 内核 Netfilter 与 NAT:容器如何出网

容器 A 的 IP 是 10.0.0.2,属于私有网段。它去 ping 8.8.8.8,包却能正常回来——可公网回包的目的地址写的是容器私有 IP,互联网路由根本到不了 10.0.0.0/24。这中间的"偷梁换柱"就是 NAT,而 NAT 是挂在 Netfilter 钩子框架上的。

前面三篇讲了命名空间隔离(netns)、点对点通道(veth pair)、二层交换(Linux Bridge)。这一篇把栈再往上推一层:包离开桥、进入 IP 路由与 Netfilter 之后,内核究竟做了什么,才让一个私有地址的容器能借宿主的公网 IP 出网。

读完你应该能回答:为什么 iptables -t nat -A POSTROUTING -j MASQUERADE一条规则就够了,它背后改了什么、又靠什么把回包正确送回容器。

一、Netfilter 的五道钩子

Netfilter 是内核协议栈里一组"埋点"。IPv4 在五个固定位置各留了一个钩子点,用枚举 NF_INET_*标识(定义于 include/uapi/linux/netfilter.h):

钩子点
iptables 链
协议栈调用位置
NF_INET_PRE_ROUTING
PREROUTING
net/ipv4/ip_input.c
→ ip_rcv()
NF_INET_LOCAL_IN
INPUT
ip_local_deliver()
NF_INET_FORWARD
FORWARD
net/ipv4/ip_forward.c
→ ip_forward()
NF_INET_LOCAL_OUT
OUTPUT
__ip_local_out()
NF_INET_POST_ROUTING
POSTROUTING
net/ipv4/ip_output.c
→ ip_output()

每个钩子点不是单一函数,而是一串按优先级排序的回调。一个模块(iptables / nftables / conntrack / NAT)想在某个钩子点插手,就填一个 struct nf_hook_ops

structnf_hook_ops {    nf_hookfn           *hook;     // 回调函数structnet_device   *dev;// 限定网卡(可空)void                *priv;u_int8_t            pf;        // 协议族,PF_INETunsignedint        hooknum;   // NF_INET_*int                 priority;  // NF_IP_PRI_*,数值小先执行};

注册走 nf_register_net_hook(net, ops)net/netfilter/core.c)。内核用 RCU 保护的数组 struct nf_hook_entries存每个钩子点的所有 ops,按 priority升序排好。

包走到埋点时,协议栈不是直接调钩子,而是走 NF_HOOK宏;若钩子点有注册的 ops,就进入 nf_hook_slow(),逐个调用:

unsignedintnf_hook_slow(struct sk_buff *skb, struct nf_hook_state *state){for (i = 0; i < entries->num_hook_entries; i++) {        verdict = nf_hook_entry_hookfn(&entries->hooks[i], skb, state);switch (verdict) {case NF_ACCEPT: continue;        // 交给下一个钩子case NF_DROP:   kfree_skb(skb); return NF_DROP;   // 丢包case NF_STOLEN: return NF_STOLEN; // 包被钩子接管,协议栈不再处理case NF_QUEUE:  ...              // 交用户态(nfqueue)case NF_REPEAT: i = -1continue;// 从头再跑一遍        }    }return NF_ACCEPT;}

关键点:**所有 iptables 链、conntrack、NAT,本质都是往这五个钩子点注册 nf_hook_ops**。优先级(include/uapi/linux/netfilter_ipv4.h的 NF_IP_PRI_*)决定了谁先谁后:

NF_IP_PRI_CONNTRACK_DEFRAG  -400   // 分片重组NF_IP_PRI_RAW              -300NF_IP_PRI_CONNTRACK       -200   // conntrack 建/匹配NF_IP_PRI_MANGLE          -150NF_IP_PRI_NAT_DST         -100   // DNATNF_IP_PRI_FILTER             0    // filter 过滤NF_IP_PRI_SECURITY          50NF_IP_PRI_NAT_SRC          100   // SNAT / MASQUERADENF_IP_PRI_CONNTRACK_CONFIRM INT_MAX  // 连接确认提交

下面这张图把五个钩子点在协议栈里的位置标出来:

Netfilter 五钩子在协议栈中的位置

二、连接跟踪 conntrack:NAT 的"状态表"

NAT 是有状态的。SNAT 把 10.0.0.2:1234 → 8.8.8.8:53改成了 公网IP:54321,回包从 8.8.8.8:53 → 公网IP:54321回来时,内核必须知道"这其实该还原成 10.0.0.2:1234"。记录这个映射的,就是 conntrack。

conntrack 在 NF_INET_PRE_ROUTING(优先级 -200,比 NAT 早)就对每个包做查询或新建,核心入口是 nf_conntrack_in()net/netfilter/nf_conntrack_core.c)。一条连接用 struct nf_conn表示(include/net/netfilter/nf_conntrack.h),核心是两个方向的 tuple

structnf_conntrack_tuple {structnf_conntrack_mansrc;// 源:IP + 端口(manipulable)structnf_conntrack_tuple_dstdst;// 目的:IP + 端口// 隐含:协议号(TCP/UDP/ICMP)};// nf_conn 里:structnf_conntrack_tuple_hashtuplehash[IP_CT_DIR_MAX];// IP_CT_DIR_ORIGINAL = 原方向,IP_CT_DIR_REPLY = 反方向

tuple 本质就是五元组(源 IP、源端口、目的 IP、目的端口、协议),分原方向/反方向两条。查表时把包的五元组算成 tuple,去哈希表 nf_conntrack_hash里找;找不到且是合法新流就建一条,status打上 IPS_CONFIRMED等标志。

conntrack 的连接状态(enum ip_conntrack_statusenum ip_conntrack_info)常见的有:

  • NEW:看到首个包,还没确认(PRE_ROUTING 阶段)
  • ESTABLISHED:收到反方向包,双向都见过了
  • RELATED:由已有连接派生(如 FTP 被动模式数据通道、ICMP 差错)
  • INVALID:无法归入任何连接,通常被 DROP

连接确认由 nf_confirm()完成:转发/出网包在 NF_INET_POST_ROUTINGNF_IP_PRI_CONNTRACK_CONFIRM,优先级 INT_MAX,该钩子点最后一个)确认;本地投递包则在 NF_INET_LOCAL_IN同优先级确认,把新连接正式写进哈希表。这样设计是为了:万一包在确认之前被 DROP,就不会留下一条"幽灵连接"。

三、NAT 怎么挂在钩子上

NAT 同样是一组 nf_hook_ops,只是它改 skb,并把映射记进 nf_conn

  • SNAT(改源地址):注册在 NF_INET_POST_ROUTING,优先级 NF_IP_PRI_NAT_SRC = 100。容器出网用的就是它。
  • DNAT(改目的地址):注册在 NF_INET_PRE_ROUTING与 NF_INET_LOCAL_OUT,优先级 NF_IP_PRI_NAT_DST = -100。外界访问宿主持有公网 IP、实际转发到容器时用到。

iptables 的 nat表规则最终由内核 NAT 模块在对应钩子点执行:它根据规则的 target 调 nf_nat_manip_pkt()真正改写 skb的源/目的 IP 与端口,并把"改了什么"存进 nf_conn的 NAT 扩展(struct nf_conn_nat里的 maniprange)。之后这条流的每一个后续包(回包)都由 conntrack 匹配到同一条 nf_conn,在反向钩子点自动逆改写——你不必为回包再写一条规则。

MASQUERADE与 SNAT的区别只在"源 IP 取哪来":

  • SNAT --to-source 1.2.3.4:把源写死成 1.2.3.4,适合静态公网 IP。
  • MASQUERADE:动态取出口网卡当前的 IP作为源,出口 IP 一变(DHCP / PPPoE 重拨)无需改规则,容器出网场景几乎都用它。

结论:容器互 ping 时帧在桥内 L2 直通、根本不进 IP 栈,所以默认碰不到任何 Netfilter 钩子;只有当包要"出桥进路由、做 NAT"时,才进入这一层。

下面这张图给出"出网 SNAT + 回程 DNAT"在钩子点上的配合:

出网 SNAT 与回程 DNAT 在钩子点的配合

四、br_netfilter:让桥上的包也能过 iptables

第三篇留了个接口:容器出网那一下 NAT 在哪做?答案是 br_netfilter模块。

默认情况下,桥上的 IP 包在 br_handle_frame里就 L2 转发走了,连 IP 协议栈都没进,iptables 自然无从下手。但当容器要"出网"——包从容器经 veth 进 br0,再从宿主物理网卡 eth0出去——这条路径需要路由 + NAT,就必须让桥上的 IP 包也撞上 Netfilter 钩子。

br_netfilternet/bridge/br_netfilter_hooks.c)做的事:在桥转发路径里调 br_nf_hook_thresh(),对桥上的 IP 包**再次调用 NF_HOOK()**(PREROUTING / POSTROUTING 等 IP 层钩子)。于是 iptables -t nat -A POSTROUTING ... -j MASQUERADE才能作用于"从桥出去"的包。

代价是那条著名的 sysctl:net.bridge.bridge-nf-call-iptables。它打开后,桥上所有 IP 包都过一遍 iptables,会引入额外的 conntrack 开销,还容易因 MTU / 分片处理与 bridge 行为耦合而出问题——这也是为什么很多精简容器网络会选择绕过它,改用纯路由或 eBPF 做 SNAT。

五、完整走查:容器 A 出网全过程

把前面四篇串起来,容器 A(10.0.0.2ping 8.8.8.8的完整路径:

  1. 容器 A 构造 ICMP,从 eth0(veth 对端)发出 → veth 把 skb经 peer指针 forward 给宿主侧 vethA
  2. vethA是 br0的 slave,rx_handler = br_handle_frame截到包,在桥内 L2 转发,决定从宿主物理网卡方向出去。
  3. 包进入 IP 栈 ip_rcv()→ PREROUTING:conntrack 建立 NEW连接(tuple 原方向 10.0.0.2 → 8.8.8.8)。
  4. 路由子系统判定这是转发包(目的不是本机)→ FORWARD
  5. ip_output()→ POSTROUTING:conntrack nf_confirm()确认写入;MASQUERADE把源 IP 10.0.0.2改成 eth0的公网 IP、源端口映射到 54321
  6. 包从 eth0出公网,源已是公网 IP。
  7. 回包 8.8.8.8 → 公网IP:54321进 eth0→ PREROUTING:conntrack 匹配到 ESTABLISHED流,DNAT 逆改写目的为 10.0.0.2:1234
  8. 路由 → FORWARD→ 进 br0→ 桥内转发到 vethA→ 回到容器 A。

整条链路里,conntrack 是"胶水":它在最前面建连接,在最后面确认,并让回包自动逆 NAT——你只写了 POSTROUTING 一条 MASQUERADE,回程却无需再配。

容器 A 出网全过程时序

六、动手验证清单

找一台跑了容器(bridge 网络)的机器:

# 1. 看 NAT 规则,确认 MASQUERADE 在 POSTROUTINGiptables -t nat -L POSTROUTING -n -v# 2. 看连接跟踪表,容器出网后会看到一条 ESTABLISHEDconntrack -L -s 10.0.0.2# 3. 确认 IP 转发已开(FORWARD 路径的前提)cat /proc/sys/net/ipv4/ip_forward# 4. 确认桥上的包会进 iptables(容器出网依赖)cat /proc/sys/net/bridge/bridge-nf-call-iptables# 5. 抓宿主机 eth0,验证出网包源 IP 已是公网 IPtcpdump -i eth0 -n 'icmp' &# 容器内:ping 8.8.8.8

小结

这一篇把"容器怎么出网"收了口:Netfilter 在协议栈五个埋点(NF_INET_*)挂一串按优先级排序的 nf_hook_ops;conntrack 在 PREROUTING 建连接、在 POSTROUTING 确认,用双向 tuple 记住五元组映射;NAT 在 POST_ROUTING 用 nf_nat_manip_pkt改写 skb 源地址并把映射存进 nf_conn,回包靠 conntrack 自动逆改写;br_netfilter让桥上的 IP 包也能撞上这些钩子,于是"从桥出去"的容器流量才做得了 MASQUERADE。

一句话:NAT 不神秘,它就是 conntrack 状态表 + 钩子点上的 skb 改写;你写的每一条 -j MASQUERADE,背后都是 PRE_ROUTING 建表、POST_ROUTING 改包、回程自动还原这三步。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-23 17:22:50 HTTP/2.0 GET : https://f.mffb.com.cn/a/511933.html
  2. 运行时间 : 0.554102s [ 吞吐率:1.80req/s ] 内存消耗:4,509.42kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b14faa50ebd308f8e9556b5c43ca80c1
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001222s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001555s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.013581s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.018484s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001582s ]
  6. SELECT * FROM `set` [ RunTime:0.055718s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001699s ]
  8. SELECT * FROM `article` WHERE `id` = 511933 LIMIT 1 [ RunTime:0.080204s ]
  9. UPDATE `article` SET `lasttime` = 1787476970 WHERE `id` = 511933 [ RunTime:0.031442s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.016442s ]
  11. SELECT * FROM `article` WHERE `id` < 511933 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.034149s ]
  12. SELECT * FROM `article` WHERE `id` > 511933 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.041293s ]
  13. SELECT * FROM `article` WHERE `id` < 511933 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.062883s ]
  14. SELECT * FROM `article` WHERE `id` < 511933 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.016789s ]
  15. SELECT * FROM `article` WHERE `id` < 511933 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.008637s ]
0.557825s