当前位置:首页>Linux>Linux 虚拟网络(二)-docker 网络的原型

Linux 虚拟网络(二)-docker 网络的原型

  • 2026-08-19 11:50:20
Linux 虚拟网络(二)-docker 网络的原型

Linux 虚拟网络(二)-docker 网络的原型

这是"Linux 虚拟网络"系列第二篇。第一篇造完了交换机(bridge)、网线(veth)和"另一台主机"(netns),看着一次 ping 把学习、转发、泛洪演了一遍,并讲清了 IP 为什么必须落在 br0 上。本篇把对应表收尾:两种特殊的接口(VLAN 子接口与 tap),然后用这张表逐行读懂 docker 的网络,再讲 bond 与三个常见疑问。

先把地图重新挂出来:

机房里的东西
内核里的对象
亲手造一个
一块物理网卡
ens18(驱动注册的 netdev)
插上网卡,驱动自动注册
一台二层交换机
bridge
ip link add br0 type bridge
一根网线
veth pair
ip link add veth0 type veth peer name veth1
一组链路聚合
bond
ip link add bond0 type bond
Trunk 口上的一个 VLAN
VLAN 子接口
ip link add link ens18 name ens18.100 type vlan id 100
虚拟机的网卡插头
tap
由 QEMU / EVE-NG 创建
另一台独立的服务器
network namespace(网络命名空间)
ip netns add ns1

这张表里,物理网卡天生就有,bridge、veth、netns 第一篇已经亲手造过、拆过。剩下三样:VLAN 子接口、tap、bond。本篇先从前两个接口讲起,bond 放在第三章。

一、两种特殊的接口:VLAN 子接口与 tap

它们的共同点是:都不是独立形态的设备,而是依附于既有链路的逻辑接口。一个建立在 Trunk 链路上,一个建立在用户态与内核态的边界上。

1.1 VLAN 子接口:从 Trunk 里终结一路 VLAN

先立场景:一台宿主机的上联口 ens18,接在物理交换机的 Trunk 口上,这条链路上跑着好几个 VLAN 的流量,比如 VLAN 100 是管理网,VLAN 200 是业务网。宿主机自己要在管理网里有个 IP(被 SSH、被监控),它就得从这条 Trunk 里分离出 VLAN 100 的流量,终结到自己的协议栈:

ip link add link ens18 name ens18.100 type vlan id 100

这条命令的作用:在物理网卡 ens18 上创建一个 VLAN 子接口 ens18.100,VLAN ID 是 100。

ens18.100 只是一个接口名字,里面的 .100 是一种常见命名习惯,表示它对应 VLAN ID 100

验证:

ip -br link show# 典型回复lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> ens18            UP             bc:24:11:a1:21:90 <BROADCAST,MULTICAST,UP,LOWER_UP> virbr0           DOWN           52:54:00:55:3d:e4 <NO-CARRIER,BROADCAST,MULTICAST,UP> ens18.100@ens18  DOWN           bc:24:11:a1:21:90 <BROADCAST,MULTICAST>

语义就一句话:发出去的帧打上 VLAN 100 的标签,收进来只认打着 VLAN 100 标签的帧,进出时打标签、剥标签。

接口名 ens18.100@ens18 里那个 @,标注的是它基于哪个父接口创建。它不是一块独立的网卡,是 Trunk 链路上派生出的一个逻辑接口。第一篇开头那一屏里的 ens18.100@ens18,就是它。

它和第一篇第二章的 vlan_filtering 是两个视角,极易混淆,这里区分清楚:

vlan_filtering 是转发视角:桥作为一台交换机,管每个端口怎么处理标签,解决的是帧怎么转发;

VLAN 子接口是终结视角:主机作为一个网络端点,要从 Trunk 里取哪一路流量进自己的协议栈,解决的是流量在哪落到三层。

1.2 tap:虚拟机接入协议栈的接口

第一篇第二章那张图里,虚拟机是直接连到 br0 的,中间那层插头被省略了没画。

