当前位置:首页>Linux>Macvlan深度解析:Linux网卡虚拟化技术详解

Macvlan深度解析:Linux网卡虚拟化技术详解

  • 2026-01-31 05:11:28
Macvlan深度解析:Linux网卡虚拟化技术详解

一、引言:为什么需要Macvlan

在传统的容器网络方案中,如 Docker,默认通过 bridge 模式采用 NAT 技术。容器发出的数据包会经过宿主机的网络协议栈进行地址转换,外部网络看到的永远是宿主机的 IP 地址。这种方案虽然简单直接,但存在几个明显的痛点。
首先是端口映射的繁琐。每一个需要对外提供服务的容器,都必须显式地映射端口:docker run -p 8080:80。当容器数量增加后,必须要考虑端口管理的问题,避免冲突。
其次是NAT 带来的性能损耗。每一个数据包都要经过宿主机的网络协议栈处理,从网卡的接收队列到内核协议栈,再从协议栈到容器的虚拟网卡,最后再返回。这个过程中涉及多次内存复制和上下文切换,不可避免的产生大量的性能消耗。
第三是IP 地址管理的混乱。在 NAT 模式下,容器使用私有 IP 地址(如 172.17.0.0/16),这些地址与物理网络完全隔离。当我们需要从物理网络直接访问容器时,必须通过端口映射中转,这就导致了 IP 地址与服务的对应关系变得更加模糊。
更重要的是,某些遗留应用对网络环境有特殊要求(我们的第一个客户就因此必须使用 Macvlan 技术)。它们可能直接绑定物理网卡的 MAC 地址,或者需要运行在广播域中与传统设备通信。这类应用在迁移到容器环境过程中,必须要考虑网络适配问题。
Macvlan 的出现,正是为了解决这些痛点。它允许我们在物理网卡上创建多个虚拟网络接口,每个虚拟接口都拥有独立的 MAC 地址和 IP 地址。容器通过这些虚拟接口直接接入物理网络(仿佛它们就是一台台独立的物理机/虚拟机),外部网络可以直接看到容器的真实 IP地 址。

二、Macvlan核心原理

2.1 技术本质:L2层虚拟化

Macvlan 是 Linux 内核提供的一种网卡虚拟化技术,工作在 OSI 模型的第二层(数据链路层)。它的核心思想是在物理网卡上创建多个虚拟接口,每个虚拟接口拥有独立的 MAC 地址,但在物理线路上共享带宽
理解 Macvlan 的关键在于把握 "父接口" 与 "子接口" 的关系。父接口(Parent Interface)是真实网卡,比如 eth0 或 ens33。子接口(Sub-interface)是由 Macvlan 驱动在父接口基础上创建的虚拟接口,比如 eth0、eth0.100 或自定义名称的 macvlan0。
Macvlan 的工作原理可以从数据包流转的角度来理解。当物理网卡接收到一个数据包时,内核会根据目标 MAC 地址决定如何处理这个包。如果目标 MAC 地址匹配某个子接口的 MAC 地址,数据包就会被递交给该子接口;如果是广播或组播,则会递交给所有子接口。反过来,当某个子接口需要发送数据时,数据包会经过 Macvlan 驱动处理,最终从物理网卡发出。
值得注意的是,Macvlan 要求物理网卡工作在混杂模式(Promiscuous Mode)。这是因为物理网卡需要接收目标 MAC 地址不是自己的数据包——这些数据包实际上是发送给某个子接口的。在混杂模式下,网卡不再过滤与自己 MAC 不匹配的数据包,从而确保所有子接口都能正常接收数据。

2.2 独立MAC地址的意义

每个 Macvlan 子接口都拥有独立的 MAC 地址,这一个特性带来了深远的影响。交换机根据 MAC 地址表来决定将数据包转发到哪个端口,而 ARP 协议根据 MAC 地址来解析 IP 地址对应的机器。
当容器拥有独立的 MAC 地址时,它在网络中表现得与物理机无异。交换机会像对待普通主机一样对待容器,将数据包精确地转发到宿主机,再由 Macvlan 驱动递交给对应的容器。物理网络中的其他设备完全感知不到容器的虚拟化存在,它们看到的只是一台台"普通"的主机。
独立 MAC 地址还带来了一个额外的好处:便于网络监控和审计。在传统的 bridge 模式下,所有容器的流量都通过宿主机的虚拟交换机,监控工具需要针对虚拟网络进行配置。而在 Macvlan 模式下,每个容器都有独立的 MAC 地址,直接使用 Wireshark 等传统抓包工具就能监控特定容器的流量,这对于网络故障排查和安全审计来说非常方便。
当然,MAC 地址的独立性也带来了一些限制。在云环境或企业网络中,交换机的端口通常只允许有限的 MAC 地址学习。如果在同一个交换机端口下创建过多的 Macvlan 子接口,可能会触发交换机的 MAC 地址限制,导致部分数据包被丢弃。这是部署 Macvlan 时需要特别注意的问题。

