0%

软件推荐

根据九净在SDNLAB上的分享, 一个合格的运维工程师需要掌握一定的开发能力。这些工具都不复杂,可以在使用中跟踪学习(本质上是应用层的东西,而应用层的变动常常很频繁,不需要特别学习)。

技能清单

  • Django(把脚本变成服务)
  • 设备交互: netmiko\requests\ncclient\pysnmp
  • 模板解析: RE\jinja2\textfsm
  • 表格处理: pandas
  • 可视化: pyecharts

开源软件:

  • Docker: 快速部署
  • Elk: 网络配置的存储
  • DB: 借助orm
  • NGINX: 部署web应用

技能推荐

可以参考知道创宇技能清单,整体上提供了一个框架性的说明;核心工作能力要随着自己的需求自行变动。

ModernLife

现代城市生活指南: 汇总现代城市生活的技巧、涵盖现代文明的种种成就

衣食

城市中的衣食常常是放在一起的,构成“商业广场”、“商圈”。

TODO: 插入商业广场图片,分析北京、苏州的商圈、小的农贸/服装批发市场等。

住行

居住和出行常常是紧密相关的,大家聚集在城市的核心就在于方便出行,所以常常面对居住和出行之间的矛盾。
人有居住较大空间的欲望,也有方便出行的欲望;然而两个欲望在现实生活中常常会产生冲突。方便出行的地方人员聚集反而导致居住环境稍逊一筹。

TODO: 插入小区的图片,介绍居委会、村委会制度

娱乐

景点

景点主要分为自然景点和人文景点,自然风光就因地而异,人文景点则往往和历史传承相关。
这里的景点是指那种某些城市特有的景点,诸如公园、体育馆之类的共有娱乐场所则不考虑在内。
自然景点主要是:名山大川、特色风光;人文景点主要是:博物馆、名人故居、历史遗迹。这些地方往往可以进行打卡,而且

景点识别

评价景点好坏、或者是挑选景点的一个重要核心在于,查看景点在国家旅游局的评级,所谓的4A

自然景点目录

人文景点目录

文娱

体育

艺术

产业

企业,是现代商业社会的基石;如何深入调查研究企业发展和相关信息,在现代社会是非常重要的基本技能。一般性的投资(尤其是投行和咨询公司)、商品品牌的选择(对于大件商品的购买决策、婴幼儿奶粉等非常重要的商品),了解企业的历史、法律纠纷记录、财务情况等非常重要。但是,很多信息见诸搜索引擎或新闻报道的时候,已经是比较落后推迟了。获得一手信息就显得非常重要。

最好的一手信息来自行业内的人,甚至就是企业的内部人员;当然这些信息往往都是颇费波折才能获取。

还可以使用专业的搜索引擎,如”天眼查”、”企查查”、”见微数据”、”启信宝”等。这些引擎集合了国家企业信用信息公示系统中国裁判文书网中国执行信息公开网国家知识产权局国家知识产权局商标局国家版权局,各创投公司的公告说明,爱分析等资本管理/研究新闻平台,特别值得用来认识企业情况;尤其是在进行大额/重要交易(如租房、大件商品、重要食品之前,通过这些搜索引擎确认公司状况和风险,是非常有必要的)。当然,这种平台的缺点在于,需要付费(会员费也不便宜),可以使用淘宝进行临时查询。

Reference

  1. 知乎: 通过哪些渠道深入查询企业信息
  2. 知乎: 深入查询企业信息

ModSecurity是典型的开源WAF组件, 需要配合Apache HTTP server和Nginx使用, docker镜像可以找到一些link下载, 然后运行

1
2
docker build -t owasp/modsecurity-crs .
docker run -p 80:80 -ti -e PARANOIA=5 --rm owasp/modsecurity-crs

为了测试其性能, 可以安装Apache HTTP server benchmarking tool, 运行命令ab -n 10000 -c 100 (url) 即可。