它是什么?答案是 tap 设备。

tap 的特殊之处在于它的两头不对称:一头是内核里的一个普通网口,能 ip link 看到、能 up/down、能插进网桥,和别的 netdev 完全平等;

另一头是一个文件描述符。QEMU 拿着这个 fd:虚拟机的虚拟网卡发出一个以太帧,QEMU 把它原样 write 进这个 fd,内核就当作"有个帧从一块网卡进来了";反方向,内核发往这个口的帧,QEMU read 出来递给虚拟机的虚拟网卡。

一句话总结 tap:它让用户态程序以一块网卡的身份接入内核协议栈,用户态一侧持有文件描述符,内核一侧是一个正式注册的 net_device。

虚拟机之所以能"插"到网桥上、以自己的 MAC 出现在网段里,靠的就是这个接口。

Proxmox 里的 tap100i0、KVM 里的 vnet0、EVE-NG 拓扑接物理网时的那些接口,全是它。

这里要划清一条界线:tap 是虚拟机专用的接入机制,容器不用它。原因下一章就会看到:容器的网络栈是内核里的 network namespace,本就在内核态,主机与容器之间用一对 veth(两端都是内核对象)就能打通,无需跨越用户态边界。所以你在只跑容器、不跑虚拟机的机器上执行 ip link,会看到一堆 veth 却找不到一个 tap,这是对的,不是漏了。

本系列涉及的场景里,tap 只出现在虚拟机一侧:QEMU/KVM、Proxmox、EVE-NG 接物理网。它在别处也有身影,比如 OpenVPN 的 tap 模式、rootless 容器的 pasta,但触发条件始终是同一个:有一个用户态程序,需要在内核里拥有一块网卡。

顺带区分它的孪生兄弟:tap 搬运的是二层以太帧,tun 搬运的是三层 IP 包,所以 VPN 软件常用 tun,虚拟机桥接必须用 tap。

二、docker 网络:这张表的一道应用题

第一篇我们把 veth 直插 br0,容器与外部同网段,全程二层,协议栈只旁挂不居中。Docker 默认走另一条路:自建一座 docker0,让协议栈在两桥之间做路由和 NAT。先看整条链:

现在做一件有意思的事。我们在一台 openEuler 24.03 操作系统上,用 dnf install -y moby-engine moby-client 装好 docker,执行 systemctl enable --now docker 之后,再用以下命令验证:

ip -br link

输出里会有 docker0

此时我们再拉起一个容器:

还有一串 veth0ce42e6@if6 之类的接口。第一篇开头那一屏的最后两行,谜底就在这。再确认一下:

ip -br link show type bridge# 返回virbr0           DOWN           52:54:00:55:3d:e4 <NO-CARRIER,BROADCAST,MULTICAST,UP> docker0          UP             02:42:92:25:d9:18 <BROADCAST,MULTICAST,UP,LOWER_UP>ip link show master docker0   # 那串 veth,全都挂在 docker0 名下# 返回veth0ce42e6@if6  UP             b6:88:c8:52:b1:47 <BROADCAST,MULTICAST,UP,LOWER_UP>

docker0 就是一台网桥,那串 veth 就是网线,每个容器就是一个 network namespace。

容器网络 = netns + veth + bridge,一件新东西都没有。你在第一篇第三章亲手搭的那套 ns1 + veth + br0,就是 docker 网络的等价手工实现。docker 所做的,只是在每次 docker run 时替你把那几条 ip 命令跑了一遍:造 netns、造 veth 对、一头进桥、一头塞进容器改名成 eth0、配上 IP。

容器一停,veth 随之销毁。默认的 bridge 网络下,一个运行中的容器对应一头 veth,所以宿主机上那串 veth 的数量,基本就是活着的容器数。(严格说是"基本":容器接入多个自定义网络时会有多头 veth,host 和 none 模式则一头都没有。)

Kubernetes 也没有跳出这张图:最基础的 bridge CNI 插件,干的就是同一件事,只是桥的名字、网段的分配由 CNI 来管,规模从一台机器变成一个集群。

