环境配置
未读自从用上了Docker之后,VMWare早就不知道丢哪里去了。无论是现在的CSAPP、OS、CSE,还是云操作系统的Lab1,我都是用的Docker容器。可结果这个Lab2他还用不了Docker,属实无奈;不仅如此,配环境就花了我大量的时间,因此打算记录记录。
Why not Docker?本来Docker用得好好的,结果make一编译,给我报错了
123make -C /lib/modules/5.15.153.1-microsoft-standard-WSL2/build/ M=/root/dpdk-work/dpdk/kernel/linux/igb_uiomake[1]: *** /lib/modules/5.15.153.1-microsoft-standard-WSL2/build/: No such file or directory. Stop.make: *** [Makefile:4: all] Error 2
遂查看容器里的/lib/modules/目录,发现是真没有啊。Docker容器和宿主机共享内核,容器内部没有自己的内核模块,所以我印象中容器里这部分目录里 ...
chp1 Intro
通过RDMA传输的数据,会直接跳过操作系统(CPU),从软件层直接到硬件层并直接发送(需要有RDMA网卡)
传输数据不需要经过操作系统,但是如果是为了传输而创建资源的过程(比如queue、连接、device driver),则需要经过操作系统
RDMA会直接将数据传送给目标主机的对应内存地址,所以叫做Remote Direct Memory Access
普通的传输会先将数据复制到内存的某个buffer内,然后传到接收方的buffer内后复制到真正的存储位置;但是RDMA号称Zero Copy,也就是说不会进行buffer的复制,而是直接从对应位置获取数据到物理层,并且直接将数据发送到目标的内存位置
RDMA的传输一方面具有TCP的可靠性和连接性,另一方面具有UDP的速度和可拓展性(scalability)
补充
跳过操作系统主要是跳过CPU,因为内核主要是通过CPU来进行管理的,而CPU在网络通信中充当的是一个copy的角色,比较浪费宝贵的计算资源(因为TCP/IP的封装需要内核,因此用户内存区域的数据会复制到内核内存区域,同时封装了TCP/ ...
计算机网络
未读chp5-1 导论路由的概念:按照某种指标找到一条从源节点到目标节点的较好路径
chp5-2 路由选择算法路由算法可以分为
全局算法:所有路由器拥有完整的拓扑和边的代价的信息(link state)
分布式算法:路由器只知道与它有物理连接关系的邻居路由器以及到相应路由器的代价值(distance vector)
链路状态路由选择
发现相邻节点,获知对方网络地址
测量到相邻节点的代价
组装一个分组,描述相邻节点的情况
将分组通过扩散的方法发到所有其他路由器
无穷环状扩散:可用顺序号、TTL等解决
Dijkstra’s Algorithm计算某个节点到其他节点的最短路径
距离矢量路由选择
每个节点记录其到达其他节点的代价,而与邻居的实时代价可以直接测出
从一个基础节点开始,该节点和其他节点互相交换矢量路由(也就是从本节点到某节点的代价)表,根据自身与邻居的实时距离来更新自身到其他节点的代价
广泛传播之后可以迭代式地更新路由表
通常是在自身检测到与邻居的代价有变化,或者别的路由传过来其矢量路由的变化,这样会导致路由器的路由表的变化Bellman-Ford方程:$$d_x(y) ...
计算机网络
未读chp4-1 导论网络层的目标主要是在主机和主机之间传送段,在发送端将段封装到数据报中,在接收端将段上交给传输层实体,网络层在每个路由器中都有
数据平面:每个路由器如何决定从输入端口到达的分组转发到合适的输出端口(聚焦于单台路由器)
控制平面:决定数据报如何在路由器之间路由,巨鼎数据报从源主机到目标主机之间的端到端路径(聚焦于网络范围)
传统方式:一个路由器维护一个基于目标地址的转发表;在路由器中被计算和实现
SDN方式:基于多个字段的流标来决定转发防线;在远程的服务器中实现,传给路由器来执行
网络层应该提供什么样的服务模型?
单个数据报:可靠传送、延迟保证
数据报流:保证顺序、保证流的最小带宽、分组之间的延迟差(延迟的差,为0表示和发送节奏一致)
网络层连接建立:涉及到路由器的两个主机之间的网络层连接
chp4-2 路由器组成输入端口功能解读:(输出端口类似)
物理层将物理线路的物理信号转换成数字信号
数据链路层执行链路层的协议并且对数据解封装以传送给网络层
网络层队列(输出端口也有)
根据IP信息或者加上其他信息来寻找合适的输出端口
设置队列一般是为了防止输入端口传出数据 ...
chp3-1 概述
传输层为应用层的不同主机的不同应用进程之间提供逻辑通信;发送方会将应用层的报文分为报文段,然后传给网络层,而接收方会将报文段重组为报文,传给应用层;对于数据丢失、乱序等问题有自己的解决方案
传输层提供的复用和解复用功能起到一个汇总和分发的功能,即将通向相同主机的应用层报文汇总发向同一个主机,同时将发来的复用报文拆解分发给不同的应用进程
传输层TCP协议提供拥塞控制、流量控制、建立连接的额外加强功能,UDP不提供
传输层不可以解决非本层的问题,比如带宽、延迟等问题(受限于下层或者传输链路)
chp3-2 多路复用和解复用多路复用实际上是指,当应用层需要通过传输层发送报文的时候,传输层会将报文先和本地port和目标port封装成为一个TCP/UDP SDU,然后往网络层传输的时候再添加一个本地IP和目标IP的头部,便于网络层的寻址;解复用是指传来的实体通过IP+port来进行socket的查找和定位,然后将数据传给正确的socket
这里还是解释一下,一个socket是在一个进程process上运行的,而一个process是一个应用程序,在TCP中相同的目标 ...
chp2-1 应用层协议原理网络应用体系架构:
CS模式(客户端服务器):这玩意我们部署过,挺熟悉这种架构的了;服务器一直运行,固定IP和端口号;客户端与服务器通信;缺点是可扩展性比较差,表现为宕机后会造成故障、服务集中于服务集群导致网络流量资源问题等
对等体(p2p):每个端系统自成服务/客户端,服务提供不再仅限于集中的服务器,流量和负载问题有改善;不过难以管理
Napster(cs & p2p):中央服务器用于存储什么服务在什么IP的服务端上的表信息(搜索),客户端向中央服务器查找后导向目标服务端进行服务的请求(传输文件)
一个服务是运行在一个主机的一个 进程 ,同主机内进程通信通过 进程间通信机制(操作系统定义) 通信,不同主机通过 交换报文Message 来通信(通过OS的通信服务和协议进行规范)
一个进程用IP+port标示,是一个端节点(TCP/UDP分别有不同的port范围空间)
携带信息:要传输的报文SDU+传给谁和谁传的,应用层通过socket来标识通信的双方和单方,这样每次在socket传输报文的时候就不用携带那么多信息了
soc ...
chp1-1 什么是Internet
节点:分为主机节点和数据交换节点,主机节点作为数据源或者数据目标(电子产品、传感器芯片),数据交换节点作为数据传输的中转站(路由、交换机)
链路:用来通信,有光纤、无线电等方式,接入网链路是主机连接到数据交换节点的链路、主干链路是数据交换节点之间的链路;速率衡量单位bps(bits per second)
协议:对等层实体通信的标准,各种层的设备遵守相同协议,以实现不同种设备之间的网络通信;规定了通信语法、语义、数据传输次序、动作与响应;协议有有连接TCP、无连接UDP两种,区别在于传输数据前会不会先进行一个建立连接的请求
互联网是各个网络连接而成的网络,各个网络之间又会有小网络
实际场景:软件作为分布式应用,通过底层通信服务基础设施(主机硬件、操作系统及其机制、网络应用进程,以及路由器等数据传输节点、链路、协议等)
chp1-2 网络边缘
主机或者应用程序(客户端、服务器)称为边缘
用于边缘之间数据交换的整个网络路由交换连接结构称为核心
边缘通向核心的路径称为接入(access)
边缘之间连接模式:
Client/Ser ...
Intro to System Security
Security is a negative goal. 安全是完成“不能让某件事情被做”的任务,想做一件事情有很多种方法,所以安全要考虑的东西很多,本身也很难
Security may be conflict with other goals. 安全的诉求和其他的诉求可能是冲突的
安全的目标:
Confidentiality 限制数据的读取
Integrity 限制数据的改写
Availability 确保系统运行符合正常情况,而非执行异常
Thread Model: Assumption
攻击者可能会控制你的部分电脑、或控制电脑内部的部分软件、获得一些隐私信息、了解你程序的bug
考虑物理攻击、社会工程学攻击、维持安全的成本
ROP and CFIPassword使用如下的检查密码算法有何问题?由于是逐位检查,因此可以在密码存放的方式做手脚,比如可以将密码的第一位和剩下的位数放在不同的页中,且让剩下的位数被换页到磁盘,那么就可以根据时间来判断第一位是不是对的,从而如法炮制试出每一位的正确字符如何降低密码验证方式被攻击的概率 ...
Distributed (and parallel) programming前面讲了很多,都是关于AI需要庞大计算量的引子,引出后续针对如何加快计算速度的策略讲解比如训练一个神经网络,前向和后向的一次迭代总共是6倍的$sizeof(W)*B$,$W$为矩阵元素个数,$B$为自变量特征数,注意这里的$W$是所有层的参数
parallelism in single node
首先多核(多线程)的计算效率肯定高于单核单线程,单核的问题在于流水线的制约,可以改良流水线以及加快CPU处理一个指令的速度
多核的问题是:每个核有自己的L1/2缓存,而缓存的数据来源于内存,但是每个核的缓存有可能是不与内存完全同步的,就导致了计算结果正确性不能保证(设计cache coherence protocols,比如单个核缓存更改后广播至其他核,或者只广播(或者全局版本号dir)已修改数据的版本号等要拿的时候再去对应的核拿最新数据);这个缓存一致性问题严重制约了当前处理器增加核数所带来的性能提升/通过增加开发者开发难度的方式实现有限的保证缓存一致性的方法
增加每个核的计算单元ALU,也可以 ...
计算机网络
未读Link Layer链路层主要讨论0-1电压序列如何从电路转换成为设备上的bit数据
Shared Clock:两条线,一条用于保持数据电压,一条用来作为trigger触发对方的读取,适用于比较接近的器件(长距离难以保证两条线的同步),如寄存器之间的通信
3-wire R/A protocol:三条线,一条保持数据电压,一条为ready线在数据设置完毕后置为高电压(1),一条为acknowledge线在数据接收完毕后置为1作为给发出端的响应,响应后r/a重新置为0,等待下一个bit的输入(缺点是传输数据的带宽比较低);另一种设想是类并发地设置多个这样的配对,可以提高单位时间的数据传输量,但免不了木桶效应
serial transmission:单条线但是能够一次性接受连续的字节流,而不是逐字节接收(USB)
下面针对serial transmission的具体实现方式进行讨论
VCO(Voltage Controlled Oscillator):根据当前检测到的电压变化频率来尝试拟合出自己的接受频率,问题在于假设有很长的一串连续相同电压可能干扰器频率的测算
增 ...