电子发烧友网 > 嵌入式技术 > > 正文

Linux到底是如何收发网络包的

2021年01月03日 17:49 ? 次阅读

为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标标准化组织制定了开放式系统互联通信参考模型(penSystemInterconnecTIonReferenceModel),也就是OSI网络模型,该模型主要有7层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。

每一层负责的职能都不同,如下:

应用层,负责给应用程序提供统一的接口

表示层,负责把数据转换成兼容另一个系统能识别的格式;

会话层,负责建立、管理和终止表示层实体之间的通信会话;

传输层,负责端到端的数据传输;

网络层,负责数据的路由、转发、分片;

数据链路层,负责数据的封帧和差错检测,以及MAC寻址;

物理层,负责在物理网络中传输数据帧;

由于OSI模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案。事实上,我们比较常见,也比较实用的是四层模型,即TCP/IP网络模型,Linux系统正是按照这套网络模型来实现网络协议栈的。

TCP/IP网络模型共有4层,分别是应用层、传输层、网络层和网络接口层,每一层负责的职能如下:

应用层,负责向用户提供一组应用程序,比如HTTP、DNS、FTP等;

传输层,负责端到端的通信,比如TCP、UDP等;

网络层,负责网络包的封装、分片、路由、转发,比如IP、ICMP等;

网络接口层,负责网络包在物理网络中的传输,比如网络包的封帧、MAC寻址、差错检测,以及通过网卡传输网络帧等;

TCP/IP网络模型相比OSI网络模型简化了不少,也更加易记,它们之间的关系如下图:

不过,我们常说的七层和四层负载均衡,是用OSI网络模型来描述的,七层对应的是应用层,四层对应的是传输层。

Linux网络协议栈我们可以把自己的身体比作应用层中的数据,打底衣服比作传输层中的TCP头,外套比作网络层中IP头,帽子和鞋子分别比作网络接口层的帧头和帧尾。

在冬天这个季节,当我们要从家里出去玩的时候,自然要先穿个打底衣服,再套上保暖外套,最后穿上帽子和鞋子才出门,这个过程就好像我们把TCP协议通信的网络包发出去的时候,会把应用层的数据按照网络协议栈层层封装和处理。

你从下面这张图可以看到,应用层数据在每一层的封装格式。

其中:

传输层,给应用数据前面增加了TCP头;

网络层,给TCP数据包前面增加了IP头;

网络接口层,给IP数据包前后分别增加了帧头和帧尾;

这些新增和头部和尾部,都有各自的作用,也都是按照特定的协议格式填充,这每一层都增加了各自的协议头,那自然网络包的大小就增大了,但物理链路并不能传输任意大小的数据包,所以在以太网中,规定了最大传输单元(MTU)是1500字节,也就是规定了单次传输的最大IP包大小。

当网络包超过MTU的大小,就会在网络层分片,以确保分片后的IP包不会超过MTU大小,如果MTU越小,需要的分包就越多,那么网络吞吐能力就越差,相反的,如果MTU越大,需要的分包就越小,那么网络吞吐能力就越好。

知道了TCP/IP网络模型,以及网络包的封装原理后,那么Linux网络协议栈的样子,你想必猜到了大概,它其实就类似于TCP/IP的四层结构:

从上图的的网络协议栈,你可以看到:

应用程序需要通过系统调用,来跟Socket层进行数据交互;

Socket层的下面就是传输层、网络层和网络接口层;

最下面的一层,则是网卡驱动程序和硬件网卡设备;

Linux接收网络包的流程网卡是计算机里的一个硬件,专门负责接收和发送网络包,当网卡接收到一个网络包后,会通过DMA技术,将网络包放入到RingBuffer,这个是一个环形缓冲区。

那接收到网络包后,应该怎么告诉操作系统这个网络包已经到达了呢?

最简单的一种方式就是触发中断,也就是每当网卡收到一个网络包,就触发一个中断告诉操作系统。