这就是对应表作为"地图"的价值:所谓容器网络,不是一门新学问,而是既有对象的一次组合。你看懂了 bridge、veth、netns,就已经看懂了 docker 单机网络的全部,以及 k8s 网络的地基。

三、bond:把多块网卡聚合为一条逻辑链路

网桥解决的是第一篇开篇那对矛盾的一个方向:一个口,要喂多个端点。bond 解决的是相反方向:多个口,要拧成一条链路。动机很朴素:服务器的上行链路,既怕断(单口是单点故障),又嫌窄(单口带宽就是上限),于是把两块、四块网卡在逻辑上合成一个口,对上层表现为一块"网卡"。这就是 bond,对应物理世界里交换机之间的链路聚合。

bond 内核提供 7 种模式(mode 0 到 6),但生产环境的心智模型只需抓住其中两个:主备(mode 1,active-backup)与聚合(mode 4,802.3ad)。

  • 主备(active-backup):求冗余。 同一时刻只有一块网卡承载流量,主接口故障时由备接口接管(failover)。它的优点是对交换机零要求,两根线插在傻交换机上也能用,所以它是可靠性场景的保底选择;
  • 聚合(802.3ad,即 LACP):求带宽,顺带冗余。 所有成员口同时干活,流量分摊着走。代价是交换机侧必须配好对应的聚合组,双方通过 LACP 协商确认成员口同属一个聚合组,两边配置不匹配,链路直接起不来。

3.1 LACP 为什么不提升单条流带宽

这是生产环境里关于 bond 最高频的认知错误,必须单独讲。两个 1G 口做 LACP 聚合,很多人期待单个大文件传输能跑到 2Gbps,跑不到,上限还是 1Gbps。

原因在 bond 的分发方式上:一个帧从哪个成员口出去,是对帧的特征字段做哈希决定的,源/目的 MAC,或者再加上 IP 和端口,取决于 xmit_hash_policy 配置。关键在于:同一条流的这些字段是恒定的,哈希结果就恒定,于是这条流的所有帧永远从同一个成员口出去。 单条流的带宽上限,永远是单个成员口的带宽;聚合提升的是多条流的总吞吐:流多了,哈希把它们摊到不同的口上,总量才上得去。

为什么要这样设计,而不是逐帧轮流发、把两个口都用满?因为保序

同一条流的帧若在两个口之间乱跳,两条路径的时延差会造成报文乱序,TCP 见到乱序会触发重复 ACK 乃至重传,性能损失远大于那点带宽收益。宁可单流不超一口,也要保证同流同路,这是链路聚合的基本设计取舍。

顺带说一句 M-LAG:它把聚合的对端从一台交换机换成两台协同的交换机,让服务器跨两台交换机上行,任一台整机故障链路都不断。但它沿用的是同一套哈希分发,所以上一段那个结论对它照样成立,单条流依旧走单个成员口,M-LAG 提升的是冗余,不是单流带宽。这里点到为止(具体可以看我的微信公众号,M-LAG 系列文章)。

3.2 控制面与数据面

借着 bond,正式引入一对贯穿整个系列的概念:

  • LACP 是控制面:协商聚合组的成员关系、成员口的加入与移除、故障的感知,它解决"这个聚合组由哪些口构成"的问题,跑的是协议报文,慢,但必须严谨;
  • 哈希分发是数据面:每一个具体的帧从哪个口出去,它逐帧执行,必须快,所以只做一次哈希运算,不做任何复杂决策。

控制面定规则,数据面跑流量;控制面慢而稳,数据面快而简。

第三篇讲收编、讲一帧的旅程,骨子里都是在分这两件事:谁在定规则,谁在跑流量。这对概念值得现在就记住。

3.3 bond 的动手部分

按本篇的节奏,此刻应该 ip link add bond0 type bond mode 802.3ad,然后往里塞网卡了。