三、四种工作模式详解

Macvlan提供了四种工作模式,定义了子接口之间以及子接口与外部网络之间的通信行为。

3.1 Bridge模式:容器间的本地通信

Bridge 模式是 Macvlan 最常用的工作模式。在这种模式下,所有子接口通过一个虚拟网桥连接,它们之间的通信直接在虚拟网桥上完成,不需要经过物理网卡。子接口向外部网络发送数据时,数据包才会通过物理网卡发出。
容器 A 向容器 B 发送数据时,数据包从容器 A 的 macvlan0 接口发出,进入虚拟网桥。网桥根据目标 MAC 地址(容器 B 的 macvlan1 对应的 MAC)将数据包转发到容器 B。整个过程完全在宿主机内部完成,不需要经过物理网卡,也不需要与外部网络交互。这种本地通信方式效率极高,延迟与传统的虚拟网卡通信相当。
Bridge 模式的典型应用场景包括:需要高速本地通信的微服务集群、需要共享同一物理网络的多个容器、需要直接访问物理网络资源的应用。在 Docker 中使用 macvlan 网络时,默认就是 Bridge 模式。

3.2 VEPA模式:发夹弯流量

VEPA(Virtual Ethernet Port Aggregator)模式源于802.1Qbg标准。与 Bridge 模式不同,VEPA 模式下子接口之间的通信必须经过外部交换机。容器发送的数据包首先被送到物理网卡,然后由物理网卡发送到外部交换机,交换机根据 MAC 地址表决定是否将包发回同一端口(这种发回被称为"Reflective Relay"或"发夹弯")。
VEPA 模式的设计初衷是让网络设备(而非宿主机)掌控流量。这种模式的优点:所有的流量决策都由交换机统一完成,便于实施 QoS 策略和安全策略;虚拟化平台不再维护网桥配置,降低了复杂度;流量经过外部交换机,便于集中监控和审计。
然而,VEPA 模式对交换机有特殊要求。传统的二层交换机收到目的 MAC 不在本端口的数据包时,会泛洪到所有其他端口,而不是发回原端口。只有支持Reflective Relay(反射中继)功能的交换机,才能将数据包从接收端口发回。

3.3 Private模式:完全隔离

Private 模式提供了一种最严格的隔离策略。在这种模式下,子接口之间的通信被完全禁止,即使是发往外部交换机的"发夹弯"流量也会被过滤。即 Private 模式下的子接口只能与外部网络通信,彼此之间无法通信。
Private 模式适用于需要严格网络隔离的场景。例如,在多租户环境中,不同租户的容器不能相互通信。Private 模式确保了这种隔离是强制性的,无法绕过。

3.3 Passthru模式:独占与特权

Passthru 模式是最简单也最特殊的模式。在这种模式下,物理网卡只能被一个 Macvlan 子接口使用,这个子接口直接"继承"物理网卡的所有特性,即物理网卡本身就变成了一个 Macvlan 接口。
Passthru 模式的典型应用场景包括:为单个高性能容器提供完整的物理网卡资源、某些需要特殊网卡功能(如 SR-IOV 直通)的场景、将物理网卡直接分配给容器而不经过虚拟化层。需要注意的是,在 Passthru 模式下,物理网卡原有的 IP 地址可能需要迁移到新的 macvlan 接口上。

3.4 模式对比汇总

特性

Bridge

VEPA

Private

Passthru

子接口间通信

 直接在虚拟网桥

 经过外部交换机

 完全隔离

不适用

上行到外网

外部交换机要求

支持Reflective Relay

隔离级别

最高

性能

高(本地交换)

中(需绕行交换机)

最高

典型场景

通用容器网络

集中租户隔离

网络管理