但是,这存在一个问题,在高性能网络场景下,网络包的数量会非常多,那么就会触发非常多的中断,要知道当CPU收到了中断,就会停下手里的事情,而去处理这些网络包,处理完毕后,才会回去继续其他事情,那么频繁地触发中断,则会导致CPU一直没玩没了的处理中断,而导致其他任务可能无法继续前进,从而影响系统的整体效率。

所以为了解决频繁中断带来的性能开销,Linux内核在2.6版本中引入了NAPI机制,它是混合「中断和轮询」的方式来接收网络包,它的核心概念就是不采用中断的方式读取数据,而是首先采用中断唤醒数据接收的服务程序,然后poll的方法来轮询数据。

比如,当有网络包到达时,网卡发起硬件中断,于是会执行网卡硬件中断处理函数,中断处理函数处理完需要「暂时屏蔽中断」,然后唤醒「软中断」来轮询处理数据,直到没有新数据时才恢复中断,这样一次中断处理多个网络包,于是就可以降低网卡中断带来的性能开销。

那软中断是怎么处理网络包的呢?它会从RingBuffer中拷贝数据到内核structsk_buff缓冲区中,从而可以作为一个网络包交给网络协议栈进行逐层处理。

首先,会先进入到网络接口层,在这一层会检查报文的合法性,如果不合法则丢弃,合法则会找出该网络包的上层协议的类型,比如是IPv4,还是IPv6,接着再去掉帧头和帧尾,然后交给网络层。

到了网络层,则取出IP包,判断网络包下一步的走向,比如是交给上层处理还是转发出去。当确认这个网络包要发送给本机后,就会从IP头里看看上一层协议的类型是TCP还是UDP,接着去掉IP头,然后交给传输层。

传输层取出TCP头或UDP头,根据四元组「源IP、源端口、目的IP、目的端口」作为标识,找出对应的Socket,并把数据拷贝到Socket的接收缓冲区。

最后,应用层程序调用Socket接口,从内核的Socket接收缓冲区读取新到来的数据到应用层。

至此,一个网络包的接收过程就已经结束了,你也可以从下图左边部分看到网络包接收的流程,右边部分刚好反过来,它是网络包发送的流程。

Linux发送网络包的流程如上图的有半部分,发送网络包的流程正好和接收流程相反。

首先,应用程序会调用Socket发送数据包的接口,由于这个是系统调用,所以会从用户态陷入到内核态中的Socket层,Socket层会将应用层数据拷贝到Socket发送缓冲区中。

接下来,网络协议栈从Socket发送缓冲区中取出数据包,并按照TCP/IP协议栈从上到下逐层处理。

如果使用的是TCP传输协议发送数据,那么会在传输层增加TCP包头,然后交给网络层,网络层会给数据包增加IP包,然后通过查询路由表确认下一跳的IP,并按照MTU大小进行分片。

分片后的网络包,就会被送到网络接口层,在这里会通过ARP协议获得下一跳的MAC地址,然后增加帧头和帧尾,放到发包队列中。

这一些准备好后,会触发软中断告诉网卡驱动程序,这里有新的网络包需要发送,最后驱动程序通过DMA,从发包队列中读取网络包,将其放入到硬件网卡的队列中,随后物理网卡再将它发送出去。

总结电脑与电脑之间通常都是通话网卡、交换机、路由器等网络设备连接到一起,那由于网络设备的异构性,国际标准化组织定义了一个七层的OSI网络模型,但是这个模型由于比较复杂,实际应用中并没有采用,而是采用了更为简化的TCP/IP模型,Linux网络协议栈就是按照了该模型来实现的。

TCP/IP模型主要分为应用层、传输层、网络层、网络接口层四层,每一层负责的职责都不同,这也是Linux网络协议栈主要构成部分。

当应用程序通过Socket接口发送数据包,数据包会被网络协议栈从上到下进行逐层处理后,才会被送到网卡队列中,随后由网卡将网络包发送出去。

而在接收网络包时,同样也要先经过网络协议栈从下到上的逐层处理,最后才会被送到应用程序。

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

《嵌入式技术 基础课程》之逆向-X86汇编