但只要你的网卡已经挂在某个网桥下(Proxmox、EVE-NG 的机器几乎必然如此),这一塞就会撞上一条内核规则,命令直接报错被拒。

这条规则就是:一块网卡,同一时刻只能有一个 master。 网桥收编网卡(enslave,即建立 master/slave 主从关系),bond 也收编网卡,它们在内核眼里是同类:都是"收编者"。

收编的本质是什么、为什么名额只有一个、报错怎么解、以及一个数据帧从物理口进来到虚拟机收到它的完整旅程,这是第三篇的主线。到时候我们会故意制造这个报错,再亲手把它解开。

四、三个常见疑问

问一:为什么我在自己机器上敲 ip link show,只看到网桥和 bond,veth 和 tap 一个都没有?它们是不是可有可无?

答:因为它们的生命周期属于工作负载,不属于系统。

网桥和 bond 是基础设施:写进了持久化配置,开机就有,没有虚拟机、没有容器,它们也在那儿待着,它们是"机房布线"。veth 和 tap 则是随需创建的:

docker 在 docker run 那一刻才创建 veth 对,容器一停,veth 随之消失;

QEMU 在虚拟机开机那一刻才创建 tap,关机即销毁。

所以你看不到它们,不是它们不重要,恰恰是它们在忠实地跟随负载:你那台机器此刻多半没有跑着的容器和虚拟机。起一个容器再看,veth 立刻出现;停掉,立刻消失。

问二:那 veth 和 tap 的必要性到底在哪?docker 和虚拟机是必须依赖它们吗?

答:先看清一件事,bridge/bond 和 veth/tap 不是同一层的东西。

bridge 和 bond 是转发设备,决定帧怎么走;

veth 和 tap 是接入机制,解决帧怎么才能进入这张图。

veth 的必要性:netns 之间的协议栈是完全隔离的,隔离到连"把帧递给对方"的通道都没有。必须有一个两端可以分属两个命名空间的设备,帧才能从一个协议栈进入另一个协议栈。veth 正是为此设计的。没有它,netns 的隔离就是完全封闭的,容器无法与外界通信。

tap 的必要性:虚拟机的网卡是 QEMU 这个用户态进程模拟的,以太帧诞生在用户态内存里,而内核协议栈只认"从 net_device 进来的帧"。两者之间需要一个转换机制:一侧是文件描述符,用户态能 read/write;一侧是 net_device,内核按网卡处理。这正是 tap。

至于"必须"二字,严谨的回答是:不是唯一解,但是默认解。

docker 的 host 模式不隔离网络,自然不需要 veth;macvlan/ipvlan 也绕开了 veth+bridge。虚拟机侧,macvtap 可以不经网桥直挂物理口,SR-IOV 干脆让帧不进内核。但只要走的是默认路径(docker 的 bridge 网络、虚拟机桥接到 Linux bridge),veth 和 tap 就是必需的,而生产环境里,默认路径占了绝大多数。

问三:让虚拟机以独立 MAC 出现在物理网段上,网桥是唯一方案吗?

答:不是。macvlan 可以直接在物理口上虚拟出多个独立 MAC 的子设备,SR-IOV 则由网卡硬件切分出虚拟功能口。但 macvlan 有个著名限制:宿主机默认无法通过同一物理口和这些子设备二层互通;SR-IOV 则依赖硬件支持。所以更准确的说法是,网桥不是唯一解,但它是最通用的解:不挑硬件、宿主机与虚拟机互通无碍、语义与物理交换机完全对齐。这也是 Proxmox、EVE-NG、docker 默认都选它的原因。

小结

把本篇归结为一张表、一个模型:

一张表:机房里的每样东西,内核里都有一个对象。交换机是 bridge,网线是 veth,链路聚合是 bond,Trunk 上的 VLAN 是子接口,虚拟机的插头是 tap,另一台服务器是 netns。物理机房怎么组网,内核里就怎么组网。

