A. 计算机专用词汇
计算机四级考试词汇之一:
access 访问、存取、通路、进入
adjacency list method 邻接表表示法
adjacency matrix method 邻接矩阵表示法
algorithm 算法
array 数组
ATM(asynchronous transfer mode) 异步传输模式
b.. real programs kernels 实程序 核心程序
b.. toy benchmark synthetic benchmark 简单基准程序 复合基准程序
bandwidth 带宽
benchmark 基准测试程序
best - fit algorithm 最佳适应算法
BFS(breadth first search) 广度优先搜索法
binary 二进制
binary relation 二元关系
binary tree 二叉树
bit series 比特序列
black - box white - box 黑盒 白盒
block miss 块失效
blocked 阻塞(等待状态也称阻塞或封锁状态)
boundary 界线 分界
bridge 网桥
bubble sort 冒泡排序
candidate key 候选键(辅键)
capacity 容量
cartesian proct 笛卡尔积
CASE(com.. aided sof.. engineering) 计算机辅助软件工程
CCP(communication control processor) 通信控制处理机
cell 信元
characteristic 特征 特性
circuit switching 线路交换
circular wait 循环等待
CISC(complex instruction set computer) 复杂指令集计算机
class 类
Client/Server 客户机/服务器
clock cycle/clock rate 时钟周期/时钟频率
coaxial cable 同轴电缆
cohesion/coupling 内聚/耦合
coincidental logical proceral functional 偶然内聚 逻辑内聚 过程内聚 功能内聚
communication 通信
complement number 补码
constrain 约束
contain 包含
correspond(corresponding) 相符合(相应的一致的)
CPETT 计算机性能评价工具与技术
CPI 每条指令需要的周期数
CSMA/CD 带冲突检测的载波监听多路访问
cursor 游标
cyclic rendancy check 循环冗余检验
database: integrity consistency re story 完整性 一致性 可恢复性
database: security efficiency 数据库设计的目标:安全性 效率
deadlock: mutual exclusion 死锁条件:互斥
deadlock: circular wait no preemption 死锁条件:循环等待 无优先权
decimal 十进位的
decision 决定 判断
decomposition 双重的 混合的
definition 定义
definition phase 定义阶段
design phase 设计阶段
DFS(depth first search) 深度优先搜索法
diagram 图表
Difference Manchester 差分曼彻斯特
directed graph/undirected graph 有向图/无向图
distributed system 分布式系统
divide union intersection difference 除 并 交 差
document 文件 文档
DQDB(distributed queue al bus) 分布队列双总线
al 二元的 双的
dynamic design process 动态定义过程
element 元素 要素
elevator(scan) algorithm 电梯算法(扫描算法)
encapsulation inheritance 封装(压缩)继承(遗传)
entity 实体
entity integrity rule 实体完整性规则
equation 方程式 等式
Ethernet 以太网
exchange sort 交换排序
exclusive locks 排它锁(X锁)
external(internal) fragmentation 外(内)碎片
fault page fault 中断 过错 页中断
FDDI(fiber distributed data interface) 光纤分布式数据接口
FDM(frequency division multiplexing) 频分多路复用
fiber optic cable 光缆
FIFO replacement policy 先进先出替换算法
figure 数字 图形
first normal form 第一范式
floppy 活动盘片(软盘)
foreign key domain tuple 外来键 值域 元组
formula 公式 表达式
frame page frame 帧 结构 页结构
frequency 频率
FTP 文件传送服务
function 函数
functionally dependant 函数依赖
gateway 网间连接器
general - purpose registers 通用寄存器
generate 产生
grade 等级 标准
graph(graphic) 图
Groper 将用户的请求自动转换成FTP
hash table/hash function/ collision 哈希表/哈希函数(散列函数)/碰撞
HDLC 面向比特型数据链路层协议
hit rate 命中率
host 主计算机
host language statement 主语言语句
hypertext 超级文本
index 索引
insertion sort 插入排序
instruction format 指令格式
instruction set 指令集
interface 接口 分界面 连接体
interrupt 中断
IPC 工业过程控制
ISAM VSAM 索引顺序存取方法 虚拟存储存取方法
join/natural join/semi join 连接/自然连接/半连接
kernel executive supervisor user 核心 执行 管理 用户
kernels 核心程序
key comparison 键(码)值比较
LAN(local area network) 局域网
load 负载 载入
logical functional 逻辑内聚 功能内聚
longitudinal 水平的
maintenance phase 维护(保养)阶段
MAN(metropolitan area network) 城域网
Manchester 曼彻斯特
map 地图 映射图
matrix 矩阵 点阵
memory reference 存储器参量
message switching 报文交换
MFLOP(million floating point operate per second) 每秒百万次浮点运算
MIPS(millions of instruction per second) 没秒百万条指令
mole 单位 基准
monitor(model benchmark physical) mothod 监视 (模型 基准 物理)法
multilevel data flow chart 多层数据流图
multiple - term formula 多项式
multiplexing 多路复用技术
multiplication 乘法
mutual exclusion 互相 排斥
non - key attributes 非码属性
Nyquist 奈奎斯特
object oriented 对象 趋向的 使适应的
object oriented analysis 面向对象的分析
object oriented databases 面向对象数据库
object oriented design 面向对象的设计
object oriented implementation 面向对象的实现
occurrence 事件
one - dimensional array 一维数组
OODB(object oriented data base) 面向对象数据库
OOM(object oriented method) 面向对象的方法
oom: information object message class 信息 对象 消息 类
oom: instance method message passing 实例 方法消息传递
open system 开放系统
operand 操作数
overflow 溢出
overlapping register windows 重叠寄存器窗口
packet switching 报文分组交换
page fault 页面失效
page replacement algorithm 页替换算法
paged segments 段页式管理
PCB(process control block) 进程控制块
peer entities 对等实体
period 时期 周期
phase 阶段 局面 状态
physical data link network layer 物理层 数据链路层 网络层
pipeline 管道
platter/track/cluster 面/磁道/簇
predicate 谓语
preemption 有优先权的
prefix(Polish form) 前缀(波兰表达式)
preorder/inorder/postorder 前序/中序/后序
presentation application layer 表示层 应用层
primary key attributes 主码属性
principle 原则 方法
proceral coincidental 过程内聚 偶然内聚
process 过程 加工 处理
program debugging 程序排错
projection selection join 投影 选择 连接
protocol 协议
prototype 原型 样板
prototyping method(model) 原型化周期(模型)
pseudo - code 伪码(程序设计语言PDL)
punctuation 标点
queue 队列
ready/blocked/running 就绪/阻塞(等待)/运行
real page number 实页数
real programs 实程序
redirected 重定向
rendancy 冗余
reference integrity rule 引用完整性规则
register(registry) 寄存器 登记 注册 挂号
relation 关系
relay 中继
repeater 中继器
replacement 替换
request indication response confirm 请求 指示 响应 确认
resource 资源
response 回答 响应
RISC(reced instruction set computer) 精简指令集计算机
robustness 健壮性
router 路由器
scheme 计划 图表
sector head cylinder 扇区 磁头 柱面
selection sort 选择排序
semaphores 信号
sequence 序列 顺序
Shanon 香农
share locks 共享锁(S锁)
short path critical path 最短路径 关键路径
signal 信号
signal - to - noise ratio 信噪比 B/N
similar 相似的
SISD SIMD MISD MIMD *指令流 *数据流
SMDS 交换多兆位数据服务
software development phase 软件开发阶段
software engineering 软件工程
software portability 软件可移植性
software requirements specification 软件需求说明书
sort 种类 方式 分类 排序
spanning tree 跨越树(生成树)
speep 加速比
SSTF(shortest - seek - time - first) 最短寻道时间优先(磁盘调度算法)
stack strategy non - stack strategy 堆栈型 非堆栈型
starvation 饥饿 匮乏
store proceres 存储过程
subset 子集 子设备
superclass subclass abstract class 超类 子类 抽象类
synthetic benchmark 复合基准程序
system testing 系统测试
Systolic 脉动阵列
table 表 表格 桌子
TDM(time division multiplexing) 时分多路复用
terminal 终端
testing phase 测试阶段
theta select/project/theta join θ选择/投影/θ连接
time complexity 时间复杂度
timestamping 时标技术
Token Bus 令牌总线
Token Ring 令牌环
toy benchmark 简单基准程序
transaction 事务 记录
transmit 传送
transport layer session layer 传输层 会话层
traversal method 遍历方法
triggers/store proceres 触发器/存储过程(ORACLE系统)
unit system acceptance testing 单元测试 系统测试 确认测试
update 更新
value (数)值
variable 变量
vertice edge 顶点(节点)边
virtual memory system 虚拟存储系统
WAN(wide area network) 广域网
waterfall model 瀑布模型
white noises 白噪声
write - back( - back) 写回法
write - through(store - through) 写直达法
计算机四级考试词汇之二:
access arm 磁头臂,存取臂
access time 存取时间
adder 加法器
address 地址
alphanumeric 字母数字的
analog computer 模拟计算机
analyst 分析员
area 区域
array 数组,阵列
assembler 汇编程序
automation 自动化
band 区
batch processing 成批处理
binary code 二进制码
binary digit 二进制位,二进制数字
bit 比特,二进制的一位
branch 分支,支线
brush 电刷
buffer storage 缓冲存储器
calculator 计算器
call instruction 呼叫指令
card punch 卡片穿孔机
card reader 卡片阅读机,读卡机
cell 单元
channel 通道,信道
character 字符
check digit 校验数位
circuit 电路,线路
to clear 清除,清零
clock 时钟
code 代码
to code 编码
coder 编码员,编码器
command 指令,命令
compiler 编译程序
computer language 计算机语言
console 控制台
control unit 控制部件,控制器
core storage, core store 磁心存储器
counter 计数器
cybernetics 控制论
cycle 循环
data 数据
data processing 数据处理
debugging 调试
decision 制定
digit 数字,数位,位
digital computer 数字计算机
disc, disk 磁盘
display unit 显示装置
drum 磁鼓
to edit 编辑
electronics 电子学
emitter 发射器
to encode 编码
to erase 擦除,清洗,抹除
feed 馈送,供给
to feed 馈送,供给
feedback 反馈
field 字段,信息组,域
file 文件
floppy disk 软磁盘
floppy disk drive 软磁盘机
flow chart 流程图
frame 帧
hardware 硬件
identifier 标识符
index 索引
information 信息
inline processing 内处理
input 输入
inquiry 询问
instruction 指令
integrated circuit 集成电路
to interpret 解释
item 项目,项
jump 转移
key 键,关键码
keyboard 键盘
latency time 等待时间
library 库,程序库
linkage 连接
to load 装入,寄存,写入,加载
location 存储单元
logger 登记器,记录器
loop 循环
machine language 机器语言
magnetic storage 磁存储器
magnetic tape 磁带
matrix 矩阵
memory 存储器
message 信息,报文
microcomputer 微型计算机
mole 组件,模块
monitor 监视器,监督程序,管程
nanosecond 毫微秒
network 网络,网
numeric, numerical 数字的,数值的
octet 八位位组,八位字节
operator 操作员
optical character reader 光符阅读机
optical scanner 光扫描器
output 输出
overflow 溢出,上溢
panel 平板
parameter 参数,参量
perforator 穿孔机
peripheral equipment 外围设备,外部设备
personal computer 个人计算机
printed circuit 印制电路
printer 打印机
printout 打印输出
to process 处理
processing unit 处理部件
program 程序
to program 程序编制
programmer 程序设计员
programming 程序设计,程序编制
pulse 脉冲
punch 穿孔
to punch 穿孔
punched card, punch card 穿孔卡片
punched tape, punch tape 穿孔纸带
punch hole 孔,穿孔
random access 随机存取
to read 读
reader 阅读程序
reading 阅读
real time 实时
record, register 记录
rendancy 冗余
routine 例行程序
selector 选择器,选择符
sentinel 标记
sequence 序列,顺序
sequential 顺序的
serial 串行的.连续的
shift 移位,移数
signal 信号
simulation 模拟
simulator 模拟器,模拟程序
software 软件,软设备
sort 分类,排序
sorter 分类人员,分类机,分类程序,排序程序
storage 存储器
to store 存储
subroutine, subprogram 子程序
switch 开关
symbol 符号
symbolic language 符号语言
system 系统
tabulator 制表机
teleprinter 电传打字机
terminal 终端
terminal unit 终端设备
timer 时钟,精密计时器
time sharing 分时
timing 定时
track 磁道
transcer 传感器,翻译机
translator 翻译程序,翻译器
to update 更新
Winchester disk drive 温彻斯特磁盘机,硬盘机
working storage 工作存储器
B. 关于 Linux 网络,你必须知道这些
我们一起学习了文件系统和磁盘 I/O 的工作原理,以及相应的性能分析和优化方法。接下来,我们将进入下一个重要模块—— Linux 的网络子系统。
由于网络处理的流程最复杂,跟我们前面讲到的进程调度、中断处理、内存管理以及 I/O 等都密不可分,所以,我把网络模块作为最后一个资源模块来讲解。
同 CPU、内存以及 I/O 一样,网络也是 Linux 系统最核心的功能。网络是一种把不同计算机或网络设备连接到一起的技术,它本质上是一种进程间通信方式,特别是跨系统的进程间通信,必须要通过网络才能进行。随着高并发、分布式、云计算、微服务等技术的普及,网络的性能也变得越来越重要。
说到网络,我想你肯定经常提起七层负载均衡、四层负载均衡,或者三层设备、二层设备等等。那么,这里说的二层、三层、四层、七层又都是什么意思呢?
实际上,这些层都来自国际标准化组织制定的开放式系统互联通信参考模型(Open System Interconnection Reference Model),简称为 OSI 网络模型。
但是 OSI 模型还是太复杂了,也没能提供一个可实现的方法。所以,在 Linux 中,我们实际上使用的是另一个更实用的四层模型,即 TCP/IP 网络模型。
TCP/IP 模型,把网络互联的框架分为应用层、传输层、网络层、网络接口层等四层,其中,
为了帮你更形象理解 TCP/IP 与 OSI 模型的关系,我画了一张图,如下所示:
当然了,虽说 Linux 实际按照 TCP/IP 模型,实现了网络协议栈,但在平时的学习交流中,我们习惯上还是用 OSI 七层模型来描述。比如,说到七层和四层负载均衡,对应的分别是 OSI 模型中的应用层和传输层(而它们对应到 TCP/IP 模型中,实际上是四层和三层)。
OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。
OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。
OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。
有了 TCP/IP 模型后,在进行网络传输时,数据包就会按照协议栈,对上一层发来的数据进行逐层处理;然后封装上该层的协议头,再发送给下一层。
当然,网络包在每一层的处理逻辑,都取决于各层采用的网络协议。比如在应用层,一个提供 REST API 的应用,可以使用 HTTP 协议,把它需要传输的 JSON 数据封装到 HTTP 协议中,然后向下传递给 TCP 层。
而封装做的事情就很简单了,只是在原来的负载前后,增加固定格式的元数据,原始的负载数据并不会被修改。
比如,以通过 TCP 协议通信的网络包为例,通过下面这张图,我们可以看到,应用程序数据在每个层的封装格式。
这些新增的头部和尾部,增加了网络包的大小,但我们都知道,物理链路中并不能传输任意大小的数据包。网络接口配置的最大传输单元(MTU),就规定了最大的 IP 包大小。在我们最常用的以太网中,MTU 默认值是 1500(这也是 Linux 的默认值)。
一旦网络包超过 MTU 的大小,就会在网络层分片,以保证分片后的 IP 包不大于 MTU 值。显然,MTU 越大,需要的分包也就越少,自然,网络吞吐能力就越好。
理解了 TCP/IP 网络模型和网络包的封装原理后,你很容易能想到,Linux 内核中的网络栈,其实也类似于 TCP/IP 的四层结构。如下图所示,就是 Linux 通用 IP 网络栈的示意图:
我们从上到下来看这个网络栈,你可以发现,
这里我简单说一下网卡。网卡是发送和接收网络包的基本设备。在系统启动过程中,网卡通过内核中的网卡驱动程序注册到系统中。而在网络收发过程中,内核通过中断跟网卡进行交互。
再结合前面提到的 Linux 网络栈,可以看出,网络包的处理非常复杂。所以,网卡硬中断只处理最核心的网卡数据读取或发送,而协议栈中的大部分逻辑,都会放到软中断中处理。
我们先来看网络包的接收流程。
当一个网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列中;然后通过硬中断,告诉中断处理程序已经收到了网络包。
接着,网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中;然后再通过软中断,通知内核收到了新的网络帧。
接下来,内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧。比如,
最后,应用程序就可以使用 Socket 接口,读取到新接收到的数据了。
为了更清晰表示这个流程,我画了一张图,这张图的左半部分表示接收流程,而图中的粉色箭头则表示网络包的处理路径。
了解网络包的接收流程后,就很容易理解网络包的发送流程。网络包的发送流程就是上图的右半部分,很容易发现,网络包的发送方向,正好跟接收方向相反。
首先,应用程序调用 Socket API(比如 sendmsg)发送网络包。
由于这是一个系统调用,所以会陷入到内核态的套接字层中。套接字层会把数据包放到 Socket 发送缓冲区中。
接下来,网络协议栈从 Socket 发送缓冲区中,取出数据包;再按照 TCP/IP 栈,从上到下逐层处理。比如,传输层和网络层,分别为其增加 TCP 头和 IP 头,执行路由查找确认下一跳的 IP,并按照 MTU 大小进行分片。
分片后的网络包,再送到网络接口层,进行物理地址寻址,以找到下一跳的 MAC 地址。然后添加帧头和帧尾,放到发包队列中。这一切完成后,会有软中断通知驱动程序:发包队列中有新的网络帧需要发送。
最后,驱动程序通过 DMA ,从发包队列中读出网络帧,并通过物理网卡把它发送出去。
多台服务器通过网卡、交换机、路由器等网络设备连接到一起,构成了相互连接的网络。由于网络设备的异构性和网络协议的复杂性,国际标准化组织定义了一个七层的 OSI 网络模型,但是这个模型过于复杂,实际工作中的事实标准,是更为实用的 TCP/IP 模型。
TCP/IP 模型,把网络互联的框架,分为应用层、传输层、网络层、网络接口层等四层,这也是 Linux 网络栈最核心的构成部分。
我结合网络上查阅的资料和文章中的内容,总结了下网卡收发报文的过程,不知道是否正确:
当发送数据包时,与上述相反。链路层将数据包封装完毕后,放入网卡的DMA缓冲区,并调用系统硬中断,通知网卡从缓冲区读取并发送数据。
了解 Linux 网络的基本原理和收发流程后,你肯定迫不及待想知道,如何去观察网络的性能情况。具体而言,哪些指标可以用来衡量 Linux 的网络性能呢?
实际上,我们通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络的性能。
除了这些指标,网络的可用性(网络能否正常通信)、并发连接数(TCP 连接数量)、丢包率(丢包百分比)、重传率(重新传输的网络包比例)等也是常用的性能指标。
分析网络问题的第一步,通常是查看网络接口的配置和状态。你可以使用 ifconfig 或者 ip 命令,来查看网络的配置。我个人更推荐使用 ip 工具,因为它提供了更丰富的功能和更易用的接口。
以网络接口 eth0 为例,你可以运行下面的两个命令,查看它的配置和状态:
你可以看到,ifconfig 和 ip 命令输出的指标基本相同,只是显示格式略微不同。比如,它们都包括了网络接口的状态标志、MTU 大小、IP、子网、MAC 地址以及网络包收发的统计信息。
第一,网络接口的状态标志。ifconfig 输出中的 RUNNING ,或 ip 输出中的 LOWER_UP ,都表示物理网络是连通的,即网卡已经连接到了交换机或者路由器中。如果你看不到它们,通常表示网线被拔掉了。
第二,MTU 的大小。MTU 默认大小是 1500,根据网络架构的不同(比如是否使用了 VXLAN 等叠加网络),你可能需要调大或者调小 MTU 的数值。
第三,网络接口的 IP 地址、子网以及 MAC 地址。这些都是保障网络功能正常工作所必需的,你需要确保配置正确。
第四,网络收发的字节数、包数、错误数以及丢包情况,特别是 TX 和 RX 部分的 errors、dropped、overruns、carrier 以及 collisions 等指标不为 0 时,通常表示出现了网络 I/O 问题。其中:
ifconfig 和 ip 只显示了网络接口收发数据包的统计信息,但在实际的性能问题中,网络协议栈中的统计信息,我们也必须关注。你可以用 netstat 或者 ss ,来查看套接字、网络栈、网络接口以及路由表的信息。
我个人更推荐,使用 ss 来查询网络的连接信息,因为它比 netstat 提供了更好的性能(速度更快)。
比如,你可以执行下面的命令,查询套接字信息:
netstat 和 ss 的输出也是类似的,都展示了套接字的状态、接收队列、发送队列、本地地址、远端地址、进程 PID 和进程名称等。
其中,接收队列(Recv-Q)和发送队列(Send-Q)需要你特别关注,它们通常应该是 0。当你发现它们不是 0 时,说明有网络包的堆积发生。当然还要注意,在不同套接字状态下,它们的含义不同。
当套接字处于连接状态(Established)时,
当套接字处于监听状态(Listening)时,
所谓全连接,是指服务器收到了客户端的 ACK,完成了 TCP 三次握手,然后就会把这个连接挪到全连接队列中。这些全连接中的套接字,还需要被 accept() 系统调用取走,服务器才可以开始真正处理客户端的请求。
与全连接队列相对应的,还有一个半连接队列。所谓半连接是指还没有完成 TCP 三次握手的连接,连接只进行了一半。服务器收到了客户端的 SYN 包后,就会把这个连接放到半连接队列中,然后再向客户端发送 SYN+ACK 包。
类似的,使用 netstat 或 ss ,也可以查看协议栈的信息:
这些协议栈的统计信息都很直观。ss 只显示已经连接、关闭、孤儿套接字等简要统计,而 netstat 则提供的是更详细的网络协议栈信息。
比如,上面 netstat 的输出示例,就展示了 TCP 协议的主动连接、被动连接、失败重试、发送和接收的分段数量等各种信息。
接下来,我们再来看看,如何查看系统当前的网络吞吐量和 PPS。在这里,我推荐使用我们的老朋友 sar,在前面的 CPU、内存和 I/O 模块中,我们已经多次用到它。
给 sar 增加 -n 参数就可以查看网络的统计信息,比如网络接口(DEV)、网络接口错误(EDEV)、TCP、UDP、ICMP 等等。执行下面的命令,你就可以得到网络接口统计信息:
这儿输出的指标比较多,我来简单解释下它们的含义。
其中,Bandwidth 可以用 ethtool 来查询,它的单位通常是 Gb/s 或者 Mb/s,不过注意这里小写字母 b ,表示比特而不是字节。我们通常提到的千兆网卡、万兆网卡等,单位也都是比特。如下你可以看到,我的 eth0 网卡就是一个千兆网卡:
其中,Bandwidth 可以用 ethtool 来查询,它的单位通常是 Gb/s 或者 Mb/s,不过注意这里小写字母 b ,表示比特而不是字节。我们通常提到的千兆网卡、万兆网卡等,单位也都是比特。如下你可以看到,我的 eth0 网卡就是一个千兆网卡:
我们通常使用带宽、吞吐量、延时等指标,来衡量网络的性能;相应的,你可以用 ifconfig、netstat、ss、sar、ping 等工具,来查看这些网络的性能指标。
小狗同学问到: 老师,您好 ss —lntp 这个 当session处于listening中 rec-q 确定是 syn的backlog吗?
A: Recv-Q为全连接队列当前使用了多少。 中文资料里这个问题讲得最明白的文章: https://mp.weixin.qq.com/s/yH3PzGEFopbpA-jw4MythQ
看了源码发现,这个地方讲的有问题.关于ss输出中listen状态套接字的Recv-Q表示全连接队列当前使用了多少,也就是全连接队列的当前长度,而Send-Q表示全连接队列的最大长度