我们将《嵌入式工程师-系列课程》分成两大阶段:第一阶段:《计算机体系结构》课程   分成4篇:分别是
发烧友学院发表于 2019-01-21 00:00? 1650次阅读
《嵌入式技术 基础课程》之逆向-X86汇编

netstat命令:判断服务器是否遭受DDoS攻...

一般来说,服务器非常慢可能原因是多方面的,有可能是配置错误,脚本错误或者是一些奇诡的硬件。当然也有可....
发表于 2021-01-03 12:18? 43次阅读
netstat命令:判断服务器是否遭受DDoS攻...

Linux内核学习的环境搭建和内核编译

一、linux内核学习之一:环境搭建--安装Debian7.3 本系列文章假设读者已对linux有一....
发表于 2021-01-02 18:01? 83次阅读
Linux内核学习的环境搭建和内核编译

深入探究Linux中的Kprobe机制

概述 kprobe机制用于在内核中动态添加一些探测点,可以满足一些调试需求。本文主要探寻kprobe....
发表于 2021-01-02 11:53? 75次阅读
深入探究Linux中的Kprobe机制

解析RISC-V正面临的挑战

新的处理器指令集架构(ISA)并不会经常出现。加州大学伯克利分校开发的开源RISC-V ISA 已经....
发表于 2021-01-01 10:54? 245次阅读
解析RISC-V正面临的挑战

一文解析嵌入式系统的开发之路

就像任何开发领域一样,嵌入式系统的开发就像大海一样:深海洋流相对上较稳定,而看似平静的海面下却可能暗....
发表于 2021-01-01 10:41? 153次阅读
一文解析嵌入式系统的开发之路

openEuler如何成为IT圈最具影响力的开源...

openEuler 从开源到现在已经要满一周岁了。在一周年之际,openEuler 社区举办了年度技....
发表于 2021-01-01 09:46? 310次阅读
openEuler如何成为IT圈最具影响力的开源...

一文解析Linux x86和ARM的区别

指令的强弱是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。从现阶段的主流体系结构讲,指....
发表于 2021-01-01 09:42? 75次阅读
一文解析Linux x86和ARM的区别

嵌入式开发的现状及未来趋势分析

近年来,随着移动互联网、物联网的迅猛发展,嵌入技术日渐普及,嵌入式应用领域日益亲民,嵌入式产品不断渗....
发表于 2021-01-01 09:32? 117次阅读
嵌入式开发的现状及未来趋势分析

解析嵌入式技术和物联网的发展趋势

2020年伊始,一场突如其来的新冠疫情爆发,让人们生产和生活方式发生了巨大的变化,催生远程办公、智能....
发表于 2021-01-01 09:21? 216次阅读
解析嵌入式技术和物联网的发展趋势

浅析嵌入式Linux学习的八大步骤

嵌入式Linux要学哪些?一些人总在寻思,怕走了弯路,又怕学的东西离企业需求远。那么今天就请华清远见....
发表于 2021-01-01 09:19? 64次阅读
浅析嵌入式Linux学习的八大步骤

ARM发布新款Cortex-R82:首次支持Li...

今天刚说到5个大学生4个月造出RISC-V芯片的事情,那边“敌对阵营”ARM就发布了新款Cortex....
发表于 2021-01-01 09:05? 8次阅读
ARM发布新款Cortex-R82:首次支持Li...

微软Windows拥抱Linux的思考

长久以来,人们一直希望Linux能够取代 Windows 操作系统。尤其是在今年年初,自微软正式宣布....
发表于 2021-01-01 09:04? 133次阅读
微软Windows拥抱Linux的思考

IBM IT基础架构护航的“混合云”之旅

IBM 商业价值研究院的报告显示,大规模采用完整混合多云平台技术和运营模式所创造的价值,要比“单一平....
发表于 2020-12-31 11:58? 430次阅读
IBM IT基础架构护航的“混合云”之旅

Linux内核中I2C子系统的整体视图

本文通过阅读内核代码,来梳理一下I2C子系统的整体视图。在开发I2C设备驱动程序时,往往缺乏对于系统....
发表于 2020-12-31 10:40? 122次阅读
Linux内核中I2C子系统的整体视图

