当前位置:首页>java>Linux Socket编程深度解剖

Linux Socket编程深度解剖

  • 2026-02-03 20:18:14
Linux Socket编程深度解剖

Linux Socket编程深度解剖

一、Socket编程的哲学: 通信的抽象化

1.1 设计思想的核心: 一切皆文件

Linux秉承“一切皆文件”的哲学, Socket也不例外. 这种设计带来了一致性——你可以使用read()、write()等标准文件操作来处理网络数据, 就像处理本地文件一样

// Socket被抽象为文件描述符int sockfd = socket(AF_INET, SOCK_STREAM, 0);// 之后可以像操作文件一样操作socketwrite(sockfd, buffer, strlen(buffer));read(sockfd, buffer, sizeof(buffer));

1.2 分层架构: 网络通信的“洋葱模型”

┌─────────────────────────────────────┐│        应用程序层 (Application)      │├─────────────────────────────────────┤│      Socket抽象层 (API接口)         │├─────────────────────────────────────┤│  传输层 (TCP/UDP/其他传输协议)      │├─────────────────────────────────────┤│     网络层 (IP/路由/转发)           │├─────────────────────────────────────┤│  链路层 (以太网/WiFi/其他链路)      │├─────────────────────────────────────┤│     物理层 (电缆/无线电波)          │└─────────────────────────────────────┘

每一层只关心与相邻层的接口, 这种隔离性让协议栈的演进和替换成为可能

二、Socket核心数据结构解剖

2.1 三层核心数据结构关系

2.2 struct socket: Socket的“身份证明”

// 简化的socket结构(基于Linux 5.x内核)struct socket {    socket_state            state;          // 状态: SS_CONNECTED等    unsigned long           flags;          // 标志位    conststruct proto_ops  *ops;           // 协议操作函数集struct file             *file;          // 关联的文件结构struct sock             *sk;            // 指向实际的sock结构struct socket_wq        wq;             // 等待队列};// Socket状态枚举typedefenum {    SS_FREE = 0,            // 未分配    SS_UNCONNECTED,         // 未连接(UDP或TCP监听前)    SS_CONNECTING,          // 连接建立中    SS_CONNECTED,           // 已连接    SS_DISCONNECTING        // 断开连接中} socket_state;

可以把struct socket想象成酒店的“前台接待处”——它不处理具体的业务, 但知道该把客户(数据)引导到哪个部门(协议处理)

2.3 struct sock: 协议的“工作车间”

// 简化的sock结构(包含关键字段)struct sock {    // 网络层标识    unsigned short          sk_family;      // 地址族: AF_INET等union {struct inet_sock    *inet;struct ipv6_sock    *ipv6;        // 其他协议族    } sk_pinfo;    // 队列管理struct sk_buff_head    sk_receive_queue;   // 接收队列struct sk_buff_head    sk_write_queue;     // 发送队列struct sk_buff_head    sk_error_queue;     // 错误队列    // 协议操作struct proto           *sk_prot;           // 传输层协议操作    void                   (*sk_state_change)(struct sock *sk);    void                   (*sk_data_ready)(struct sock *sk);    void                   (*sk_write_space)(struct sock *sk);    // 状态和标志    volatile unsigned char sk_state;           // TCP状态    unsigned int           sk_shutdown : 2;    // 关闭标志    unsigned long          sk_flags;           // 标志位    // 定时器struct timer_list      sk_timer;           // 各种定时器    // 引用计数    refcount_t             sk_refcnt;          // 引用计数};

struct sock就像是酒店的“后厨”, 真正处理食材(数据)的地方, 有专门的厨师(协议处理函数), 有备菜区(缓冲区), 还有传菜窗口(队列)

2.4 sk_buff: 数据的“集装箱”

// 简化的sk_buff结构struct sk_buff {    // 双向链表struct sk_buff        *next;struct sk_buff        *prev;    // 数据区管理    unsigned char         *head;      // 缓冲区的头    unsigned char         *data;      // 实际数据的头    unsigned char         *tail;      // 实际数据的尾    unsigned char         *end;       // 缓冲区的尾    // 元数据    unsigned int          len;        // 数据长度    unsigned int          data_len;   // 分段数据长度    // 网络层信息    __be16                protocol;   // 协议类型    __u32                 priority;   // QoS优先级    // 协议头指针union {struct tcphdr     *th;struct udphdr     *uh;struct icmphdr    *icmph;struct iphdr      *ipiph;        // 其他协议头    } h;    // 设备信息struct net_device     *dev;       // 接收/发送的设备};