多 高性能直通

四、容器与宿主机的通信问题

4.1 "无法通信"现象

在 Macvlan 的实际使用中,经常遇到一个问题:Macvlan 容器无法与宿主机直接通信。这种现象在 Bridge 模式下尤为明显——容器可以正常访问外部网络,外部网络也可以访问容器,但宿主机就是无法 ping 通容器。
理解这个问题的关键在于理解 Macvlan 的工作机制。物理网卡 eth0 和它的 Macvlan 子接口(如 macvlan0)虽然共享物理链路,但在内核的网络协议栈中,它们被视为两个独立的网络接口。eth0 拥有自己的 IP 地址(192.168.1.100),macvlan0 也拥有自己的IP地址(192.168.1.10)。当宿主机向容器发送数据包时,数据包会从 eth0 发出,但容器的回应会从 macvlan0 发出。由于 eth0 和 macvlan0 在链路层上的隔离,这种"交叉"通信无法正常建立。
这个设计是有意为之的。Macvlan 驱动故意隔离了父接口和子接口的网络栈,一方面是为了简化实现,另一方面也是出于安全考虑——如果允许这种"发夹"流量,可能会导致 ARP 欺骗等安全问题。

4.2 解决方案:辅助接口法

解决宿主机与 Macvlan 容器通信问题的方法有多种,最常用的是"辅助接口法"。其原理是:创建一个新的 Macvlan 接口(通常称为 "shim" 接口),将宿主机的一个 IP 地址绑定到这个接口上,然后通过路由策略让宿主机与容器之间的流量经过这个辅助接口。
具体配置步骤如下:
首先,创建一个新的 Macvlan 接口作为辅助接口:
# 创建辅助接口ip link add macvlan_shim link eth0 type macvlan mode bridge# 激活接口ip link set macvlan_shim up# 为辅助接口配置宿主机原有的IP地址(使用32位掩码)ip addr add 192.168.1.100/32 dev macvlan_shim# 添加路由,让宿主机访问容器 IP 时走辅助接口ip route add 192.168.1.10/32 dev macvlan_shim
完成上述配置后,宿主机就可以正常与 Macvlan 容器通信了。原理是这样的:当宿主机访问容器 192.168.1.10 时,内核根据路由表选择从 macvlan_shim 接口发出。macvlan_shim 是 eth0 的子接口,数据包直接通过物理链路发送,容器能够正确接收并回应。容器的回应同样经过物理链路到达 macvlan_shim,最终被宿主机接收。

4.3 容器与宿主机通信的其他方案