操作系统产业正在迎来历史最好的发展机遇

? 人类社会正进入数字经济时代。数字经济需要强大的信息技术做支撑,软件是信息技术之魂,而操作系统作为....
发表于 2020-12-31 09:15? 397次阅读
操作系统产业正在迎来历史最好的发展机遇

OSI七层模型及TCP/IP五层模型的协议解析

OSI和TCP/IP是很基础但又非常重要的网络基础知识,理解得透彻对运维工程师来说非常有帮助。 ...
发表于 2020-12-31 06:02? 0次阅读
OSI七层模型及TCP/IP五层模型的协议解析

国产操作系统究竟发展几何?

操作系统作为云计算与物联网时代的 IT 底座,历来是兵家必争之地。近期更是风起云涌,先是苹果推出全新....
发表于 2020-12-30 14:09? 471次阅读
国产操作系统究竟发展几何?

Linux如何压缩文件?

在Linux上压缩文件的5种方法
发表于 2020-12-30 08:00? 0次阅读
Linux如何压缩文件?

如何将Linux源码编译生成二进制

驱动工程师一定要掌握 Linux 内核的编译方法,也就是将 Linux 内核源码,编译成针对特定硬件的二进制镜像。 在前面...
发表于 2020-12-30 07:37? 0次阅读
如何将Linux源码编译生成二进制

Linux内核源码目录结构

Linux体系结构 Linux内核结构 Linux内核源码目录结构 ...
发表于 2020-12-30 07:22? 0次阅读
Linux内核源码目录结构

Linux文件系统的类型和常用命令

操作系统的主要功能之一就是文件的管理。文件管理是由文件系统来实现的, 系统支持多种格式的文件系统,本届我们主要讲...
发表于 2020-12-30 06:44? 0次阅读
Linux文件系统的类型和常用命令

Linux内核处理中断的类型及过程

中断是现代 CPU 工作方式中重要的部分。例如:当你每次在键盘上按下一个按键后,CPU 会被中断以使....
发表于 2020-12-29 15:57? 210次阅读
Linux内核处理中断的类型及过程

一台Linux服务器最多能支撑多少个TCP连接?

【导读】:单台 Linux 服务器可以支撑多少个 TCP 连接??关于这个问题,我想很多客户端的同学....
发表于 2020-12-29 11:13? 219次阅读
一台Linux服务器最多能支撑多少个TCP连接?

Linux中的ldconfig命令详解

0615 1.简介 ldconfig 命令用于在默认搜寻目录 /lib 和 /usr/lib 以及动....
发表于 2020-12-29 11:11? 150次阅读
Linux中的ldconfig命令详解

Linux中的ulimit命令详解

1.命令简介 ulimit 属 Shell 内建命令,用于查看或设置 Shell 以及通过 Shel....
发表于 2020-12-29 11:08? 199次阅读
Linux中的ulimit命令详解

Linux中的size命令详解

1.命令简介 size 用于查看目标文件、库或可执行文件中各段及其总和的大小,是 GNU 二进制工具....
发表于 2020-12-29 11:05? 108次阅读
Linux中的size命令详解

红帽解释宣布CentOS Linux的淘汰

红帽公司的高级社区架构师、CentOS董事会成员卡斯滕-韦德(Karsten Wade)为扼杀Cen....
发表于 2020-12-29 11:02? 185次阅读
红帽解释宣布CentOS Linux的淘汰

Linux中的uptime命令详解

1.命令简介 uptime 用于显示系统总共运行了多长时间和系统的平均负载。 无选项 uptime ....
发表于 2020-12-29 10:51? 126次阅读
Linux中的uptime命令详解

ARM-Linux开发与MCU开发的优势

ARM-Linux应用开发和单片机开发的不同 ARM-Linux 基本开发环境 ...
发表于 2020-12-29 07:51? 0次阅读
ARM-Linux开发与MCU开发的优势

Linux内核自解压过程

  在前面的章节介绍了uboot和Linux内核的一些相关内容。在来看Linux内核的大致启动流程,Linux内核的启动流程要比...