sk_buff是网络数据的“标准集装箱”, 无论里面装的是什么货物(TCP段、UDP包、ICMP消息), 都用同样的箱子运输, 只是标签不同

三、Socket工作流程深度解析

3.1 TCP Socket的完整生命周期

3.2 内核中的数据流路径

应用程序 write() 调用         ↓    系统调用入口 (sys_write/sys_sendto)         ↓    sock_write() / sock_sendmsg()         ↓    inet_sendmsg() (传输层入口)         ↓    tcp_sendmsg() (TCP特定处理)         ↓    构建sk_buff, 填入数据         ↓    tcp_transmit_skb() 处理TCP头部         ↓    ip_queue_xmit() 添加IP头部         ↓    dev_queue_xmit() 发送到网络设备         ↓    网卡驱动程序 DMA传输

接收路径正好相反, 数据从网卡驱动开始, 层层解封装, 最终到达应用程序的read()调用

四、核心概念详解与生活类比

4.1 地址族(Address Family): 通信的“语言体系”

地址族常量
数值
描述
生活类比
AF_UNIX/AF_LOCAL
1
本地进程间通信
公司内部电话系统
AF_INET
2
IPv4网络协议
国际电话系统(旧版)
AF_INET6
10
IPv6网络协议
国际电话系统(新版)
AF_NETLINK
16
内核与用户空间通信
管理层专用通信线路
AF_PACKET
17
原始数据包访问
直接操作电话交换机

4.2 Socket类型: 通信的“服务模式”

// 主要Socket类型SOCK_STREAM     // 面向流的TCP Socket - 像电话通话SOCK_DGRAM      // 数据报UDP Socket - 像发送明信片SOCK_RAW        // 原始Socket - 像自己组装信封和邮票SOCK_SEQPACKET  // 有序分组Socket - 像挂号信, 保证顺序和完整

**SOCK_STREAM vs SOCK_DGRAM 详细对比: **

特性
SOCK_STREAM (TCP)
SOCK_DGRAM (UDP)
连接性
面向连接, 需建立/断开连接
无连接, 直接发送
可靠性
可靠传输, 自动重传、校验
最大努力交付, 可能丢失
顺序性
保证数据顺序
不保证顺序
流量控制
有滑动窗口机制
无控制, 可能淹没接收方
拥塞控制
有复杂拥塞避免算法
无控制
数据边界
无边界, 是字节流
保持消息边界
头部开销
20字节+选项
8字节
适用场景
文件传输、Web、邮件
DNS查询、视频流、游戏

4.3 端口号: 公寓楼的“房间号”

想象一栋公寓楼(IP地址), 里面的每个房间(端口号)可以住不同的租户(应用程序):

  • • 0-1023: 知名端口, 像大楼的公共设施(邮局21, 网站80)
  • • 1024-49151: 注册端口, 像预定的商务办公室
  • • 49152-65535: 动态/私有端口, 像临时储物柜

五、实战: 最简单的TCP Echo服务器

5.1 完整示例代码

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#define PORT 8080#define BACKLOG 5#define BUFFER_SIZE 1024int main() {    int server_fd, client_fd;struct sockaddr_in server_addr, client_addr;    socklen_t addr_len = sizeof(client_addr);    char buffer[BUFFER_SIZE];    // 1. 创建Socket - 买一部电话机    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {        perror("socket creation failed");        exit(EXIT_FAILURE);    }    // 设置SO_REUSEADDR避免"Address already in use"    int opt = 1;    setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));    // 2. 绑定地址 - 给电话机分配号码    memset(&server_addr, 0, sizeof(server_addr));    server_addr.sin_family = AF_INET;    server_addr.sin_addr.s_addr = INADDR_ANY;  // 监听所有接口    server_addr.sin_port = htons(PORT);        // 端口号, 转为网络字节序    if (bind(server_fd, (struct sockaddr*)&server_addr,             sizeof(server_addr)) < 0) {        perror("bind failed");        close(server_fd);        exit(EXIT_FAILURE);    }    // 3. 开始监听 - 打开电话铃声等待来电    if (listen(server_fd, BACKLOG) < 0) {        perror("listen failed");        close(server_fd);        exit(EXIT_FAILURE);    }    printf("Echo server listening on port %d\n", PORT);    // 4. 接受连接 - 接听电话    if ((client_fd = accept(server_fd, (struct sockaddr*)&client_addr,                            &addr_len)) < 0) {        perror("accept failed");        close(server_fd);        exit(EXIT_FAILURE);    }    printf("Client connected: %s:%d\n"           inet_ntoa(client_addr.sin_addr),            ntohs(client_addr.sin_port));    // 5. 回声处理 - 对话过程    while (1) {        ssize_t bytes_read = read(client_fd, buffer, BUFFER_SIZE - 1);        if (bytes_read <= 0) {            if (bytes_read == 0) {                printf("Client disconnected\n");            } else {                perror("read error");            }            break;        }        buffer[bytes_read] = '\0';  // 确保字符串结束        printf("Received: %s", buffer);        // 原样发回 - 回声        if (write(client_fd, buffer, bytes_read) != bytes_read) {            perror("write error");            break;        }    }    // 6. 清理 - 挂电话    close(client_fd);    close(server_fd);    return 0;}