可以找到ModSecurity的各种配置(屏蔽ip黑名单等配置), 其中重要的是CRS的规则说明。/usr/local/nginx/conf/modsec/rules/*.conf 目录下的 CRS 防御规则文件及相关说明如下所示

规则文件 规则说明
REQUEST-900-EXCLUSION-RULES-BEFORE-CRS 定制化个人防护规则,调整规则防护场景
REQUEST-901-INITIALIZATION CRS 配置初始化
REQUEST-910-IP-REPUTATION IP 信誉库
REQUEST-911-METHOD-ENFORCEMENT HTTP 请求方法检测
REQUEST-912-DOS-PROTECTION 拒绝服务规则
REQUEST-913-SCANNER-DETECTION 扫描器检测
REQUEST-920-PROTOCOL-ENFORCEMENT URL Scheme 协议检测
REQUEST-921-PROTOCOL-ATTACK HTTP 协议攻击检测
REQUEST-930-APPLICATION-ATTACK-LFI LFI 本地文件包含漏洞检测
REQUEST-931-APPLICATION-ATTACK-RFI RFI 远程文件包含检测
REQUEST-932-APPLICATION-ATTACK-RCE RCE 远程命令执行检测
REQUEST-933-APPLICATION-ATTACK-PHP PHP 攻击检测
REQUEST-941-APPLICATION-ATTACK-XSS XSS 攻击检测
REQUEST-942-APPLICATION-ATTACK-SQLI SQL 注入攻击检测
REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION 会话固定攻击检测
REQUEST-949-BLOCKING-EVALUATION 基于风险值检测入站请求
RESPONSE-950-DATA-LEAKAGES 数据泄漏检测
RESPONSE-951-DATA-LEAKAGES-SQL SQL 数据泄漏检测
RESPONSE-952-DATA-LEAKAGES-JAVA JAVA 数据泄漏
RESPONSE-953-DATA-LEAKAGES-PHP PHP 数据泄漏
RESPONSE-954-DATA-LEAKAGES-IIS IIS 数据泄漏
RESPONSE-959-BLOCKING-EVALUATION 基于风险值检测出站请求
RESPONSE-980-CORRELATION 入站、出站风险值关联
RESPONSE-999-EXCLUSION-RULES-AFTER-CRS 定制化个人防护规则,重载、更新、移除检测规则

TODO: Unfinished works

安装

在NS-3的官网上有详细说明如何安装,下面简单说明一下(理论来说用bake或者waf也可以安装,但个人感觉反而更麻烦一些)。

  1. 安装依赖, 主要是gcc; 这里要求版本大于4.9, 而CentOS的默认版本是不够的。可以通过安装devtoolset-8-toolchain并通过shell命令启用scl enable devtoolset-8 bash
  2. 下载release版的ns源码: 使用wget xxx/ns-allinone-3.30.tar.bz2 * 并通过tar xjf*命令实现解压。
  3. 在解压后的ns源码中执行./build.py –enable-examples –enable-tests

架构说明

Reference

  1. NS-3的官网安装说明

读博士是非常珍贵的经历,虽然我目前只经历了1年半的时间,但各项科研技能都得到了一定的锻炼。

1. Research

  • Find the key problem
  • Read and summarize multiple materials
  • Design the procedure to solve a problem
  • Insist on one thing: 目前自己还不能做到这一点,换言之,只有当自己能够public长文之后才能说自己insist on one thing

2. Coding

编程能力还需要很大的提高,是自己未来2年的重点工作,可以通过LeetCode和各项CTF比赛来提高! 目前各项都处于基本入门水平。

  • Coding Style
  • Key Programming Language: C/C++, Python
  • Web Knowledge, PHP, MySQL
  • CTF Knowledge

3. Communication

交流能力经过辅导员岗位的锻炼,得到了很好的提升。未来应该通过实习等方式继续提升。

  • Write common materials
  • Write academic papers
  • Make a good speech
  • Design a good PPT

4. Other Qualities

  • Confidence
  • Optimism
  • Adherence

Changelog

  1. 2020/04/10, 根据自己博二上学期的情况作出总结

TODO: NSM项目尚未能够完全成功运行! 需要通过Snort、ModSecurity等Docker做完善工作。

本文旨在介绍CNCF基金会下的Network Service Mesh的相关情况和使用方法总结。

Docker、Kubernetes、CNCF

Docker,作为轻量级虚拟化–容器的一种解决方案,在开源社区从诞生之初就备受瞩目。Docker能轻到近似二进制文件大小(可以参考裁减镜像),占用极少的资源、同时保证isolation。但是在业务中部署容器却不是一件简单的事情,需要配置物理机和容器之间的交互,同时需要配置好各种监控以保证适时扩容。为了应对容器的这种问题,Kubernetes作为容器的编排工具出现了。Kubernetes是Google将其内部集群管理系统Borg(13年发布Omega)修改后于14年开源。2015年,谷歌和Linux基金会合作建立云原生计算基金会(CNCF),旨在建立可持续的生态系统。Google此举可认为是通过开源打击其他云厂商,既然我商业化进展不顺、通过开源项目来引发混战也是不错的。Kubernetes在Security方面天然有Certificate和PKI、在Scheduling和Scalability天然考虑分布式(谷歌的分布式系统实力还是非常强大的),加上虚拟化的一次开发到处部署,Restful API的现代化前端交互,Kubernetes集合了system设计的各种历史经验,对于云应用来说具有强大的吸引力。

随后,Kubernetes有了软件包管理系统Helm(类似Brew、apt或yum)、Minikube(本地可运行Kubernetes)、Prometheus(metric收集数据库)、OpenTracing(Debug工具)等等从2016年开始逐渐完善起来;到了2017年,Istio(微服务网络)发布,Kubernetes也在亚马逊、微软等开始推出商用,转眼到了2020年,Kubernetes可以说已经是System方向必须掌握的工具了。

目前围绕Kubernetes已有一系列的开源项目,相关信息都可以在CNCF的官网上找到。阿里、华为都有贡献开源项目。

NSM介绍

k8s在网络方面有一个缺陷,就是不能配置L2/L3层的处理;对于应用来说,看到TCP层已经足够了(分布式系统直接就基于RPC设计系统),不需要L2/L3层的东西;k8s的访问安全性是通过Authentication实现的,因此不需要在意流量如何如何。但是如果想把k8s放到公网上,就不得不考虑更多的L2/L3层的网络功能,比如Middlebox(Firewall->DPI->VPN形成的基于安全的考虑设立的SFC),比如电信网的计费网关、QoS功能模块等。但是从纯Zero-Trust的角度,MB似乎是要尽量舍弃的?

Network Service Mesh项目的设立之初就是为了应对这个问题,详细的说明介绍可以参考这个链接。有些重点内容挑出来如下

NSM并没有对Kubernetes的CNI模型进行扩展或者修改,而是采用了一套与CNI完全独立的新机制来以实现这些高级的网络需求。
NSM参考了Kubernetes中Service的概念提出了Network Service。Network Service对外提供的是L2/L3层的网络服务,即对数据包进行处理和转发,而不会终结数据包。
我们可以将NSM和SDN结合使用,可以通过NSM中的Network Service接入SDN提供的强大的网络服务。下图是在NSM中利用SDN为应用提供QoE(Quality of Experience)服务的一个例子。

NSM使用

NSM的直接安装
  1. 安装k8s以及k8s的包管理器helm
  2. 通过helm增加repo和安装
1
2
helm repo add nsm https://helm.nsm.dev/
helm install nsm/nsm
NSM的模拟使用
  1. 下载NSM代码和NSM example(在github中)到同一目录下
  2. 安装example给出的说明, 进行makefile的处理[^footnote-kind]。
  3. 安装

NSM在Github下载后

Reference

  1. 裁减Docker镜像大小
  2. NFV走向云原生时代:Network Service Mesh项目介绍
  3. CNCF网络研讨会:NSM网络服务网格 - 介绍(视频+PDF)
  4. CNCF 云原生容器生态系统概要

[^footnote-kind]: 主要是安装k8s本地模拟器: kind; 关于kind的简单说明可以查看ref

在整理自己以前杂七杂八的东西时, 发现自己之前写过Research method的一些内容, 杂乱在md文件、OneNote、Pocket和Youdao Note中, 这里做一个简单整理(自己的个人知识管理能力确实有待提高, 需要维护changelog和所有文件归档到一起)。

做科研就是在解决问题,是学习用逻辑和科学方法论去解决问题。当然,逻辑或者说理性是不能解决所有问题,宗教信仰自有其存在的必要(这一点也是《战争论》中提到的: 交战绝不仅是双方力量的对比、意志在其中会发挥作用)。但这一套方法不得不说能够解决绝大多数的问题,是优秀世界观的一个重要组成部分。所谓的科学的方法,抽象来说就是大家说的唯物辩证法,我觉得更加实用的是”7W”准则: What, When, Who, Why, Where, How, For Whom。当我们用着7W准则去思考一个问题时, 就会出现如下结果。

对问题的思考

  1. What: 从辩证角度来看,问题是什么。具体来说, 问题的内涵和外延分别是什么。如, 网包分类问题。一般性的定义/内涵可以描述为, “给定一组规则和一个报文, 对该报文找到适配的最高优先级的规则”, 这里的一些关键形容词发生变化后就会对应不同的问题。如: “一个规则”启发我们设计BCAM硬件类型, “一组报文”启发我们去设计新的batch算法, “所有匹配规则”启发我们做遍历算法或对规则进行交集操作, “某一个匹配规则”启发我们对规则做并集操作。修改定义得到不同的问题,其实也能启发我们更加深入地思考问题。比如: 基于“所有匹配规则”设计出的算法肯定存在优化空间的,因为我们只需要最高优先级的匹配规则,所以Bit Vector类型的算法可以优化;比如: 基于“某一个匹配规则”设计出的算法其实可以作为“最高优先级的规则”问题的一个“预过滤”。当然,这些启发式信息最后能不能得到好的结果,就要因地制宜和进行相应的实验验证了。问题的外延就需要我们举例来理解问题,典型的“5元组”规则(src/dst*ip/port+protocol)的定义是什么样子的,是prefix和range,那它们是不是存在什么特殊性质?我们是不是可以用一些特殊方法?现在的规则还存在OpenFlow类型的11元组的规则,甚至是自定义包头的规则。挖掘问题的外延,我们就会把问题做的不断精细化。
  2. When: 从时间维度来看,问题处在什么位置。我特别喜欢Gartner的Hyper技术曲线,也就是技术发展存在“起步”-“泡沫”-“幻灭”-“理性发展”,也就是事情存在高估期、低估期然后进入理性期(插一句,本朝对于太祖的看法也是如此,哈哈)。这一点在Research中尤其重要,因为你要创新就要尽量去做很少人考虑过/做成的事情。当一个所谓的“新领域”出现的时候,我们就能发现很多“很少人考虑过”的事情,比如:把ML泛滥到其他领域(笑)。至于“很少人做成”的事情,就要考虑两种情况:一是大概率做不成,比如“永动机”、NP问题等;一是比较困难,比如“更新与分类都性能良好的网包分类算法”。想要知道问题处在什么时间维度,就要知道该事物的过去、同时找到历史上的参照物以预测未来。以网包分类算法为例,做一下survey就知道,该问题在2000年左右的时候比较Hot,提出了各种各样的solution;在2005年已经出现了非常好的综述。当然,一项技术总是可以持续发展的(比如,发动机持续研究了好几个世纪),网包分类问题也可以持续研究下去,但该问题已经不属于“新领域”,不是那种很好挖的矿了(当问题的内涵、外延都比较清晰的时候,该问题也就常常到了平稳发展的时候了)。
  3. Where: 从空间维度来看,问题处在什么位置。我们需要知道问题是在哪个位置、哪个领域,周围可利用的资源是什么。网包分类问题虽然可以泛化来思考,但一般就是用在网络中间设备上: 路由器、防火墙等;所以我们需要去了解路由器的架构、性能指标(特别是网络带宽的迅速增长)、供应链(整个产品从最上游到最下游是哪些公司一起造出来的)。很自然地我们就发现存在NPU(多核网络处理器)、TCAM、ASIC、MIPS指令集这种专业化硬件,自然就想基于这些硬件设计算法;扩展来想,我们就会思考FPGA、GPU能不能用上(能够发文章,但工业应用大概率不是很有用)。继续延伸发现Open vSwitch上面需要网包分类,自然就考虑到CPU平台(网络功能虚拟化领域等)上算法优化是很重要的。
  4. Why: 从逻辑角度来看,问题处在什么位置;也就是为什么有这个问题。这一部分的问题就可能需要我们深入到数理基础部分了,比如:网包分类问题,从数理层面上和计算几何(1978年Shamos的博士论文而兴起的科学)中的点定位、数据库的查询等都有关系,然后需要返回到拓扑理论、算法设计上。更典型的问题,比如:网包调度问题,本质上和流量调度、工业工程里的调度都有相似之处,需要返回到诸如,网络微积分的数学基础上。当然,浅显地来看,trade-off在计算机领域到处存在,在网包分类问题中,内存空间占用和网包分类所需要的时间存在Trade-off、快速规则更新和快速网包分类之间也存在Trade-off。
  5. How: 调研清楚问题已有的各种解决方案。这方面需要大量的专业知识和广泛的了解,读survey、读专业性期刊、参加讲座、读教材、工业实践,当然最最靠谱的方法是找到可靠的专业人士做咨询或委托。直接搜索Packet Classification,然后就能看到很多papers,根据citation数量就能分辨出那些文章好。根据经典的survey来说,网包分类问题的常见解决思路有四种:线性查找、决策树、哈希(TSS)和比特串(BitVector),其实从本质上来讲,后三种(树、哈希、比特串)基本就是高性能中常用的数据结构了(因为涉及到非线性,队列类型的数据结构并不适合)。
  6. Who: 向谁去了解。这里推荐使用“微软学术”和“Aminer”、能够借助知识图谱自动帮助分析,免去手动查找的苦恼;初入领域的人也可以使用HistCite工具来分析。比如,我就发现了Washington University的PhD, David E. Taylor, 他博士期间研究高性能Router和Switch(刚好是那个时期的Hot研究);当然还有我导(毕竟我导带着实验室在PC领域呆了10年)。不过有趣的是Taylor博士毕业后短暂在学术界呆了9个月(做Visiting Assistant Professor),就投身了工业界了(笑),在Exegy公司做到现在(15年多,现任CTO,可以在Linked上看到他的简历)。Exegy这家公司也挺有趣,用FPGA加速为金融领域的人提供real-time data;果然是金融和信息不分家。
  7. For Whom: 为了什么。这一点并不在传统的6W框架内,但做research很容易犯的一个错误是:漫无目的。纯粹从学术追求出发、为了满足自己的好奇心,四处查看无可厚非、只要记得多总结积累就好。但是如果是“为了他人”做项目或者“为了自己”发文章,都要适当功利一点,去思考、去聚焦在要做什么上面。

对领域的思考

  1. What: 什么是热点?什么是学术领域内的关键问题?什么是工业领域的关键问题?未来2年、5年乃至10年什么东西会发展起来?(当然,未来10年谁也看不清,但这不妨碍去思考这个问题)
  2. When: 领域的发展历史是什么。比如: 计算机网络在从underlay走向overlay,云原生场景是网络的重要场景;而underlay的物理网络的管理从单机配置往SDN、IBN发展(华为、思科公司),应用从有线往无线延伸,从Internet向着IoT前进。
  3. Who: 领域的大牛是谁。怼着中美的科学院、工程院的院士名单和研究领域的介绍去匹配就行。计算机网络领域就怼着Sigcomm Award的获得者去看就行: George Varghese(这位大佬是真的NB, 他在Sigcom’14获奖时的Slides对于做Research非常有价值), Nick McKeown, Sally Floyd, Scott Shenker, Van Jacobson, Raj Jain(大佬的主页对于Network新人非常友好)。哈,从这个角度来看,多路径传输(Multi-path TCP)很有前途啊,毕竟提出者Mark Handley 刚拿了奖(笑)。
  4. Why: 领域内的principals有什么?一些经典设计的原理是什么?
  5. Where: 略。
  6. How: 学习一些常用的技能。如: CS领域内的编程、一些工具、写作、英语等。

补充

还有一个特别好用的是六顶思考帽。

  1. 陈述问题事实(白帽)
  2. 提出如何解决问题的建议, 头脑风暴(绿帽)
  3. 评估建议的优缺点:列举优点(黄帽);列举缺点(黑帽)
  4. 对各项选择方案进行直觉判断(红帽)
  5. 总结陈述,得出方案(蓝帽)

参考

  1. 6W1H原则
  2. 六顶思考帽(中科大·文献管理与信息分析·罗昭锋)

可能的想法

网包调度问题

经典算法

  1. Fair Queuing
  2. Round Robin
  3. WRR

GPS模型

从Universl到PIFO

继续改进

题目是科研痛苦,嗯,现在我感受到了科研的痛苦了。自己对于文章的态度也发生了不小转变,我个人经历的对于research的态度为:

  1. 这篇文章好出色,我怎么不知道这些事情;那篇文章也好出色。
  2. 我看看这篇CCF B的文章提了啥新东西,切,创新真少;还是SIGCOMM上的文章能看。
  3. 看起来有些SIGCOMM的文章也不是很好啊。
  4. 自己动手做,CCF-C级别文章我也做不出来;我要完了。

大四刚入研究生涯的时候,感觉自己是要做出来顶级科研,那些没有巨大创新、或者没有产生极大的学术或工业界影响力的工作都是不值得做的。一个人闷头搞1-2年,还写不出来top级的项目?

怀揣这种想法,我进入博士1年级,那时候自己主要在上课,上学期读paper、下学期写代码;两方面的进步还是有一些的;现在可以说自己不再是科研小白了,科研是怎么回事大致有了解。可惜的是没有抓紧时间继续进入自己的毕设工作(虽然中间参与Packet Classification项目有2个月,但自己时间还是足够的),自己是有机会完成Packet Scheduling深入的东西的。

到了博士2年级,自己立志上学期要完成Packet Scheduling的project,但是半路又拐去了Edge Computing。开始想的是1个月搞定,后来发现自己并不能顺利结束;中间又发生了题目的切换:原定的使用EC来更好地提供Network Security(如:DDoS Defense)的思路发现已经有了相关文章做过了;于是改做如何在EC场景下提供Network Security。磕磕绊绊做了2个月,匆匆忙忙想了一点东西就出手做,产出肯定是不怎样的,后续是要和付哲师兄继续合作、加强每周交流,深入把这个project好好地结束掉。

还是要记住“竞争”时要避免的4件事情,拼多多、抖音的发展都有点这种味道。

  • 看不见:感觉自己没有什么对标的对手。
  • 看不起:新产品出现时,没有看到其背后的前途。
  • 看不懂:产品逐渐壮大,想不明白为什么发展起来。
  • 跟不上:别人的商业模式已经起来后,没有及时跟进,错失最后的机会。