发表于 2020-12-29 07:35? 0次阅读
Linux内核自解压过程

如何使用Linux内核中的input子系统

输入设备总类繁杂,包括按键,键盘,,鼠标,摇杆等等,它们本身都是字符设备,不过内核为了能将这些设备的共性抽象出...
发表于 2020-12-29 07:20? 0次阅读
如何使用Linux内核中的input子系统

Linux如何修改用户权限

迅为IMX6ULL开发板-Linux用户权限
发表于 2020-12-29 06:18? 0次阅读
Linux如何修改用户权限

Linux下电容触摸屏的编译驱动程序和测试

迅为IMX6ULL开发板Linux下电容触摸屏实验-运行测试...
发表于 2020-12-29 06:00? 0次阅读
Linux下电容触摸屏的编译驱动程序和测试

如何让Python程序参数输入更像Linux命令

? 背景 最近一直训练模型,进行模型调参比较,但是随着模型参数多起来了,想获得不同参数模型结果也越来....
发表于 2020-12-28 14:22? 112次阅读
如何让Python程序参数输入更像Linux命令

TCP/IP协议簇中需要必知必会的十大问题

本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。....
发表于 2020-12-28 09:23? 214次阅读
TCP/IP协议簇中需要必知必会的十大问题

如何使用perf和vtune进行性能分析

应用程序的开发测试过程中,对程序性能进行分析和优化是不可或缺的一部分。
发表于 2020-12-27 09:27? 161次阅读
如何使用perf和vtune进行性能分析

Linux指令的详细整理

本文档的主要内容详细介绍的是Linux指令的详细整理
发表于 2020-12-26 10:58? 207次阅读
Linux指令的详细整理

Linux圈的CentOS所有版本将停止维护

最近在Linux圈,发生了一次大地震,主角就是大家熟知的CentOS。 2019年9月发布的Cent....
发表于 2020-12-26 10:37? 637次阅读
Linux圈的CentOS所有版本将停止维护

如何学习嵌入式Linux

俗话说万事开头难,刚开始的时候,你是否根本就不知如何开始,上网查资料被一堆堆新名词搞的找不到北,去图....
发表于 2020-12-26 10:26? 355次阅读
如何学习嵌入式Linux

Nginx的详细知识点讲解

Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上nginx的并....
发表于 2020-12-26 10:25? 115次阅读
Nginx的详细知识点讲解

如何用eBPF写TCP拥塞控制算法?

其实不想用这个题目的,只因为TCP相关的东西比较吸引人的眼球,这篇文章的主题还是eBPF,而不是TC....
发表于 2020-12-26 09:44? 94次阅读
如何用eBPF写TCP拥塞控制算法?

100个Linux知识点汇总

? 一、Linux 概述 1. 什么是Linux Linux是一套免费使用和自由传播的类Unix操作....
发表于 2020-12-24 16:40? 719次阅读
100个Linux知识点汇总

Linux终端中查看图像的方法

Linux 有很多用于查看图像的 GUI 应用。但我从来没有尝试过用任何命令行应用来查看它。
发表于 2020-12-24 15:14? 177次阅读
Linux终端中查看图像的方法

Linux命令file的案例说明

有人的地方,就有江湖。人往往是最难揣摩的。如果有一面神奇的魔镜能看出一个人的内心,世界会不会变得更加....
发表于 2020-12-24 11:41? 197次阅读
Linux命令file的案例说明

Linux中如何让切换目录更方便?

【导读】在 Linux 下切换目录,你还是只会 cd 这个命令吗? 快来学习下 pushd popd....
发表于 2020-12-24 11:38? 223次阅读
Linux中如何让切换目录更方便?

Linux神优化Zen3:性能高出15%

Intel、AMD相爱相杀50年,现在两家是打得不可开交,然后在某些领域两边可能还是天作之合。对Li....
发表于 2020-12-24 11:32? 318次阅读
Linux神优化Zen3:性能高出15%

一文带你掌握Linux字符设备架构

一、Linux设备分类 Linux系统为了管理方便,将设备分成三种基本类型: 字符设备 块设备 网络....
发表于 2020-12-22 16:14? 263次阅读
一文带你掌握Linux字符设备架构