除了辅助接口法,还有其他几种解决通信问题的方法。
使用 IPv6:如果宿主机和容器都配置了 IPv6 地址,由于 IPv6 的邻居发现机制工作方式不同,宿主机通常能够直接与 Macvlan 容器通信。
将容器 IP 配置在宿主机上:将容器使用的 IP 地址也配置在宿主机的某个接口上(使用secondary IP),这样 ARP 解析能够正确进行。但这种方法管理起来比较麻烦,不建议在生产环境中使用。
调整 ARP 设置:通过调整 /proc/sys/net/ipv4/conf/*/arp_filter 等参数,有时可以解决通信问题。但这种方法效果不稳定,且可能影响其他网络功能。
综合来看,辅助接口法是最可靠、最推荐的解决方案。在 Docker 的 macvlan 网络中,我们可以通过配置来自动完成这些设置。

五、Docker与Kubernetes集成

5.1 Docker Macvlan 网络配置

Docker 原生支持 Macvlan 网络驱动,操作如下:
# 创建 macvlan 网络docker network create \  -d macvlan \  --subnet=192.168.1.0/24 \  --gateway=192.168.1.1 \  -o parent=eth0 \  -o macvlan_mode=bridge \  my_macvlan_network

上述命令创建了一个名为 my_macvlan_network 的 Macvlan 网络,父接口为 eth0,子网 192.168.1.0/24,网关为 192.168.1.1。默认模式下创建的容器会通过 eth0 直接接入物理网络。
创建网络后,可以在该网络中启动容器:
# 在 macvlan 网络中启动容器docker run --network my_macvlan_network --ip 192.168.1.100 -itd --name test_container alpine

如果不指定 IP 地址,Docker 会自动从子网中分配一个可用 IP。需要注意的是,如果容器需要与宿主机通信,还需要额外配置前面提到的辅助接口。

指定固定 IP:在生产环境中,通常需要为容器指定固定IP地址,以确保服务的稳定性。可以使用 --ip 参数指定 IP,也可以通过 IPAM(IP 地址管理)配置来预留IP地址。
限制容器数量:通过 --internal 参数可以创建一个隔离的 Macvlan 网络,容器无法访问外部网络。这在需要完全隔离的多租户场景中很有用。

5.2 Docker Compose配置

使用 Docker Compose 时,macvlan 网络的配置如下:
version: '3.8'networks:  macvlan_network:    driver: macvlan    driver_opts:      parent: eth0      macvlan_mode: bridge    ipam:      config:        - subnet: 192.168.1.0/24        gateway: 192.168.1.1services:  web:    image: nginx:alpine    container_name: web_server    networks:      macvlan_network:        ipv4_address: 192.168.1.50    restart: unless-stopped
Docker Compose 的配置文件更加清晰,适合管理多个服务的网络配置。通过 ipam 配置段,可以详细规划 IP 地址分配,避免手动管理带来的混乱。

5.3 Kubernetes 中的 Macvlan

在 Kubernetes 中,Macvlan 通常通过 CNI(Container Network Interface)插件来实现。常见的方案包括Multus CNI(用于支持多网卡)和独立的 macvlan CNI 插件。
使用 Multus CNI 配置 Macvlan
首先安装 Multus CNI,然后创建 NetworkAttachmentDefinition 资源:
apiVersion: "k8s.cni.cncf.io/v1"kind: NetworkAttachmentDefinitionmetadata:  name: macvlan-networkspec:  config: '{      "cniVersion""0.3.1",      "type""macvlan",      "master""eth0",      "mode""bridge",      "ipam": {        "type""host-local",        "subnet""192.168.1.0/24",        "rangeStart""192.168.1.50",        "rangeEnd""192.168.1.100",        "gateway""192.168.1.1"      }    }'
在 Pod 中使用该网络:
apiVersion: v1kind: Podmetadata:  name: macvlan-pod  annotations:    k8s.v1.cni.cncf.io/networks: '[      {        "name""macvlan-network",        "namespace""default",        "ips": ["192.168.1.60/24""192.168.1.61/24"]      }    ]'spec:  containers:  - name: test    image: alpine    command: ["sleep""infinity"]
Pod 双网卡架构:在 Kubernetes 中,一个常见的模式是为 Pod 配置双网卡——eth0 用于 Kubernetes 的 Service 和 Pod 通信(使用 Overlay 网络),net1 使用 Macvlan 用于高性能数据面通信。

六、Macvlan 与 IPvlan 对比

6.1 技术差异

IPvlan 是另一个 Linux 内核提供的网卡虚拟化技术,两者的核心区别在于 MAC 地址的处理方式。
Macvlan 为每个虚拟接口分配独立的 MAC 地址,即每个虚拟接口拥有自己独立的身份标识。交换机根据 MAC 地址学习和转发数据包,就像对待普通主机一样。
IPvlan 则共享父接口的 MAC 地址。所有虚拟接口都使用父接口的 MAC 地址,通过不同的 IP 地址来区分。在物理网络看来,所有 IPvlan 虚拟接口都是"同一个设备",只是绑定了不同的 IP。
IPvlan 有两种子模式:L2 模式和 L3 模式。在 L2 模式下,虚拟接口之间的通信在二层进行(类似于 Macvlan 的 bridge 模式);在 L3 模式下,所有通信都经过三层路由转发。

6.2 选型决策树

特性

Macvlan

IPvlan L2

IPvlan L3

MAC地址

独立

共享父接口

共享父接口

隔离性

交换机要求

云环境兼容性

 有限

 好

 好

性能

略低(路由开销)

容器间通信

直接交换

直接交换

需路由

公有云的选择:在 AWS、阿里云等公有云环境中,Macvlan 的使用受到严格限制。云厂商通常不允许同一个交换机端口下出现过多的 MAC 地址,因为这会消耗交换机的 MAC 地址表资源。在这种环境下,IPvlan 是更好的选择——它共享 MAC 地址,不会触发云厂商的限制。
性能考虑:Macvlan 和 IPvlan L2 在性能上几乎没有差别,因为它们的二层处理逻辑相似。IPvlan L3 由于增加了三层路由的开销,性能会略低一些。但对于大多数应用场景来说,这种差异可以忽略不计。
隔离性要求:如果需要更强的网络隔离,IPvlan L3 是更好的选择。在 L3 模式下,不同虚拟接口之间的通信必须经过三层路由,可以在路由器上实施更精细的访问控制策略。

七、应用场景与最佳实践

7.1 典型应用场景

遗留应用迁移:某些遗留应用对网络环境有特殊要求,比如需要直接绑定 MAC 地址,或者必须在广播域中工作。将这些应用容器化时,Macvlan 可以提供与物理机完全一致的网络环境,实现平滑迁移。
网络监控与审计:由于每个容器都有独立的 MAC 地址,可以直接使用 Wireshark、tcpdump 等传统工具监控特定容器的流量。这对于网络故障排查、安全审计、合规检查都非常有帮助。
高性能计算:在高性能计算场景中,网络延迟和吞吐量是关键指标。Macvlan 避免了 NAT 带来的额外开销,容器可以直接与物理网络交互,获得与物理机相当的性能。
多租户隔离:在多租户环境中,不同租户的网络需要严格隔离。Macvlan 配合 Private 模式或 VRF(Virtual Routing and Forwarding)技术,可以实现租户间的网络隔离,确保一个租户的流量不会影响到其他租户。

7.2 部署最佳实践

IP地址规划:在创建 Macvlan 网络之前,必须仔细规划 IP 地址段。一个常见的做法是预留一段专用于容器的 IP 地址池,与物理机的 IP 地址分离。例如,物理机使用 192.168.1.0/24 网段,容器使用 192.168.2.0/24 网段。
MTU配置:Macvlan 的数据包不需要额外的封装开销,所以 MTU 设置相对简单。但需注意,如果物理网络的 MTU 不是标准值 1500,需要相应调整容器网卡的 MTU。
宿主机通信配置:如前所述,Macvlan 容器与宿主机通信需要额外配置。建议在宿主机上创建一个专用的 macvlan 辅助接口,并将宿主机需要与容器通信的 IP 地址绑定到该接口上。
监控与告警:由于 Macvlan 直接使用物理网络,需要确保交换机上的 MAC 地址表有足够的容量,建议监控交换机端口的 MAC 地址学习数量。

7.3 常见问题与排查

问题一:容器无法访问外网。排查步骤包括:检查物理网卡的混杂模式是否启用;检查子网和网关配置是否正确;检查物理网络的路由配置,确保容器网段被正确路由。
问题二:宿主机无法 ping 通容器。这是前文讨论的经典问题。解决方案是创建 macvlan 辅助接口,并通过路由策略指定容器 IP 的出接口。
问题三:部分容器之间无法通信。如果是 Bridge 模式,检查虚拟网桥是否正常工作;如果是 Private 模式,确认该模式就是预期的行为;检查是否有 ACL 或安全组规则阻止了通信。
问题四:交换机报 MAC 地址超限。这是大规模部署时常见的问题。解决方案包括:使用 IPvlan 替代 Macvlan 减少 MAC 地址数量;增加交换机的 MAC 地址表容量;将容器分散到多个宿主机上,减少单个交换机端口下的MAC数量。

八、总结

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 11:05:13 HTTP/2.0 GET : https://f.mffb.com.cn/a/465383.html
  2. 运行时间 : 0.089444s [ 吞吐率:11.18req/s ] 内存消耗:4,799.20kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=e21d9a8582600a574ed6f8d3a038ac5d
  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.000546s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000757s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000571s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000572s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000475s ]
  6. SELECT * FROM `set` [ RunTime:0.000190s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000544s ]
  8. SELECT * FROM `article` WHERE `id` = 465383 LIMIT 1 [ RunTime:0.000738s ]
  9. UPDATE `article` SET `lasttime` = 1770519913 WHERE `id` = 465383 [ RunTime:0.003300s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000225s ]
  11. SELECT * FROM `article` WHERE `id` < 465383 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000405s ]
  12. SELECT * FROM `article` WHERE `id` > 465383 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001121s ]
  13. SELECT * FROM `article` WHERE `id` < 465383 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000744s ]
  14. SELECT * FROM `article` WHERE `id` < 465383 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.009710s ]
  15. SELECT * FROM `article` WHERE `id` < 465383 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004173s ]
0.091017s