一个模型:这些对象和物理网卡在内核里是平等公民,全是 net_device。所以 ip link 一套语法通吃,所以 docker/k8s/Proxmox/EVE-NG 的网络没有任何新东西,全是这张表的应用题。

lo                UNKNOWN  00:00:00:00:00:00  <LOOPBACK,UP,LOWER_UP>ens18             UP       3c:ec:ef:6a:12:34  <BROADCAST,MULTICAST,UP,LOWER_UP>bond0             UP       ca:a0:14:c4:24:58  <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP>vmbr0             UP       3c:ec:ef:6a:12:34  <BROADCAST,MULTICAST,UP,LOWER_UP>ens18.100@ens18   UP       3c:ec:ef:6a:12:34  <BROADCAST,MULTICAST,UP,LOWER_UP>tap100i0          UNKNOWN  8a:1f:33:9c:57:02  <BROADCAST,MULTICAST,UP,LOWER_UP>veth1a2b3c@if14   UP       f2:6d:0a:88:41:c5  <BROADCAST,MULTICAST,UP,LOWER_UP>docker0           DOWN     02:42:8e:11:2f:66  <NO-CARRIER,BROADCAST,MULTICAST,UP>

现在九行没有一行陌生:lo 是回环;ens18 和 ens19 是两块物理口,它们带着 SLAVE,说明已经被收编;收编它们的是 bond0,带 MASTER,三者共用一个 MAC,在二层是一个身份;bond0 又整个插进了 vmbr0 这台网桥,桥继承了同一个 MAC;vmbr0.100 是从桥上分出的 VLAN 子接口,宿主机的管理 IP 落在它身上;tap100i0 是某台虚拟机的插头;docker0 是 docker 自建的网桥,veth1a2b3c 是某个容器的网线,它插在 docker0 上,所以这座桥有载波。

-br 模式看不到 master 关系,ens18 属于谁、bond0 属于谁,都要靠 ip -br link show master bond0 这类命令问出来。而 bond0 身上那个 MASTER 标志和 vmbr0 身上的一片空白,恰好提醒了一件事:网桥和 bond 收编网卡的方式,在内核里并不是同一套标志位,却共用同一个名额。这个名额是第三篇的第一主角。

一句话总结:看懂 Linux 虚拟网络,不需要学一堆"虚拟化技术",只需要认下这张对应表,然后像在机房里一样思考。

第三篇预告:网桥和 bond 都是"收编者",收编的规则(master 与 slave、一个 rx_handler 名额引发的 EBUSY 报错、nomaster 为什么是必经手续)是第三篇的第一主角;第二主角是"一帧的旅程":一个数据帧从物理口进来,途经网桥、穿过 tap、抵达虚拟机的完整走线;最后用 ip link → ip addr → ip route → ip neigh 四问搭出一把排障阶梯。而所有人都会遇到的那个问题(ip 命令配的这一切,为什么一重启就没了),留给第四篇的 nmcli 来回答。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 23:56:07 HTTP/2.0 GET : https://f.mffb.com.cn/a/504536.html
  2. 运行时间 : 0.233490s [ 吞吐率:4.28req/s ] 内存消耗:4,557.98kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b270fa2e42263e7856f0e56f8b67a491
  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.001041s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001449s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000722s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000727s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001454s ]
  6. SELECT * FROM `set` [ RunTime:0.000600s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001548s ]
  8. SELECT * FROM `article` WHERE `id` = 504536 LIMIT 1 [ RunTime:0.001119s ]
  9. UPDATE `article` SET `lasttime` = 1787327767 WHERE `id` = 504536 [ RunTime:0.008724s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000590s ]
  11. SELECT * FROM `article` WHERE `id` < 504536 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001079s ]
  12. SELECT * FROM `article` WHERE `id` > 504536 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001029s ]
  13. SELECT * FROM `article` WHERE `id` < 504536 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.026773s ]
  14. SELECT * FROM `article` WHERE `id` < 504536 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001743s ]
  15. SELECT * FROM `article` WHERE `id` < 504536 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.017842s ]
0.237231s