5.2 核心函数执行流程图

六、高级主题: 多路复用与并发模型

6.1 I/O多路复用模型对比

模型
工作机制
优点
缺点
适用场景
select
轮询所有fd, 线性扫描
跨平台, 超时精度高
fd数量有限(1024), 效率O(n)
小型并发, 跨平台应用
poll
基于事件链表, 无数量限制
无fd数量限制
仍需遍历所有fd
中等并发
epoll
事件回调, 就绪列表
高效O(1), 支持边缘触发
Linux独有, API稍复杂
高并发服务器
kqueue
类似epoll, 事件通知
FreeBSD高效实现
BSD系特有
BSD系统高并发

6.2 epoll工作模式详解

// epoll的两种触发模式EPOLLLT // 水平触发(默认)- 像门铃, 只要门没开就一直响EPOLLET // 边缘触发 - 像门铃只响一次, 提醒你有人来过// epoll核心API使用示例int epfd = epoll_create1(0);struct epoll_event ev, events[MAX_EVENTS];// 添加socket到epoll监控ev.events = EPOLLIN | EPOLLET;  // 边缘触发读事件ev.data.fd = server_fd;epoll_ctl(epfd, EPOLL_CTL_ADD, server_fd, &ev);// 等待事件int nfds = epoll_wait(epfd, events, MAX_EVENTS, -1);for (int i = 0; i < nfds; i++) {    if (events[i].data.fd == server_fd) {        // 接受新连接        int client_fd = accept(server_fd, ...);        // 设置新socket为非阻塞并加入epoll        set_nonblocking(client_fd);        ev.events = EPOLLIN | EPOLLET | EPOLLONESHOT;        ev.data.fd = client_fd;        epoll_ctl(epfd, EPOLL_CTL_ADD, client_fd, &ev);    } else {        // 处理客户端数据        handle_client(events[i].data.fd);    }}

七、调试与诊断工具集

7.1 网络状态诊断命令

# 查看Socket状态统计netstat -tulpn                    # 查看所有监听端口ss -tan                           # 更快的netstat替代品cat /proc/net/tcp                 # 直接查看内核TCP表# 连接追踪lsof -i :8080                     # 查看谁在使用8080端口tcpdump -i any port 8080 -nn      # 抓取8080端口数据包# 性能分析sar -n TCP,ETCP 1                 # TCP统计信息netstat -s                        # 详细协议统计cat /proc/net/sockstat            # Socket内存使用统计

7.2 内核级调试技术

# 1. 使用strace追踪系统调用strace -f -e trace=network ./server  # 跟踪所有网络相关调用# 2. 使用gdb调试网络程序gdb ./server(gdb) break accept                  # 在accept处设断点(gdb) break tcp_v4_connect          # 内核函数断点(需内核符号)# 3. 使用SystemTap进行动态追踪# 追踪所有TCP连接建立sudo stap -e 'probe kernel.function("tcp_connect") {    printf("TCP connect from %s:%d\n",            ip_ntop($inet_af, &$sk->__sk_common.skc_daddr),           ntohs($sk->__sk_common.skc_dport))}'# 4. 使用perf分析网络性能perf record -e 'net:*' ./server    # 记录网络事件perf report                         # 分析报告

7.3 常见问题诊断矩阵