Linux工程师是怎么步入内核殿堂的?

在全球顶级开源会议KubeCon +CloudNativeCon + Open Source Sum....
发表于 2020-12-22 14:13? 157次阅读
Linux工程师是怎么步入内核殿堂的?

ARINC429通讯模块介绍 16发16收,接口...

奥林普科技研制开发的ARINC429通讯模块,通道数最多同时具有16个发送和16个接收通道。每个通道....
发表于 2020-12-21 16:53? 442次阅读
ARINC429通讯模块介绍 16发16收,接口...

如何禁用Linux机器上的USB存储设备

在现如今,随着互联网科技飞速的发展,为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权....
发表于 2020-12-19 11:15? 328次阅读
如何禁用Linux机器上的USB存储设备

当分布式数据库遇上开放服务器 LinuxONE

分布式架构因为具备成本低、自主研发、灵活兼容和伸缩扩张方面的优势,备受互联网公司和创业公司的青睐,一....
发表于 2020-12-17 17:31? 439次阅读
当分布式数据库遇上开放服务器 LinuxONE

Linux5.11开始围绕PCI Express...

随着开发中的Linux 5.11内核的PCI子系统更新,现在系统已经可以报告设备是否正在使用PCI ....
发表于 2020-12-17 11:48? 285次阅读
Linux5.11开始围绕PCI Express...

基于Ubuntu的Linux Mint20.1“...

今年 10 月,Linux Mint 20.1 宣布被命名为“Ulyssa”,并计划在今年圣诞节期间....
发表于 2020-12-17 10:45? 235次阅读
基于Ubuntu的Linux Mint20.1“...

Mozilla首次为Linux用户提供加速渲染通...

据外媒消息,Mozilla昨天宣布发布Firefox 84更新,其中进行了一些改进。 通过此更新,F....
发表于 2020-12-16 16:14? 343次阅读
Mozilla首次为Linux用户提供加速渲染通...

AWS提供基于WEB的命令行访问途径

亚马逊云服务(AWS)今日正式推出了基于 Amazon Linux 2 的 CloudShell 服....
发表于 2020-12-16 16:12? 261次阅读
AWS提供基于WEB的命令行访问途径

Linux5.11引入Btrfs文件系统的诸多改...

在最新的 Linux 5.11 内核合并窗口中,我们见到了其对于 Btrfs 文件系统的诸多改进和性....
发表于 2020-12-16 14:18? 210次阅读
Linux5.11引入Btrfs文件系统的诸多改...

Linux Kernel5.11将初步支持SD ...

今年年初,SD 协会公布了新的 SD Express 8.0 规范。SD 8.0 基于使用 NVMe....
发表于 2020-12-16 14:11? 207次阅读
Linux Kernel5.11将初步支持SD ...

张先轶博士:为什么RISC-V需要共建软件生态?

软件开发者是芯片公司非常重要的资产,CPU做出来是不够的,要让更多的软件开发者用这颗芯片才是成功。
发表于 2020-12-16 11:09? 638次阅读
张先轶博士:为什么RISC-V需要共建软件生态?

Linux5.11为Modtronix LCD2...

lcd2s是Linux 5.11版本中新增的驱动程序,它支持通过SPI/I2C连接的20x4 LCD....
发表于 2020-12-14 16:41? 223次阅读
Linux5.11为Modtronix LCD2...

Linux 5.10 LTS正式发布,为近期最重...

正如人们所期待的那样,Linus Torvalds今天正式发布了Linux 5.10。除了是2020....
发表于 2020-12-14 15:43? 330次阅读
Linux 5.10 LTS正式发布,为近期最重...

Zigbee网络有什么作用和特点

对于Zigbee网络,大家或多或少有所耳闻。在上篇Zigbee相关文章中,小编对Zigbee网络各层....
发表于 2020-12-12 09:55? 575次阅读
Zigbee网络有什么作用和特点
综合在线 日韩欧美 中文字幕_综合在线 日韩欧美 中文字幕精品视频 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>