这篇文章写给一类很具体的读者:手上有合规流量审计、内部资产梳理、或者安全运营(SecOps)需求的企业 IT 团队,准备自己搭一台旁路观测服务器,跑 Zeek 这套开源网络流量分析框架。场景通常是这样的:办公网出口或者核心交换机上拉一路镜像流量到一台独立服务器,让它安静地看,把连接、域名查询、HTTP 请求、TLS 握手这些行为记成结构化日志,留上一段时间,出事的时候能回溯,没事的时候能画资产画像。买这台机器最容易买错的地方在于,绝大多数人会把预算压在 CPU 主频和核心数上,上线两周后发现真正撑不住的是磁盘写带宽和留存容量,而内核层已经在悄悄丢包了。
理解 Zeek 的选型逻辑,得先理解它的站位。Zeek 是一个被动观测框架,它挂在链路旁边看,不串在转发路径里,不做丢弃,不做重置,也不做转发决策。它从网卡抓到报文,按层次做协议解析,把解析结果写成一行一行的结构化日志:conn.log 记每一条连接,dns.log 记每一次域名查询,http.log 记每一个 HTTP 请求,ssl.log 记每一次 TLS 握手,files.log 记在网络上流动过的文件。这套日志的价值建立在"完整性"三个字上——日志不完整,后面的审计、取证、回溯、画像是建立在一个有洞的事实基础上,会比没有日志更麻烦,因为你不知道洞在哪里。
这里有个很硬的推论:一个报文如果在进网卡那一刻没有进来,后面所有环节都无从谈起。缺失会让 conn.log 里的 missed_bytes 字段增长,会让一条本该完整的会话缺了尾部状态,会让 files.log 里某个文件的哈希值因为少了一块而对不上。这种损失不可逆,事后补不回来。所以在这类服务器上,第一位的性能指标不是平均负载、不是主频、不是跑分,而是"丢了多少"。判定丢包要看三个地方,这三处必须一起看:网卡自身寄存器里的接收侧丢弃计数,内核到用户态那一层的环形缓冲覆盖计数,以及 Zeek 自己输出的统计日志里报告的处理不及时计数。三个数对齐了才能定位,只看一个容易得出反向结论。
一个报文要走到 Zeek 手里,路上大致有这些环节:网线上的电信号进到网卡,网卡通过 DMA 把帧写进按队列组织的接收环形区,驱动触发中断,内核的 NAPI 机制开始轮询收包,然后才轮到 Zeek 使用的抓包机制(Linux 上常见的 AF_PACKET,或者需要额外驱动的 PF_RING 一类)从它自己那一圈内存里把包取走。AF_PACKET 的这一圈内存大小是固定的,可以理解成一个有容量的循环队列:新的往里写,Zeek 往外读,谁慢了谁吃亏。
于是第一现场通常不是 CPU,而是"内核到用户态的拷贝"。典型症状是这样的:整机 CPU 使用率只有四成左右,没有任何一个核跑满,但丢包计数在持续上涨。原因往往是 Zeek 进程被某件事耽误了几毫秒——一次 fsync、一次相邻进程的 CPU 争抢、一次内存回收、一次因为在 NUMA 远端节点上取数据而拉长的访存延迟——这几毫秒里链路上的小包已经把环形缓冲填满并覆盖了旧数据。在这个位置加 CPU 主频几乎没有帮助,因为瓶颈不在计算量,而在"取走得不够快、不够稳定"。
常规处置是两件事。第一件是把负载摊开:多队列网卡加多个 worker 进程(或线程),每个 worker 处理一路队列。这里的关键点是分流必须对称——同一条 TCP 连接的请求方向和响应方向,必须落到同一个 worker 上,否则两边的状态机各持一半,拼不出完整会话,conn.log 会残缺,TCP 重传和乱序相关的字段也会失真。常见的硬件 RSS 哈希对同一条流的两个方向算出的值不一定相同,相比之下用 Zeek 自带的对称哈希分流机制更稳妥,或者在交换机侧做保证双向对称的分流。第二件是把 AF_PACKET 的环形缓冲调大,以及在网卡驱动层把接收描述符 ring 的条目数调到上限。但必须说清楚:缓冲只是一张延时牌,它能换来的只是毫秒级的喘息,用来吸收瞬时抖动可以,追不上稳态过载。
还有一个必做项经常被漏掉:关掉网卡的接收合并类卸载,也就是 GRO 和 LRO。这些特性的本意是把多个小帧合并成一个大包交给上层,减少中断次数,服务器做文件传输时很有用。但它会让 Zeek 看到的包长、报文边界与实际线路上传输的不一致,字节数、分片、重传这些字段的记录就失真了,后面基于这些字段做的统计和取证价值大幅下降。同理,某些环境还建议一并处理 TSO/GSO 带来的副作用,并以 RedHat 系的 ethtool -K 指令为准核实实际生效状态。
把"这台链路是多少带宽"当成唯一的规划输入,是这类项目里最常见的误判起点。带宽和包速率是两个独立维度。同样标称 10 Gbps 的链路,如果跑的是接近 1518 字节的大帧,线速大约是 81 万 PPS;如果跑的是 64 字节的最小帧,理论上线速可以推到 1488 万 PPS。同样一句"我们这里有 10G",后者需要消耗的 CPU 是前者的十几倍。真实网络的平均帧长大多落在中间,大约在 700 到 900 字节这个区间(预估),但决定压力的从来不是平均值,而是尾部的分布。域名查询、网络时间协议、某些语音信令、大量物联网设备的心跳探活,都能把小帧占比推得很高。
所以在下配置之前,应该拿到的三个数是:链路峰值 PPS、平均帧长、以及小于 128 字节的小帧占比。前两个数在多数交换机的管理界面上有六十秒峰值可以直接读,帧长分布则可以在镜像口上做一次短时取样抓包统计得到。判定规则也很简单:如果小帧占比超过三分之一,规划单位就要换成 PPS 而不是 Mbps;如果 1400 字节以上的大帧占多数,才适合按带宽估算。
Zeek 单个 worker 的处理能力没有放之四海而皆准的数字,它强依赖于开了哪些分析器、有没有别的进程抢占同一个插槽上的物理核、以及内存访问是否跨 NUMA 节点。工程上可以先用一个很粗的初值做预算:一个物理核配一个 worker,每个 worker 承担 20 万到 40 万 PPS(预估),上线后再用实际的丢包计数做回归修正。这个初值区间宽得可以,但它的作用是把"要不要买双路"这个问题拉回到有依据的讨论里,而不是凭感觉。同样重要的是,多核机器要把 worker 与网卡队列的中断在多 socket 环境下对齐到同一个 NUMA 节点,跨节点取包会凭空吃掉相当一部分收益。
Zeek 不是把包存下来再慢慢解析,它在处理路径上做动态协议检测:按端口和特征判断一条流属于什么协议,一旦判定成立,就在这条流上挂载对应的分析器。此后这条流上的每个报文,都要多走一层解析、多一次内存拷贝、多一些哈希查找和字符串处理。有多少协议,就有多少潜在的附加成本。
麻烦在于,默认配置倾向于把分析器都开着。如果你真正要的只是"资产与连接画像",那 http.log 里的 URI、referrer、user-agent 这些字段大部分用不上,但它们的处理成本已经付过了。显性成本是 CPU,隐性成本还有磁盘,因为每一条 HTTP 请求都会多产生一行几百到上千字节的日志。
这里的取舍很清楚:链路速率不高的时候,全开无所谓;一旦到了中高速链路,就应该显式关掉用不上的东西。只做资产发现的场景,保留连接、域名、设备地址分配这几类往往就够了;明确用不到的协议分析器,应该在本地策略脚本里显式禁用。反过来也有个反直觉的判断——全关不一定更快,动态检测本身也有成本,关掉之后你将失去这批数据的再生产能力,日后想补回来只能重新部署并重跑,而历史流量已经不在了。
还有一类开销容易被忽略:任何在处理路径上同步执行的外部查询,都会直接抬高丢包风险。常见的例子是地理库查询和反向域名解析。它们的延迟不是微秒级而是毫秒级,夹在抓包线程里等于把环形缓冲的喘息时间让了出去。正确做法是把这类富化动作放到日志落盘之后再异步做,让抓包路径上只剩纯粹的解析。
这是全篇最关键的一条结论,也是成本规划的地基。conn.log 是一条连接一行记录;不管这条连接最终传了 1 KB 还是 10 GB,行数都是一。dns.log 是一次查询一行,http.log 是一个请求一行,ssl.log 是一次握手一行。也就是说,日志的字节量约等于"各类记录的条数乘以该类记录的单行平均长度",和它总共传输了多少 GB 数据基本无关。
这就解释了一个高频困惑:企业网出口白天峰值才两三百兆带宽,为什么日志一天能写几十个 GB。答案通常是短连接密度和查询密度——大量的域名查询、应用层的轮询请求、每几秒重连一次的客户端代码缺陷。这类环境里,DNS 日志时常比连接日志更大,因为它既便宜(单行短)又密集。另一个隐形放大器是重连:一个每 5 秒重连一次的客户端,一天能造出近一万七千行记录,而它占用的带宽可能只有几十兆字节。这种情况下修应用层的连接池,比多买一块盘便宜得多。
单行长度的参考区间是这样的(预估,取决于你实际启用了哪些字段):conn.log 约 500 到 700 字节,dns.log 约 200 到 350 字节,http.log 约 500 到 1200 字节,ssl.log 约 700 到 1000 字节。这些数字不建议直接拿来规划,正确做法是拿你自己链路上一天的真实数据做除法:当天某类日志的总字节数,除以当天该类记录的行数。这个比值才是属于你的那一个数。
把上面那套算术落成实例。假设一个中型园区的办公网出口拿到了这样一组日增量(预估,用于演示口径):每天新增连接记录约 4000 万行,按 600 字节一行算约 24 GB;域名查询约 8000 万行,按 260 字节算约 20.8 GB;HTTP 请求约 1200 万行,按 700 字节算约 8.4 GB;TLS 握手约 600 万行,按 800 字节算约 4.8 GB;其余文件、异常、地址分配等日志合起来约 3 GB。加总在 61 GB 每天这个量级,是未压缩的原始文本。
Zeek 的日志是文本行式、制表符分隔的,字段重复度高,压缩比相当可观,经验值大约在 8 比 1 到 12 比 1 之间(预估,且建议按你自己实际的压缩前后目录占用比值重新校准)。照这个区间折算,压缩后大约在每天 5 到 8 GB。于是留存的容量账就出来了:留 7 天大约是 35 到 55 GB,留 30 天大约是 150 到 230 GB,留 180 天会到 0.9 到 1.4 TB。七天到三十天并不是多出三周的零头,而是多出四倍多的空间。
结论是,采购这台机器之前,必须先把保留策略写成文档,在三件事上写死:保留多久、保留的是原始文本还是压缩副本、是否可以分层(比如某些低频查询的日志类型只留七天,而连接和域名这类核心日志留更久)。没有这份文档,加多少盘都是心里没底的猜测。常见的务实分层是在本机 NVMe 上放七到十四天原始文本保证查询速度,然后把压缩副本按日期导到廉价的大容量存储或对象存储里放半年到一年。
| 链路特征 | CPU 关注点 | 抓包与缓冲配置 | 日志量与留存 | 备注 |
|---|---|---|---|---|
| 分支机构小汇聚,峰值 100 Mbps,大帧为主 | 单 worker 足够,主频无需追高 | 单口镜像,AF_PACKET 默认缓冲即可 | 日增量在个位数 GB 量级(预估) | 一台机器全包可行 |
| 办公网出口,峰值 300 Mbps,短连接与域名查询密集 | 看短连接速率而非带宽,双核以上即可 | 建议两个 worker 分流,先关闭接收侧合并卸载 | dns.log 常大于 conn.log,先实测一天再定盘 | 按 PPS 估算,不按带宽估算 |
| 生产网服务器区,峰值 1 Gbps,混合帧长 | 四核以上,队列中断与 worker 需绑核 | 多队列加对称哈希,环形缓冲适度调大 | 单机承载的上限档,日志卷应独立 | 超过此档建议拆分 |
| 物联网与工控网旁路,带宽极低但心跳小包密集 | 小帧占比决定成本,核数重于主频 | 按 PPS 规划 worker 数,缓冲必须调大 | 连接数极多但字节数极少,日志密度高 | 最容易被带宽口径误导的一类 |
| 核心汇聚口,峰值 2 到 4 Gbps,小帧占比高 | 包速率成为主食,需多核分摊 | 必须多 worker 多队列,并考虑万兆接口 | 日增量可能到几十 GB(预估),磁盘需 NVMe | 先上万兆口,再加 CPU |
| 数据中心上联或分区边界,峰值 10 Gbps 以上 | 单机性价比急剧下降 | 多台传感器配合分流,或改为采样 | 全量留存单机基本不可行,需后端集群 | 仅在合规要求明确时才做全量 |
磁盘才是这台机器的成本中心。日志在这里汇集,N 个 worker 各写各的日志文件,某些部署形态下 worker 与 worker 之间通过消息队列把日志汇聚到独立的 logger 节点再落盘。无论哪种形态,落到文件系统上的写入都不是单一的串行流,而是多路并行的追加写。
机械盘对这件事非常敏感。一块 7200 转的企业级盘做纯追加的顺序写,稳定跑到一百多到两百兆字节每秒是可以的;但一旦有四五路写入同时在推进,磁头要在多个文件的多个柱面之间来回寻道,实际有效吞吐跌到十几兆字节每秒都不稀奇(预估,取决于具体盘型与阵列配置)。Zeek 的写入特点是持续、均匀、永不停歇,这种负载最能放大机械盘的随机写劣势。SSD 和 NVMe 没有物理磁头,随机写与顺序写的差距被抹平,这才是它们在 Zeek 场景里真正被需要的原因——不是为了"更快",而是为了"不会因为写入模式退化而垮掉"。
但上 NVMe 也有两个要算的账。一是写寿命,用 TBW 或者 DWPD 这个每天整盘写入次数的指标对照估算出来的年写入量,判断这个寿命是否够用;日志场景是典型的写密集,加上压缩归档每周或每天要把全部数据再读一遍,写入放大不可忽略。二是不要把日志写到网络文件系统上。这个便宜省钱的动作有个致命后果:远端一次抖动或者一次存储侧维护,会让所有 worker 卡在写日志这一步;而写阻塞与抓包不同,它没有环形缓冲这种可以丢弃的缓冲层,压力会一路传导回去作用在抓包线程上,丢包立刻就来。所以这台机器上的介质优先级应当排成:本地 NVMe 优于本地 SATA SSD,本地 SSD 优于本地机械盘阵列,机械盘阵列优于任何网络挂载存储。
此外还有一条容易忽略的部署纪律:日志卷要与 Zeek 的临时目录、归档中转目录分在不同的文件系统上。归档时要先把日志压缩一遍,这个动作会临时占用空间;如果和正在写的日志卷共用同一个分区,很容易在夜里有那么一刻因为分区写满而让整个采集停摆。
files.log 的日志本身不占地方,它记的是元数据:文件类型、来源去向、大小、哈希值,以及一个表示是否被还原落盘的标记。真正吃磁盘的是那个被还原出来的文件实体。
Zeek 的文件提取模块有默认的单文件大小上限,超过上限的部分就不再落盘,这个默认值通常在一百多 KB 这个量级(具体数值请对照你所用版本的提取脚本)。在默认状态下,文件还原消耗的磁盘是可控的。问题出在为了取证需要把这个上限抬高或者直接取消上限的那一刻——一旦放开,磁盘消耗会往上跳一个甚至两个数量级,增长曲线和你的预估模型完全不同:它取决于那一天有哪些用户在传多大的文件,而这完全不在你的控制之内。
处置办法有三条。第一条是还原目录必须放在独立的逻辑分区上,并且要把 inode 使用率也纳入监控,海量小文件比几个大文件更早让你措手不及。第二条是给这个目录配自动老化和水位限制,比如超过十四天自动删除,或者分区占用到八成以上就暂停提取。第三条是范围收窄:在多数企业合规审计场景里,只有满足特定条件的连接才需要留存文件实体,可以按协议、按方向、按大小、按网段把范围框住。最后必须提醒一句,涉及终端内容与个人数据的留存,属于隐私影响评估的范畴,动手之前先让法务与合规角色确认边界,这是技术之外的前置条件。
Zeek 的日志框架默认按固定间隔轮转,这个默认值是一小时;轮出来的文件交给归档后处理器,默认动作是压缩并按日期放进子目录。压缩是整个日志生命周期里最划算的一步操作,原始文本压缩后通常能降到原来的十分之一上下(预估)。但这套机制与日志采集器放在一起时会产生冲突。
冲突的根源在于归档是"搬走加压缩",而不是"原地替换"。采集器如果正在按 inode 追尾读某个刚被轮出来的文件,而归档进程把它改名并压缩了,读的位置就没了;反过来,如果归档还没落稳,采集器就去遍历新目录,可能读到一批不完整的文件尾部。表现形式通常是日志后端漏了几分钟到一小时的記錄,而这种缺口很难在当天被发现。
解决思路是让两个动作错峰。第一种做法是时间窗错开:轮转对齐到整点,采集器避开整点前后十分钟读新文件。第二种做法更可靠,是把流程改成三段式:轮出的文件先放进中转目录,采集器读完打一个标记文件,归档程序只扫描带标记的文件,有标记的才压缩移走。两边就永远不会抢同一个对象。
压缩动作本身的调度也要挑的时候。一批上百 GB 的夜间归档如果跟第二天早高峰的写入抢 IO,会直接把白天的丢包计数推上去。用 nice 和 ionice 把归档进程的 CPU 与 IO 优先级压低,并且确认归档窗口不会和业务高写入窗口重叠。另一个常见的替代方案是把日志直发 Elasticsearch、ClickHouse 或 Loki 这类后端;这条路可行,前提是要给直发失败留足本地缓冲,否则一次后端维护窗口会让日志静默丢掉,而这个缺口往往要到审计那天才被发现。
conn.log 的第一列时间戳是带六位小数的 epoch 时间,看起来精度到了微秒。但那个精度只是"相对精度"——它记录的时刻是否落在绝对时间轴的正确位置上,完全取决于抓包那一瞬间系统时钟准不准。
单传感器部署时这个问题的影响有限,多传感器部署时它是致命的。典型布局是办公网一台、生产网一台、隔离区一台,要回答"某台内网主机先后和谁建立了连接、有没有横向移动",必须把三台机器上的日志按时间戳拼起来。三台机器的系统时钟差几百毫秒,按时间排序的先后顺序就开始出错;差到几秒,关联分析直接失效,而这种失效没有任何报错,只会给你一个看起来合理但错误的结论。
处置办法不复杂但需要被当作上线前的强制项:所有传感器指向同一组网络时间源;把时钟偏移放进日常监控并设阈值告警;虚拟化部署尤其要小心,虚拟机的时钟漂移比物理机明显,必要时要在宿主机层面校准。这里还有一个容易被忽略的点:Zeek 自带的时间协议分析器可以根据观测到的时间报文更新自己认定的网络时间,这不应当替代操作系统级的时钟同步,两者要同时保证。
时区建议统一到世界协调时。传感器系统时区设为 UTC,日志时间戳也是 UTC,展示层再按使用者所在时区转换。这样做的好处在跨地域部署时非常明显:多个分支机构各自处于不同时区甚至部分区域有夏令时,如果各自用本地时间落地日志文件,合并分析时每年会有两次混乱。
把前面的分析收敛成一份可以直接对照的取舍清单。单台机器全包可行的边界大致是(预估):链路稳态不超过 1 Gbps,峰值包速率落在单个 worker 的处理能力之内(按前面给的 20 万到 40 万 PPS 每 worker 的粗算口径),峰值并发会话在几十万量级,只需要保留七天以内的原始文本日志,不需要长期留存文件实体。在这个边界内,一台带本地 NVMe 的多核机器就够用,钱应该花在盘和网卡上。
必须把抓包与日志存储分开的信号有四个:第一,已经需要开多个 worker 才能不丢包,说明这台机器的处理能力接近上限了;第二,留存要求超过三十天并且要求在线可查;第三,开了文件提取;第四,不止一路镜像流量要汇聚到同一处。分开的做法是让抓包节点本地只保留四十八到七十二小时的缓冲,日志以异步批量方式推到后端存储集群,这样前端扩容传感器不必动后端,后端扩容量也不必碰传感器。
什么时候该上万兆网卡而不是加 CPU,判断依据只有一条:去看丢包计数发生在哪一层。如果丢发生在链路或网卡接收侧,而 CPU 还有余量,那么加核没有意义,要改的是网卡队列数、环形缓冲大小,或者直接换一个接口速率更高的端口。反过来,如果 CPU 持续在高位而收发两端都不丢,加核才是对的。
什么时候先关分析器,答案是"日志没有被查询的那一类直接关"。这看着像废话,实际是最省钱的一步优化,它同时削减了 CPU 成本和磁盘成本。动手前先把"哪些字段会被谁用什么样的查询用到"列成一张表,反向推导需要启用哪些分析器。什么时候只需要采样:如果目标只是长期的流量构成画像、容量趋势预测、异常的大致判定,那么"大概什么协议、流向哪里、占比多少"这种粒度的采样数据,在成本和合规压力上都比全量友好得多,流级数据也比包级数据便宜得多。只有当需求明确落到"某次事件要回溯到具体的连接记录和具体字节"时,才值得为全量付这笔账。
最后一条建议:不要凭纸面推算直接下单。先用一台临时机器在目标镜像口上跑两周,把包速率曲线、日志日增量、丢包计数这三张图拿到手,再决定这块盘多大、这个核数够不够、要不要拆成两台。这两周的临时投入,通常能省掉后面一次推倒重建。
一万网络深耕 19 年(成立于 2007 年),在面向这类旁路观测场景提供服务器租用方案时,我们核对配置参数的顺序和常规业务服务器不同,是把网卡和磁盘排在 CPU 前面。
第一项要问的是网卡型号与队列数,而不是"有没有万兆口"。同样标称速率的网卡,支持的接收队列数、驱动成熟度、能否在不重启的情况下调整环形缓冲,差别很大。Zeek 这类多 worker 部署直接依赖队列数,队列数不够,核心再多也只能空转。第二项是本地盘的介质形态:是 NVMe 还是 SATA 固态,有没有第二块独立的盘可以专门放日志,盘的耐久指标是多少。这两项决定了这台机器的留存能力上限。第三项是合法性相关的事:如果你的抓取链路需要机房侧配合做镜像或分光接入,这需要单独确认是否提供以及怎么计费,需询价;如果你的方案依赖安装自有的抓包内核模块,要先确认所选产品形态是否允许加载第三方内核模块,部分虚拟化类产品对此有明确限制。
价格方面,这类带大容量本地固态盘和较高队列数网卡的机型,公开渠道差异较大,以实时报价为准;多数需要按具体的 CPU、内存、盘型与端口组合单独核价,需询价。带宽与流量额度是否包含在月付内、超出部分如何计费,同样以所选机型的官方页面实时标示为准,不要依据第三方汇总页面下判断。
选型上的务实建议是:先上"中配 CPU 加较大的本地盘",跑两周拿到真实数据再决定是否横向扩传感器。因为在这类负载上,成本中心在盘和网卡上,把预算提前压给高主频 CPU 是典型的错配。如果最终确认需要多台传感器,注意每台机器的时钟要指向同一组时间源,日志回传建议走压缩后的异步批量而不是实时同步,这样对出网带宽的压力会小很多,具体可用额度以所选机型页面标示为准。
本文描述的 Zeek 行为,来源均为可在本地安装环境中直接核对的公开材料:首先是 Zeek 官方文档与随发行包附带的默认脚本,具体是安装目录下框架脚本里的协议定义脚本与日志框架脚本,从中可以核对各类日志文件名、默认输出字段名、日志轮转间隔与归档后处理器的默认值、以及动态协议检测的存在形式。请以你实际部署的版本为准逐条对照,不同版本在这些默认值上存在过调整。
其次是可自行复取的运行时数据,用于验证文中所有带"预估"标签的数字。单行平均字节数,用当日某类日志的字节总量除以该类记录行数;日增量,取连续三天的目录占用增量做平均后乘以目标留存天数;压缩比,取归档前后同一批作业的目录占用比值;单 worker 的包处理能力,用峰值时段的实际包速率除以当时启用的 worker 数,并以丢包计数是否归零作为合格判据。丢包定位需要同时读取三处计数:网卡驱动层报告的接收侧丢弃、操作系统内核网络栈的软中断与环形缓冲相关统计、以及 Zeek 自身统计日志中报告的处理不及时计数。时钟相关的核对项,是时间同步服务输出的当前时钟偏移量。
关于硬件价格与可用性,一万网络提供的机型参数,包括网卡型号与队列数、磁盘介质与容量、内存上限、是否提供镜像或分光接入、是否允许加载第三方内核模块,全部以官网实时页面显示为准。本文未给出任何具体金额,相关报价公开渠道差异较大,以实时报价为准,需询价。本文对数值类的一切推算均已标注为预估,请务必用你链路上的实测数据替换后再用于采购决策。
Copyright © 2013-2020 idc10000.net. All Rights Reserved. 一万网络 科技有限公司 版权所有 深圳市科技有限公司 粤ICP备07026347号
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品