问题现象
可能原因
诊断命令
解决方案
"Address already in use"
TIME_WAIT状态未释放
ss -tan state time-wait
设置SO_REUSEADDR
连接拒绝
服务未启动/防火墙
telnet 主机 端口iptables -L
启动服务/配置防火墙
连接超时
路由问题/服务繁忙
traceroute 主机ping 主机
检查网络/优化服务
数据截断
缓冲区太小
getsockopt SO_RCVBUF
增大接收缓冲区
高延迟
网络拥塞/CPU瓶颈
sar -n DEV 1top
QoS配置/代码优化

八、Socket编程最佳实践

8.1 错误处理模式

// 良好的错误处理示例int create_server_socket(int port) {    int fd;struct sockaddr_in addr;    if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {        log_error("socket failed: %s", strerror(errno));        return -1;    }    // 设置地址重用    int reuse = 1;    if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,                    &reuse, sizeof(reuse)) < 0) {        log_warn("setsockopt SO_REUSEADDR failed: %s"                 strerror(errno));        // 注意: 这不是致命错误, 继续执行    }    // 设置非阻塞(如果适用)    int flags = fcntl(fd, F_GETFL, 0);    if (flags < 0 || fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0) {        log_error("fcntl nonblock failed: %s", strerror(errno));        close(fd);        return -1;    }    memset(&addr, 0, sizeof(addr));    addr.sin_family = AF_INET;    addr.sin_addr.s_addr = htonl(INADDR_ANY);    addr.sin_port = htons(port);    if (bind(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {        log_error("bind failed: %s", strerror(errno));        close(fd);        return -1;    }    if (listen(fd, SOMAXCONN) < 0) {        log_error("listen failed: %s", strerror(errno));        close(fd);        return -1;    }    return fd;}

8.2 性能优化要点

  1. 1. 缓冲区调优:
int bufsize = 256 * 1024;  // 256KBsetsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsize, sizeof(bufsize));setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &bufsize, sizeof(bufsize));
  1. 2. Nagle算法与TCP_NODELAY:
int nodelay = 1;  // 禁用Nagle算法, 减少延迟setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));
  1. 3. 保活机制:
int keepalive = 1;         // 开启保活int keepidle = 60;         // 60秒后开始探测int keepinterval = 10;     // 探测间隔10秒int keepcount = 5;         // 探测5次setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive));setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle, sizeof(keepidle));setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &keepinterval, sizeof(keepinterval));setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &keepcount, sizeof(keepcount));

九、总结: Socket编程的精髓

通过本文的深度探索, 我们可以总结出Linux Socket编程的几大核心要点:

9.1 核心设计哲学总结

设计原则
具体体现
带来的好处
一切皆文件
Socket使用文件描述符
统一I/O模型, 简化编程
分层抽象
协议栈分层设计
各层独立演进, 易于扩展
生产者-消费者模型
接收/发送队列分离
解耦数据处理, 提高并发性
事件驱动
就绪通知机制
高效利用系统资源

9.2 Socket编程的四个层次理解

1. 应用层视角: Socket是通信端点, 提供send()/recv()等API2. 内核视角: Socket是struct socket+struct sock+文件系统集成3. 协议栈视角: Socket是协议处理的状态机和缓冲区管理器4. 硬件视角: Socket是DMA描述符和中断处理程序的抽象

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 18:31:03 HTTP/2.0 GET : https://f.mffb.com.cn/a/461278.html
  2. 运行时间 : 0.101641s [ 吞吐率:9.84req/s ] 内存消耗:4,678.10kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=8e393997186d47499343979e0025be23
  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.000578s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000620s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000294s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000227s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000452s ]
  6. SELECT * FROM `set` [ RunTime:0.000191s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000503s ]
  8. SELECT * FROM `article` WHERE `id` = 461278 LIMIT 1 [ RunTime:0.000704s ]
  9. UPDATE `article` SET `lasttime` = 1770546663 WHERE `id` = 461278 [ RunTime:0.012559s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000342s ]
  11. SELECT * FROM `article` WHERE `id` < 461278 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003830s ]
  12. SELECT * FROM `article` WHERE `id` > 461278 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.004080s ]
  13. SELECT * FROM `article` WHERE `id` < 461278 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000911s ]
  14. SELECT * FROM `article` WHERE `id` < 461278 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001928s ]
  15. SELECT * FROM `article` WHERE `id` < 461278 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.007095s ]
0.103277s