计算机发展史

⭐计算机的发展始于20世纪初期其历程可以大致分为以下几个重要阶段


机械计算器时代19世纪末-20世纪初计算机的前身是用于进行数学计算的机械装置查尔斯·巴贝奇设计的差分机Difference Engine和分析机Analytical Engine被认为是现代计算机的先驱这些机器虽然未在巴贝奇生前完全建成但它们的设计理念包含了现代计算机的基本要素如存储程序和使用穿孔卡片来输入指令
电子管计算机时代1940s-1950s这是现代电子计算机的起点1946年美国宾夕法尼亚大学的埃克特-莫奇莱计算机ENIAC被公认为第一台通用电子数字计算机它使用了电子管作为基本元件虽然ENIAC体积庞大能耗高且可靠性低但它标志着计算机技术的新纪元随后出现了像UNIVAC I这样的商业计算机开始应用于人口普查和企业数据处理
晶体管计算机时代1950s-1960s20世纪50年代末晶体管取代电子管成为计算机的主要构建组件这大大减小了计算机的体积降低了能耗并提高了可靠性1959年IBM推出了第一个全晶体管计算机IBM 7090开启了计算机技术的新篇章
集成电路与微处理器时代1960s-至今随着1960年代集成电路IC的发明计算机部件进一步微型化1971年英特尔公司推出了世界上第一款微处理器Intel 4004这为个人电脑的出现奠定了基础70年代末至80年代苹果公司的Apple IIIBM PC等个人电脑开始普及计算机走进了千家万户和办公室
个人电脑与互联网时代1980s-至今80年代至90年代个人电脑迅速发展操作系统如Windows和Mac OS的出现使得计算机更加用户友好同时互联网的兴起彻底改变了信息传播的方式促进了全球化交流与电子商务的爆发式增长
移动计算与云计算时代1990s-至今进入21世纪随着智能手机和平板电脑的普及移动计算成为主流同时云计算技术的发展使得数据存储和计算能力不再受限于本地设备极大地推动了大数据人工智能等技术的应用和发展

💗💗计算机的发展是一个不断创新迭代的过程从最初的简单计算工具到如今无所不在的信息处理系统计算机技术的进步深刻地影响着人类社会的每一个角落

数字系统

定义了用独特的符号(数码)来表示一个数字在不同的系统中一个数字有不同的表示方法使用有限的数字符号来表示数字

位置化数字系统

位置化数字系统是一种数字表示法其中每个数字字符或符号的数值不仅由该字符本身决定还与其在数字符号序列中的位置有关这种系统允许使用有限的符号集称为基数来表示任意大小的数关键特点是每个位置代表基数的幂次从右到左依次增加

  • 基数构成数字系统的不同符号的数量例如在十进制系统中基数是10使用0到9这10个符号在二进制系统中基数是2只使用0和1
  • 位值每个位置上的数字所代表的值等于基数的幂最右边的位通常称为个位对应基数的0次幂向左的每一位则相应增加一个幂次
  • 位权与位值类似的概念强调了每个位置上的数字乘以该位置的基数的幂之后的贡献

🔟十进制系统(以10为底)

十进制系统是生活中最常用的数字系统

十进制系统基数是10符号集S={0,1,2,3,4,5,6,7,8,9}在数字123.4中每个数字的位置或位值决定了它的实际数值
右边的4在小数位表示 4 × 10^-1 = 0.4
右边的3位于个位表示 3 × 10^0 = 3
左边的2位于十位表示 2 × 10^1 = 20
左边的1位于百位表示 1 × 10^2 = 100
将这些值相加得到最终的数字 0.4 + 3 + 20 + 100 = 123.4

2️⃣二进制系统(以2为底)

二进制系统常用于计算机数据的储存这是因为计算机由电子开关制成它们仅有开和关两种状态1和0分别表示两种不同的状态二进制系统中的符号常被称为二进制数码或位(位数码)

二进制系统基数是2符号为 0 和 1
二进制数1011表示为(1 × 2^3) + (0 × 2^2) + (1 × 2^1) + (1 × 2^0) = 11二进制数1011在十进制中就是11

8️⃣八进制系统(以8为底)

八进制系统用于二进制系统的计算机外部表现形式

八进制系统基数是8符号集S={0,1,2,3,4,5,6,7}
八进制数1256表示为(1 × 8^3) + (2 × 8^2) + (5 × 8^1) + (6 × 8^0) = 686八进制数1256在十进制中就是686

1️⃣6️⃣十六进制系统(以16为底)

十六进制系统常用于计算机科学

十六进制系统基数是16符号集S={0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
十六进制数2AE表示为(2 × 16^2) + (10 × 16^1) + (14 × 16^0) = 686十六进制数2AE在十进制中就是686

🔄十进制转其他进制

将十进制数转换为其他进制如二进制八进制十六进制等的基本方法是除基取余法

  1. 将十进制数除以要转进制的基数二进制除以2八进制除以8十六进制除以16得到商和余数记录余数
  2. 重复步骤用上一步得到的商继续除以要转进制的基数再次得到新的商和余数并记录余数
  3. 重复上述过程直到商为0为止每次除法产生的余数都是最终要转换的进制数的一个位
  4. 将所有记录下的余数倒序排列即得到原十进制数对应的要转换的进制数

将十进制数 8 转换为二进制
8 ÷ 2 = 4 余数为 0
4 ÷ 2 = 2 余数为 0
2 ÷ 2 = 1 余数为 0
1 ÷ 2 = 0 余数为 1此时商为0停止除法
将余数倒序排列1000因此十进制数 8 转换为二进制为1000

将十进制数 112 转换为八进制
112 ÷ 8 = 14 余数为 0
14 ÷ 8 = 1 余数为 6
1 ÷ 8 = 0 余数为 1此时商为0停止除法
将余数倒序排列160因此十进制数 112 转换为八进制为160

将十进制数 112 转换为十六进制
112 ÷ 16 = 7 余数为 0
7 ÷ 16 = 0 余数为 7此时商为0停止除法
将余数倒序排列70因此十进制数 112 转换为十六进制为70

🔄其他进制相互转换

二进制转八进制从右到左每3位二进制数分为一组如果最高位不足3位则在其左侧补0直至满3位将每组二进制数转换为其对应的八进制数

二进制转十六进制从右到左每4位二进制数分为一组如果最高位不足4位则在其左侧补0直至满4位将每组二进制数转换为其对应的十六进制数

八进制和十六进制相互转换先转为二进制在进行转换

将二进制数1011010转换为八进制
分组001 011 010
转换 1 3 2
结果为262八进制

将二进制数10110101111转换为十六进制
分组0101 1010 1111
转换5 A F
结果为5AF十六进制

在这些系统中每个位置的值都是基数的相应幂次从右向左依次增加幂的阶数这种表示法极大地方便了数值的计算比较和转换是现代数学和计算机科学的基础

非位置化数字系统

非位置化数字系统也称为非定位数系或累加数字系统是一种数字表示方法与位置化数字系统相反其中数字符号所占据的位置与其表示的数值没有直接关系在非位置化系统中每个符号都有固定的数值而整个数值是由这些符号的值简单相加而成不考虑它们所在的位置

最典型的非位置化数字系统是罗马数字系统在罗马数字中不同的字母代表不同的数值而且相同的数值符号如果重复出现则其数值是简单相加的
例如罗马数字 “III” 表示的是三个单位1+1+1=3而 “IV” 表示的是45-1“IX” 表示910-1
这里可以看到尽管某些特定组合如IV和IX表现出了基于位置的减法规则但整体上符号的位置并不直接决定其数值大小而是依赖于符号本身的值和它们之间的组合规则

总结来说非位置化数字系统的特点是

  • 数字符号的值是固定的不随位置变化
  • 数字的总值是通过将各个符号的值相加得到的
  • 这种系统通常不如位置化数字系统高效特别是在进行大数运算和表示较大数值时

数据类型

🔢整数

在计算机系统中源码原码反码和补码是用来表示有符号整数的一种方式主要用于在计算机内存中存储和处理正数和负数

原码源码原码是数值最直接的二进制表示方法它包括一个符号位和数值位符号位用0表示正数用1表示负数数值位则是数值的绝对值的二进制表示例如+3的原码为00000011而-3的原码为10000011

反码反码用于负数的表示正数的反码与其原码相同对于负数除了符号位保持不变之外数值位上的每一位都按位取反0变成11变成0因此-3的反码是11111100符号位保持1其他位取反

补码补码是现代计算机系统中最常用的数值表示方法正数的补码与它的原码和反码相同对于负数补码是其反码加1这意味着-3的补码是11111100反码+ 1 = 11111101补码的一个关键特性是使用补码表示的加法和减法运算可以统一处理特别是减法可以通过加上一个数的补码来实现简化了处理器的设计

补码转源码补码中的最高位最左边的位是符号位如果为1则表示该数是负数如果是0则是正数正数的补码直接就是其源码无需转换对于负数由于补码是通过取反对除符号位外的所有位再加1得到的需要执行相反的操作首先从补码表示的数值中减去1然后对结果除了符号位进行位取反操作即将1变为0将0变为1举例来说假设有一个8位的二进制数其补码表示为11111101这是一个负数的补码减111111101 - 1 = 11111100取反只对数值部分不包括符号位取反11111100 变为 10000011因此这个补码表示的数在转换回源码后是10000011

🔢实数

标准浮点数Standard Floating Point Number通常遵循IEEE 754国际标准来存储在计算机中这一标准广泛应用于绝大多数现代计算机体系结构中

⭐单精度浮点数32位

  • 符号位S最左边的一位表示数的正负0表示正数1表示负数
  • 指数位E接下来的8位表示指数部分在实际存储前会进行偏置Bias处理对于单精度浮点数偏置值为127即实际存储的指数值需要加上127这样做的目的是为了能够表示负指数
  • 尾数Mantissa或称小数部分Fraction最后23位存储的是小数部分的有效数字实际的小数部分前会隐含一个1即所谓的隐藏位或隐含位不实际存储这样做的目的是为了提高精度

假设要存储的单精度浮点数为5.75

符号位因为5.75是正数所以符号位为0所以S = 0;

指数计算首先将5.75十进制转化为二进制5.75=101.11并规范化使其形式为1.xxx… × 2^n101.11 = 1.0111 × 2^2这里需要确定n的值经过计算和规范化处理我们可以近似得到一个合适的指数值实际存储时指数2需要加上偏置127得到129转换为二进制表示并填充到指数位所以E = 2 + 127 = 129 = 10000001

尾数将规范化后的数 1.0111 去掉小数点前面的1剩余的部分转换成二进制填充到尾数部分得到 0111因为尾数一共23位不足23位需要再后边补0所以M = 01110000000000000000000

5.75储存在计算机中的是 5.75 = SEM = 01000000101110000000000000000000

⭐双精度浮点数64位

双精度浮点数的存储原理与单精度类似但其精度更高使用11位指数偏置值为1023和52位尾数加上1位符号位总共64位

总之标准浮点数的存储是一个将实数转换为特定二进制格式的过程包括符号位指数位经过偏置处理和尾数位以符合IEEE 754标准的格式存储在计算机内存中

📄文本

计算机文本信息的储存涉及到字符编码的转换

  1. 字符编码文本由字符组成计算机不能直接理解或存储这些字符因此需要将字符转换成计算机能够识别和处理的形式——二进制数最常用的字符编码方式有ASCIIUnicode等
    • ASCII (American Standard Code for Information Interchange)是一种基于拉丁字母的字符编码方案使用7位二进制数来表示128种可能的字符包括英文大小写字母数字标点符号等
    • Unicode为了解决ASCII编码不能表示世界上所有字符的问题Unicode应运而生Unicode是一个包含ASCII并能表示更多字符集如汉字表情符号等的国际标准最常用的Unicode实现是UTF-8它使用可变长度字节序列来表示字符对于英文字符仍使用1字节与ASCII兼容而对于其他语言的字符则可能使用2字节3字节或4字节
  2. 字节序列化选定字符编码后每个字符会被转换成对应的二进制数序列字节序列例如在UTF-8编码下你好这两个汉字会被转换成三个字节序列对应于E4 BD A0对应于E5 A5 BD
  3. 文件储存这些二进制字节序列随后会被写入到磁盘上的文件中在写入过程中除了实际的数据外还可能会添加文件头信息用来标识文件的类型编码方式等元数据以便其他程序正确读取和解析该文件
  4. 存储格式在磁盘上这些二进制数据并不是简单地按顺序排列而是根据文件系统如NTFSFAT32等的规则组织成一系列的扇区或块文件系统会记录每个文件的起始位置大小等信息使得操作系统能够找到并读取这些二进制数据

💗💗综上所述文本信息通过选定的字符编码转换为二进制序列再经过文件储存机制保存到磁盘上从而实现了从人类可读的文本到计算机可处理的二进制数据的转换

🎵音频

计算机音频存储的过程主要包括采样量化编码三个核心步骤这一系列操作通常被称为模数转换(A/D转换)即将模拟音频信号转换为数字音频信号存储

  1. 采样(Sampling)模拟音频信号是连续变化的电压或电流信号代表了声波的压力波形计算机无法直接处理这种连续信号因此需要将其离散化采样过程就是每隔一定时间间隔对模拟信号的幅度进行测量并记录这个时间间隔称为采样周期其倒数即为采样率常见的采样率有44.1 kHz用于CD质量音频和48 kHz常见于专业音频和视频应用根据奈奎斯特采样定理为了无失真地重建原始信号采样率至少应为信号最高频率的两倍
  2. 量化(Quantization)采样得到的信号仍然是连续的电压值量化则是将这些连续的幅度值转换为离散的数字值每个采样点的模拟电压值会被分配到最近的一个数字级别上这意味着会有一些精度损失因为连续的模拟值被映射到了有限个数字值上量化等级的数量决定了音频的动态范围和精度通常用位深度表示例如16位的量化意味着每个采样点可以有2^16=65536个不同的量化级
  3. 编码(Encoding)经过采样和量化后音频信号变成了数字序列接下来需要将其编码为适合存储或传输的格式编码可以是有损的也可以是无损的有损编码如MP3AAC利用心理声学模型去除人耳不易察觉的信息以达到高压缩比的目的而无损编码如FLACWAV能够保持原始音频数据的完整性但文件体积相对较大编码过程会根据选定的音频格式规范将量化后的样本值转换为特定的二进制数据流

💗💗完成上述步骤后数字音频信号就被转换成了可以在计算机中存储和处理的二进制文件这些文件通常还会包含一些元数据如采样率位深度通道数单声道立体声等以及可能的压缩算法信息以确保音频可以被正确地解码和回放

📊图像

计算机存储图像的过程主要涉及图像的数字化和编码

  • 图像数字化
    • 采样首先对于连续的光学图像模拟信号计算机需要通过扫描设备如数码相机扫描仪将其转换为离散的像素点集合这个过程称为采样每个像素代表了图像中一个特定位置的颜色或亮度信息
    • 量化接着每个像素的颜色或亮度值需要被量化为数字形式对于彩色图像通常采用RGB模型每个像素由红(Red)绿(Green)蓝(Blue)三种颜色分量组成每个颜色分量的强度通常用8位即0到255之间的整数表示这样每个像素就由24位数据组成可以表达超过1600万种颜色
  • 图像编码为了高效地存储和传输图像计算机会对这些像素数据进行编码形成图像文件常见的编码方式有以下几种
    • 位图Bitmap直接记录每个像素的颜色值如BMP格式
    • 矢量图与位图不同矢量图如SVG格式存储的是描述图形形状颜色和位置的数学公式而不是每个像素的颜色适用于线条图图标等几何图形为主的图像
    • 压缩编码利用算法减少图像数据的大小分为有损压缩如JPEG通过去除人眼不易察觉的图像细节来减小文件大小和无损压缩如PNG压缩后图像质量不变

💗💗编码完成后图像数据会被封装成特定的文件格式如JPEGPNGGIFBMPTIFF等这些格式都有自己的特点和适用场景文件头部通常包含元数据如图像尺寸颜色模式压缩方式等便于软件正确解析和显示图像最后图像文件以二进制形式存储在硬盘闪存或其他存储介质上存储时文件系统会为图像文件分配相应的磁盘空间并记录文件的位置大小等信息以便后续读取

📽️视频

计算机存储视频的过程类似于存储图像但更为复杂因为它涉及大量的连续图像以及可能的声音数据视频存储的核心步骤包括采集压缩编码以及打包存储

  • 视频采集视频最初可能是通过摄像机等设备捕捉的连续图像序列或者是从其他数字来源获得的图像序列每秒捕获的图像数量称为帧率Frames Per Second, FPS常见的帧率为24253060等
  • 视频压缩视频数据非常庞大如果不进行压缩将占用极大的存储空间因此视频通常会在存储前进行压缩视频压缩主要通过查找和消除视频帧间的冗余信息来减少数据量包括帧内压缩在同一帧内寻找相似区域并减少重复信息和帧间压缩利用前后帧的相似性减少信息量
  • 视频编码压缩后的视频数据需要按照特定的编码格式进行编码以便于存储和播放常见的视频编码格式有H.264/AVCH.265/HEVCVP9AV1等编码过程会将压缩后的视频数据转化为一系列的字节流同时也会编码音频数据如果视频中包含声音
  • 音频编码视频中的音频部分也需要进行类似的处理通过采样量化编码转换为数字音频流常见的音频编码格式有AACMP3等
  • 打包与存储编码后的视频和音频数据会被按照特定的容器格式如MP4AVIMKV打包在一起容器中还包括了视频的元数据如分辨率帧率编码设置等以及其他可能的轨道如字幕打包好的视频文件最终以二进制形式存储在硬盘云存储或其它存储介质上

💗💗完成上述步骤后视频文件就形成了它包含了视频流音频流及元数据这个文件可以存储在计算机的硬盘驱动器固态硬盘外部硬盘USB闪存盘或者网络存储设备上存储时文件系统会管理文件的物理存储位置和访问信息

数据运算

逻辑运算

逻辑运算也称为布尔运算是一种基于数学逻辑的计算方式用于处理逻辑值通常为真或假对应于数值上的1或0的运算这些运算主要用于分析操作和传递逻辑关系是计算机科学数学逻辑学以及数字电路设计等多个领域的基础


逻辑运算主要包括以下几种基本操作
逻辑与AND当且仅当所有操作数都为真时结果才为真在电子电路中相当于两个开关都闭合电流才能流通
逻辑或OR如果至少有一个操作数为真则结果为真在电路中相当于两个开关中的任意一个闭合就能让电流通过
逻辑非NOT对单一操作数进行取反操作真变假假变真这是个一元运算符用于改变一个逻辑值的状态
逻辑异或XOR当且仅当操作数不同时结果为真如果两个操作数相同都是真或都是假结果为假在电路中代表两个输入状态的不一致性

💗💗逻辑运算广泛应用于编程语言中用以控制程序流程比如条件判断和循环结构此外在数据库查询人工智能硬件设计等领域也有重要应用逻辑运算的结果通常是一个布尔值True或False表示某种条件是否满足

移位运算

移位运算是计算机科学和数字逻辑中一种基本的位操作用于改变二进制数据中的各比特bit位置它通过将二进制数的所有位向左或向右移动指定的数量来实现移动过程中涉及到的几个关键概念包括


左移运算<<将二进制数的所有位向左移动指定位数移动后在原数的最右侧低位空出的位置上补0对于正数左移一位相当于该数乘以2的移位次数幂次每左移一位相当于该数值乘以2例如将二进制数0010十进制的2左移一位得到0100十进制的4
右移运算>>分为算术右移有符号右移和逻辑右移无符号右移
算术右移对于有符号整数保持符号位不变即最高位并将其他所有位向右移动指定位数左侧空出的位置用原来的符号位填充对于正数补0对于负数补1这种方式常用于保持数值的算术意义
逻辑右移>>>无论原数是正数还是负数都将所有位向右移动并在左侧空出的位置补0这种移位不考虑符号通常用于无符号整数的处理
循环移位不同于上述两种标准移位循环移位不会丢弃移出的位而是将其移回另一端左循环移位将最左侧移出的位添加到最右侧而右循环移位则相反

💗💗移位运算在计算机科学中有多种用途如快速的乘法和除法运算特别是当硬件乘除法器速度较慢或不存在时位字段操作数据压缩和解压以及在图形处理和加密算法中的特定应用等

算数运算

🔢整数


➕加法在二进制中加法遵循基本的算术规则但每位只能是0或1并且当和超过1时会产生进位
➖减法二进制减法类似于十进制但需借位时从高位借1当作2使用如果借位后仍不足以减表明正在进行负数运算这在计算机中通过补码后相加计算
✖️乘法二进制乘法也基于传统乘法规则但每一步都是按位相乘然后结果左移对应位数例如两个二进制数相乘时一个数的每一位乘以另一个数然后根据该位的位置左移相应位数最后将所有结果相加
➗除法二进制除法相对复杂它涉及到试商过程即将被除数与除数比较看能容纳多少个除数然后从被除数中减去这个数再在结果上对齐下一位继续比较此过程重复直到所有位都被处理完或达到指定精度
󠀥󠀥󠀥取模在二进制中取模运算相当于找到除法的余数这对于循环和重复模式识别非常重要
位运算包括ANDORXOR和NOT等直接作用于二进制位用于数据操作条件判断和算法优化与算术运算不同它们不改变数值大小而是改变数字的内部表示

🔢实数

在计算机中实数包括浮点数的加减法运算比整数运算要复杂因为实数不仅包含整数部分还有小数部分并且需要考虑指数阶码的概念来表示非常大或非常小的数

实数的加减法以浮点数存储的加法和减法被简化为小数点对齐后以符号加绝对值(符号和尾数的组合)存储的两个整数的加法和减法对于二进制下的实数加减法大致步骤如下这里以加法为例减法可以通过加法的逆运算实现即加上一个数的相反数

  • 对齐首先需要对齐两个浮点数的小数点这意味着调整它们的指数部分使它们具有相同的指数值这可能涉及到对较小数的尾数右移或对较大数的尾数左移
  • 执行加法一旦对齐就可以像加整数一样逐位相加尾数部分但是由于尾数是以1开头的隐含形式除了特殊值如NaN和无穷大实际操作的是一个1后面跟着尾数位的纯小数部分
  • 处理溢出相加过程中可能会产生进位这需要调整指数并重新对齐小数点或者在尾数部分产生一个进位到指数位导致指数增加
  • 规格化和舍入加法完成后结果可能需要规格化即确保第一个非零位为1通过调整指数和尾数实现此外可能还需要进行舍入处理以符合浮点数的有效位数要求
  • 检查特殊情况在运算前和运算后需要检查是否涉及无穷大NaN非数字或其他特殊情况并按规范处理这些情况

数据存储

所有的数据类型最终都是以二进制的方式进行存储的每种数据类型有其相对应的结构模型通过结构模型将数据转化为二进制数据然后这些二进制数据就可以进行储存了

  • 🏷️存储数据计算机是一台电子设备最好的数据存储方式应该是电子信号以电子信号的出现和消失(出现为1消失为0可以看做是二进制)来存储数据即以两种状态之一来存储数据
    • bitbinary digit缩写是存储在计算机中的最小单位0或1代表设备的某一种状态
    • 位模式位流表示数据的不同类型多个位组成一个位模式由16个位组成的位式1001010011111101如果我们需要存储1000个位模式每个16位需要16000个开关
    • 字节byte长度为8的位模式称为1字节
  • 🏷️组织数据在数据存储到计算机之前需要合理有序的组织成不同的格式将数据从计算机中输出也需要表现不同的形式

存储单元

每个存储单元由一个电容和一个访问晶体管组成当写入数据时电路控制晶体管打开允许电荷进入或离开电容从而设定电容的状态充电代表1未充电代表0读取时晶体管再次打开电容上的电荷差异影响到电路中的电压这个微小的电压变化会被放大并解读为对应的逻辑值

寄存器和锁存器

更基础的存储单位如寄存器和锁存器利用逻辑门电路来维持一个稳定的输出状态即使在没有外部信号的情况下也能保存数据这些组件构成了CPU内部快速访问的临时存储空间

逻辑门电路

逻辑门电路是数字电路的基础组件用于实现基本的逻辑运算

以下是几种常见的逻辑门电路


与门 (AND Gate) 所有输入必须为高电平逻辑1输出才是高电平逻辑表达式为 F = A * B其中A和B是输入F是输出
或门 (OR Gate) 只要至少一个输入为高电平输出就是高电平逻辑表达式为 F = A + B
非门 (NOT Gate) 或 反相器 (Inverter) 对单一输入进行翻转如果输入是高电平则输出是低电平反之亦然逻辑表达式为 F = ¬A 或 F = A'
与非门 (NAND Gate) 先执行与运算然后对结果进行非运算即使所有输入为高电平输出也是低电平逻辑表达式为 F = ¬(A * B)
或非门 (NOR Gate) 先执行或运算然后对结果进行非运算只要至少一个输入为高电平输出就是低电平逻辑表达式为 F = ¬(A + B)
异或门 (XOR Gate) 当输入不同时输出为高电平当输入相同时输出为低电平逻辑表达式为 F = A ⊕ B
同或门 (XNOR Gate) 与异或门相反当输入相同时输出为高电平当输入不同时输出为低电平逻辑表达式为 F = A ≢ B 或 F = ¬(A ⊕ B)
除了上述基本逻辑门还有复合逻辑门电路它们通过组合基本逻辑门来实现更复杂的逻辑功能随着技术的发展还有诸如传输门三态门多路复用器解复用器等特殊用途的逻辑门电路在现代电子设计中这些逻辑门大多数以集成电路的形式存在如TTL晶体管-晶体管逻辑和CMOS互补金属氧化物半导体技术

存储和读取过程

🏷️写入写入操作通过控制电路施加特定的电信号到存储单元改变其状态例如通过给电容充电或放电来编码信息

🏷️读取读取时电路会检测存储单元的状态并通过放大电路将其转化为可以被处理器识别的稳定信号

存储介质介绍

计算机目前存储信息的方式多种多样主要分为内存储器主存储器和外存储器辅助存储器两大类

🏷️内存储器

  • 动态随机存取存储器 (DRAM) 数据存储在电容中需要周期性刷新来维持电荷以保持数据不丢失写入时控制电路向电容充电或放电来表示1或0读取时检测电容的电荷状态并转换为相应的电信号
  • 静态随机存取存储器 (SRAM) 使用触发器通常为六个晶体管来保持数据状态无需刷新速度快但成本高存储过程同样涉及改变电路状态来代表二进制信息

🏷️外存储器

  • 硬盘驱动器 (HDD)数据通过磁头在旋转的磁盘表面记录磁化区域代表1和非磁化区域代表0写入时磁头改变磁盘表面的磁化方向读取时通过磁头感应磁化区域产生的微弱磁场转换为电信号
  • 固态驱动器 (SSD)基于闪存技术使用浮栅晶体管来存储电荷电荷的有无代表1或0写入时通过控制栅极电压改变浮栅中的电荷状态读取时检测晶体管的导电状态来确定数据
  • 闪存驱动器 (USB闪存盘) / SD卡工作原理与SSD相似也是基于闪存技术但体积更小便于携带数据存储和读取过程同SSD
  • 光盘存储CD/DVD/蓝光 利用激光在盘片上烧录微小的凹坑或平坦区分别代表1或0读取时激光反射差异被光传感器捕捉并转换为电信号
  • 磁带数据通过在磁带上排列磁化颗粒来表示磁化方向的不同代表二进制信息写入时磁头改变磁带表面的磁化状态读取时磁头检测磁化状态并转换为电信号

🏷️其他存储技术

  • 相变存储 (PCM) 材料在晶态和非晶态之间切换不同状态代表不同数据写入时通过加热材料并迅速冷却来改变状态读取时检测材料的电阻变化
  • 电阻式RAM (ReRAM) 改变材料电阻来存储信息通过施加电压改变材料电阻状态
  • 磁阻式RAM (MRAM) 利用磁性隧道结的电阻变化来存储数据读取时根据电阻大小区分数据

💗💗每种存储方式都依赖于二进制编码即通过电信号磁化状态电荷存储等方式将信息转换为一系列的1和0并利用特定的物理机制来实现数据的稳定存储与快速读取不同存储介质在速度容量成本耐用性等方面各有千秋适用于不同场景的需求

计算机基础

中央处理单元(CPU)

🏷️算术逻辑单元(ALU)用于数据运算

  • 逻辑运算
  • 移位运算
  • 算数运算

🏷️寄存器组用来存放临时数据的高速独立存储单元

  • 数据存储器保存运算的中间结果命名为R1~Rn
  • 指令存储器(IR)CPU从内存中逐条的取出指令并存储在指令存储器中解释并执行指令
  • 程序计数器(PC)保存当前正在执行的指令地址当前指令执行完成后计数器自动加1指向下一条指令的内存地址

🏷️控制单元控制各个子系统的操作控制是通过从控制单元到其他子系统的信号来进行的

存储器(内存)

内存是存储单元的集合每个存储单元都有唯一的标识称为地址地址用无符号二进制整数定义所有在存储器中标识的独立的地址单元的总数称为地址空间数据以二进制的形式在内存中传入传出可以是8位16位32位64位如果是8位一般称为一个字节

  • 随机存取存储器(RAM)易失性系统断电后信息(程序或数据)丢失
  • 只读存储器(ROM)非易失性系统断电数据不会丢失

输入/输出设备

可以使计算机与外界进行交互并在断电情况下存储程序和数据

  • 非存储设备键盘鼠标耳机显示器打印机等
  • 存储设备也称为辅助存储设备通常有磁介质和光介质两种

设备互联

🏷️CPU与主存储器之间通常由称为总线的三组线路进行连接每组线路都有多根线


数据总线由多根线组成每根线每次传送1个位的数据线的数量取决于计算机字的大小例如计算机的字是32位(4字节)那么需要32根线的数据总线以便同一时刻同时传送32位的数据
地址总线地址总线的线数取决于存储空间的大小例如存储器容量为2的n次方个字那么地址总线一次需要传送n位的地址数据因此需要n根
控制总线负责在中央存储器和内存之间传送信息例如必须有一个代码从CPU发送到内存用于指定进行的是读还是写操作控制总线的线数取决于计算机所需要的控制命令的总数如果计算机由2的m次方条控制命令那么控制总线就需要有m根因为m位可以定义2的m次个不同的操作

🏷️输入/输出设备

输入/输出设备不能直接与连接CPU和内存的总线相连因为输入/输出设备本质与CPU和内存的本质不同输入/输出设备都是磁性或光学设备而CPU和内存是电子设备与CPU和内存相比输入/输出设备的数据读取速度要慢的多因此必须要有一个中介来处理这种差异


输入/输出控制器连接输入/输出设备到总线上每一个输入/输出设备都有一个特定的控制器控制器清除了输入/输出设备与CPU及内存在本质上的障碍控制器可以是串行或并行的设备 - 串行控制器只有一根线连接到设备上 - 并行控制器有多根线连接到设备上一次能同时传送多个位

🏷️常用控制器SCSI火线USBHDMI等


SCSI是一个816或32根线的并行接口它提供了菊花链连接连接链的两端都必须有终结器并且每个设备都必须有唯一的地址(即目标ID)
火线IEEE标准1394规定的串行接口俗称火线它是一种高速的串行接口数据采用数据包的形式传送数据的传输速度高达50MB/s它可以在一条菊花链或树形连接(只用一根线)上连接多达63个设备和SCSI相比不需要终结器
USB通用串行总线用以连接与计算机相连的一些低速或高速设备多个设备可以被连接到一个USB控制器上这个USB控制器也称为根集线器USB-2(USB版本2.0)允许多达127个设备组成的树状拓扑结构连接到一个USB控制器上其中控制器作为树的根集线器作为中间节点设备作为末端节点控制器(根集线器)与其他集线器的不同之处在于控制器能感知到树中其他集线器的存在而其他集线器是被动的设备它们只能简单地传输数据当集线器从系统中移除时于此集线器相连的所有设备也被移除

🔍 USB2.0提供三种传送速率1.5Mbps(每秒兆位)12Mbps和480Mbps低速率可以用于低速设备如键盘鼠标中速率用于打印机高速率用于大容量的存储设备

🔍 USB3.0是对计算机连接方对通用串行总线(USB)标准的再一次修订增加了一个新的叫做SuperSpeed超感传输模式可以将数据传输速率提升至4.8Gbit/s根据承诺USB3.0的速率将更新至10Gbit/s
HDMI高清清晰度多媒体接口是现有视频模拟标准的数字化代替品它可以用来从一个资源向另一个兼容的计算机显示器视频投影仪数字电视数字音像设备等传输视频数据和数字音像数据

💗💗通常CPU使用相同的总线在主存和输入/输出设备之间读写数据唯一不同的是指令如果指令涉及到主存中的字那么数据就会在主存和CPU之间传输如果指令涉及到输入/输出设备那么数据会在输入/输出设备和CPU之间传输

设备寻址

🏷️有两种方式用来对输入/输出设备进行寻址


独立寻址用来读写内存的指令与用来读写输入/输出设备的指令是完全不同的有专门的指令完成对输入/输出设备的操作每个输入/输出设备有自己的地址输入/输出设备地址可以和内存地址相同
存储器映射寻址CPU将输入/输出控制器中的每个寄存器都看作内存中的某个存储字CPU有较小的指令集对内存操作的指令也可以操作输入/输出设备输入/输出控制器也占用了一部分内存地址

执行指令

通用计算机使用一系列指令来处理数据通过执行指令将输入数据转换为输出数据

⭐机器周期

计算机对每条指令使用取指令译码和执行三个阶段早期计算机每条指令的这三个阶段需要串行完成即一条指令执行完成后再执行下一条指令

🏷️执行指令的三个阶段


取指令CPU的控制单元命令系统将下一条将要执行的指令复制到CPU的指令寄存器中被复制的指令地址保存到程序计数器中复制完成后程序计数器自动加1指向内存中的下一条指令
译码当指令置于指令寄存器后该指令将由控制单元负责译码指令译码的结果是产生一系列系统可执行的二进制代码
执行指令译码完毕后控制单元发送任务命令到CPU的某个部件例如控制单元告知系统让它从内存中读数据这就是执行阶段

💗💗现代计算机使用流水线技术改善吞吐量(单位时间内完成的指令总数)即如果有多条指令那么当前指令在进行译码阶段时下一条指令就可以进入到取指令阶段不需要等当前指令执行完成下一条执行就可以执行


并行处理计算机传统上有单个控制单元单个算术逻辑单元单个内存单元现代计算机有多个控制单元多个算术逻辑单元多个内存单元每一个控制单元都能单独处理指令这种思想称为并行处理并行处理能改善吞吐量并行处理可以发生在数据流指令流或两者都有

🏷️并行处理把计算机的组织(从数据处理来看)分成4类

  • SISD单指令流单数据流
  • SIMD单指令流多数据流
  • MISD多指令流单数据流
  • MIMD多指令流多数据流

⭐输入/输出操作

计算机需要通过指令把数据从I/O设备传输到CPU和内存因为I/O设备的运行速度比CPU慢因此CPU的操作在某种程度上必须和I/O设备同步

🏷️有三种用于同步的方法


程序控制输入/输出CPU等待I/O设备缺点是CPU需要不时地检查设备状态影响CPU的性能
中断控制入/输出首先CPU告知I/O设备即将开始数据传输CPU不需要不停地检查I/O设备状态当I/O设备准备好时I/0设备通知(中断)CPU这个过程中CPU可以做其他工作CPU时间没有被浪费
直接存储器存取(DMA)由DMA控制器来承担CPU的一些功能主要用于高速I/O设备传输大量的数据如硬盘优点是CPU工作效率很高缺点是需要增加DMA控制硬件

计算机模型

图灵模型

图灵模型也称为图灵机或者图灵计算模型是由英国数学家艾伦·图灵Alan Turing在1936年提出的理论概念是计算机科学和理论计算机领域内的一个基础且重要的抽象计算模型这个模型不仅对理解计算的本质提供了深刻的见解也是现代计算机设计的基础之一

图灵模型的核心思想是描述一种理论上能够执行任何计算任务的通用机器即通用图灵机Universal Turing Machine这一模型可以被视为一个理想化的数据处理器

🏷️工作流程简述


输入数据图灵机接收一串符号通常表示为0和1的序列作为输入
状态转换图灵机有一个内部状态寄存器能够根据当前状态和读取的输入符号来改变状态并决定下一步行动
读写头它有一个能在输入带上读取和写入符号的读写头可以根据规则修改输入带上的内容
移动根据当前状态和读取的符号图灵机的读写头可以在输入带上向左或向右移动
程序图灵机的行为由一组规则定义这些规则指导它如何基于当前状态和读入的符号变换状态写入新符号以及移动读写头这组规则可以视为程序或指令集
输出经过一系列状态转换后输入带上最终的状态或部分区域可以被视为输出结果

💗💗图灵模型的关键特性在于其通用性意味着只要有一台图灵机和适当的编码方法原则上可以模拟任何其他图灵机的计算过程从而执行任何可计算函数这一理论为算法可计算性的概念奠定了基础并引出了后来的Church-Turing Thesis即所有实际可执行的计算过程都能在图灵机上实现因此图灵模型不仅是理论计算机科学的基石也是现代计算机体系结构和编程语言设计的理论基础

冯·诺依曼模型

冯·诺依曼模型又称为冯·诺依曼架构Von Neumann architecture是由匈牙利裔美国数学家约翰·冯·诺依曼在20世纪40年代提出的一种经典计算机设计架构这一架构成为了现代计算机设计的基本蓝图

🏷️冯·诺依曼模型的核心特征


二进制系统计算机内部使用二进制0和1来表示数据和指令这是基于图灵机理论和电子技术实现的自然选择
存储程序概念这是冯·诺依曼架构最核心的特点程序和数据都被视为同等的二进制信息存储在相同的内存中计算机在运行时会依次从内存中取出指令进行解码并执行这意味着计算机可以自动地顺序执行复杂的程序
⭐五大基本组成部分

1️⃣ 中央处理单元CPU负责执行所有的数据处理和指令控制任务包含算术逻辑单元ALU用于执行基本的数学和逻辑运算以及控制单元CU用于协调和控制整个系统的操作
2️⃣ 内存Memory存储程序指令和数据CPU在执行过程中可以快速访问
3️⃣ 输入设备如键盘鼠标等用于将外部世界的信号转化为计算机可识别的二进制数据输入到计算机中
4️⃣ 输出设备如显示器打印机等将计算机处理的结果转换成人或其他系统可以理解的形式输出
5️⃣ 输入/输出I/O系统管理输入设备和输出设备与CPU及内存之间的数据传输
指令和数据的访问方式冯·诺依曼架构采用的是顺序执行模式即CPU按照指令的存储顺序逐一读取并执行同时根据需要访问数据这种设计在早期极大地简化了计算机的设计和编程但随着技术的发展也显现出了一些局限性比如CPU和内存之间的速度不匹配问题所谓的冯·诺依曼瓶颈

💗💗尽管现代计算机体系结构在某些方面已经超越了原始的冯·诺依曼模型例如引入了缓存多核处理器并行处理等技术但其基本框架仍然是现代计算机设计的基石

计算机网络

网络概述

网络是一系列可用于通信的设备台式机笔记本电脑手机等通过路由器交换机调制调节器相互连接构成的

网线接口

网线接口包含了8根线这些线按照特定的排列和功能配对使用主要遵循T568A或T568B线序标准其中T568B是最常见的标准以下是T568B线序下每根线的颜色及其功能概述

  • 白橙/橙White Orange/Orange这是一对线用于发送Tx+Tx-数据橙色线携带正信号白橙色线携带负信号
  • 白绿/绿White Green/Green这同样是一对线但用于接收Rx+Rx-数据绿色线携带正信号白绿色线携带负信号

💗💗这两对线1&2, 3&6是实现基本以太网连接如10BASE-T100BASE-TX1000BASE-T所必需的负责数据的发送与接收

  • 白蓝/蓝White Blue/Blue在某些情况下如使用10BASE-T或100BASE-TX时这根线4&5可能作为备用线对或者在某些老式网络设备中用于传输电话语音信号
  • 白棕/棕White Brown/Brown这一对线7&8同样在以太网数据传输中通常是备用线但在某些场合下用于POEPower over Ethernet以太网供电中的备用线对或者是接地线确保电气安全

💗💗需要注意的是虽然在10/100Mbps网络中仅使用了1236这四根线但在支持千兆以太网1000BASE-T的网络中所有八根线都被利用起来以提供全双工的高速数据传输并且要求线对严格遵循双绞原则以减少串扰和提高信号完整性

🏷️线的颜色所对应的位置

从左至右看插头的引脚排列:

T568A 线序: 白绿 –> 绿色 –> 白橙 –> 蓝色 –> 白蓝 –> 橙色 –> 白棕 –> 棕色

T568B 线序白橙 –> 橙色 –> 白绿 –> 蓝色 –> 白蓝 –> 绿色 –> 白棕 –> 棕色

💗💗在实际应用中T568B标准更为常见直通线即两端水晶头都按相同标准如T568B到T568B或T568A到T568A用于连接电脑到交换机路由器调制解调器等而交叉线一端T568B另一端T568A在过去用于连接相同类型的设备如两台电脑直接相连但在现代网络设备中由于自动协商和MDI/MDI-X功能直通线通常也能正常工作

📶局域网

局域网(LAN)通常是与单个办公室建筑或校园内的几个主机相连的私有网络在一个局域网中每台主机都有作为这台主机在局域网中唯一定义的一个标识和一个地址一台主机向另一台主机发送的数据包中包括源主机和目标主机的地址

📶广域网

广域网(WAN)局域网的大小通常是受限的跨越一个办公室一座大楼或一个校园而广域网的地理跨度更大可以是一个城镇一个州一个国家甚至横跨世界局域网将主机相连广域网则将交换机路由器或调制调节器之类的连接设备互连局域网为机构私有广域网则有通信公司创建并运营


点对点广域网通过传输媒介(电缆或无线)连接两个通信设备的网络
交换广域网至少两个端的网络交换广域网用于当今全球通信的骨干网是几个点对点广域网通过开关连接产生的结合体

📶城域网

城域网(MAN)是一种规模介于局域网LAN和广域网WAN之间的计算机网络城域网覆盖的地理范围通常在几十公里到几百公里之间它可以连接同一城市内部或邻近地区的多个局域网如企业学校政府机构的内部网络以及可能的广域网接入点它的设计目标是提供大范围内的高速数据传输能力服务于大量用户

📶因特网

因特网Internet又称国际互联网是一个全球性的巨大计算机网络系统它通过一系列技术和协议将世界各地数百万个计算机网络和数亿台计算机主机相互连接起来因特网的核心特性在于其普遍的连通性和信息共享能力它允许用户跨越地域限制访问和交换信息



骨干网在顶层为通信公司拥有通过一些复杂的交换系统相互连接这些交换系统称为网络对等汇点

供应商网络在第二层规模较小的网络付费使用骨干网上的一些服务与骨干网相连有时也连接其他供应商网络

客户网络在边缘真正使用基于因特网服务的网络向供应商网络付费得到服务
💗💗骨干网和供应商网络也被称为因特网服务供应商(ISP)骨干网被称为国际因特网服务供应商供应商网络被称为国内或地域性因特网服务供应商

无线网络

无线网络Wireless Network是一种利用无线电波在空中传输数据实现网络通信的技术它使得电子设备能够在没有物理连接如网线的情况下访问互联网或相互通信

🏷️基础概念

  • 无线电波无线网络的核心是利用无线电频率RF在空气中传播数据常见的频率范围包括2.4 GHz和5 GHz频段
  • 标准无线网络遵循一系列国际标准最主要的是IEEE 802.11系列标准包括802.11a802.11b802.11g802.11n802.11ac和最新的802.11ax也称为Wi-Fi 6每个标准都有不同的传输速度频率带宽和特性

🏷️无线网络的几种分类


无线局域网WLAN, Wireless Local Area Network最常见的形式如家庭办公室中的Wi-Fi网络覆盖范围一般几十米至几百米不等
无线个人局域网WPAN, Wireless Personal Area Network如蓝牙技术用于短距离设备间通信如耳机手机电脑间的连接
无线城域网WMAN, Wireless Metropolitan Area Network覆盖城市范围的网络如WiMAX技术用于提供更广泛的无线宽带接入
无线广域网WWAN, Wireless Wide Area Network如移动网络4G/5G覆盖更广阔的地理区域支持移动设备的远程数据通信

🏷️无线网络的特点与优势

  • 可移动性用户可以在覆盖范围内自由移动不受线缆束缚
  • 易于安装与扩展不需要布线减少了安装成本和时间且网络扩展灵活
  • 成本效益减少了材料和维护成本特别适合临时或快速部署的场景
  • 灵活性网络配置和修改更加简单便于适应环境变化或增加新设备
  • 普及性几乎所有的现代智能设备手机平板笔记本等都支持无线网络连接尤其是Wi-Fi

🏷️无线网络的组成部分


无线接入点AP, Access Point负责创建无线网络并作为无线设备与有线网络之间的桥梁
客户端设备如手机电脑通过无线网卡接收和发送数据
天线用于增强信号的发送和接收有时内置在AP或客户端设备中

🏷️安全性

无线网络安全是一个重要议题常见的安全措施包括WPA3加密协议MAC地址过滤SSID隐藏以及防火墙设置等以保护网络不被未授权访问

🏷️设置与管理

无线网络的设置通常涉及配置无线路由器包括设置网络名称SSID安全密钥频道选择信号强度调整等用户可以通过浏览器访问路由器的管理界面通常是特定的IP地址如192.168.1.1或192.168.0.1来进行配置

💗💗综上所述无线网络以其灵活性便捷性和广泛适用性已成为现代社会不可或缺的一部分深刻影响着我们的生活和工作方式

网络协议

🏷️网络协议定义了发送器接收器以及所有中间设备必须遵循的以保证有效通信的规则

🏷️协议分层简单的通信可能只需要一条简单的协议当通信变得复杂可能需要将任务分配到不同的协议层那么在每一个协议层都需要一个协议


协议分层的第一条原则想要达到双向通信需要保证每一个协议层都可以进行两个对立且方向相反的工作
协议分层的第二条原则两个站点中每一层的两个对象必须完全相同如两个站点中第一层都是一封信第二层对象都是密文信件第三层的对象都是明文信件

🏷️逻辑连接发送该协议层创建的对象是基于每层的逻辑(假想的)连接逻辑连接可以帮助我们更好地理解在数据通信和建立数据关系网络中遇到的分层工作

TCP/IP协议

TCP/IP协议全称为传输控制协议/网际协议Transmission Control Protocol/Internet Protocol是互联网上广泛采用的一套通信协议它定义了电子设备如何连接网络以及数据如何在网络上进行传输的标准

TCP/IP协议不是一个单一的协议而是一个协议簇包含了多个层级通常分应用层传输层网络层数据链路层网络接口层物理层等几个层级每个层级都有其对应的协议每一层都为上一层提供服务同时隐藏了下一层的具体实现细节每个层级共同协作这使得整个协议体系既灵活又易于维护实现了网络通信的各种需求

⭐应用层

应用层Application Layer负责处理特定的应用程序细节并提供服务分为C/S标准模式P2P新模式应用层作为最顶层直接面向用户和应用程序提供了多种协议来支持不同的网络服务

🏷️一些常见的TCP/IP应用层协议


HTTP (Hypertext Transfer Protocol): 这是最著名的应用层协议之一用于在万维网上传输数据主要应用于网页浏览HTTP定义了客户端通常是浏览器和服务器之间的通信格式使得网页图片视频等资源能够被请求和传输
HTTPS (HTTP Secure): 是HTTP协议的安全版本通过SSL/TLS协议对数据进行加密确保数据传输的安全性常用于需要安全保密的网站访问如银行电子商务等
FTP (File Transfer Protocol): 用于在网络上进行文件传输它提供了一套标准命令集让用户可以从远程主机上下载或上传文件
SMTP (Simple Mail Transfer Protocol): 负责电子邮件的发送SMTP定义了邮件如何在邮件服务器之间进行传递的规则
POP3 (Post Office Protocol version 3) 和 IMAP (Internet Message Access Protocol): 这两个协议用于电子邮件的接收POP3允许用户下载邮件到本地设备并删除服务器上的副本除非设置保留副本而IMAP则允许用户在邮件服务器上管理邮件如查看邮件标题下载邮件部分或全部内容等更适用于多设备同步邮件
DNS (Domain Name System): 将人类可读的域名如www.example.com转换为IP地址以便计算机能够找到互联网上的对应服务器
SSH (Secure Shell): 提供了一个安全的远程登录和其他网络服务的通道允许用户通过不安全的网络安全地传输数据常用于远程管理服务器文件传输等
Telnet: 是一个较早的远程终端协议允许用户登录到远程主机并进行操作由于其数据传输未加密现代应用中已较少使用被SSH所取代
SNMP (Simple Network Management Protocol): 用于网络设备的管理和监控如路由器交换机等可以收集网络信息修改设备配置接收报警等
DHCP (Dynamic Host Configuration Protocol): 自动给网络中的设备分配IP地址子网掩码默认网关等网络配置信息简化了网络管理任务

⭐传输层

传输层Transport Layer它的主要职责是为应用层提供端到端的通信服务传输层的核心功能包括建立维护和终止连接确保数据的可靠传输或提供无连接服务以及进行流量控制和拥塞控制在TCP/IP协议族中传输层主要有两个协议TCPTransmission Control Protocol和UDPUser Datagram Protocol

🏷️TCP/UDP协议


TCP (Transmission Control Protocol)协议

➡️ 面向连接在数据传输前TCP要求通信双方先建立一个连接这个过程涉及到三次握手确保双方都准备好进行数据传输
➡️ 可靠性TCP通过序号确认应答重传机制错误校验等手段确保数据的可靠传输即使在网络状况不佳的情况下也能尽可能保证数据的完整性
➡️ 流量控制使用滑动窗口机制来控制发送方的发送速率防止接收方因来不及处理而造成数据丢失
➡️ 拥塞控制动态调整发送速率以避免网络拥塞例如慢启动拥塞避免快速重传和恢复等算法
➡️ 全双工通信TCP连接可以同时进行双向的数据传输
➡️ 连接终止数据传输完毕后通过四次挥手的过程优雅地关闭连接释放资源
UDP (User Datagram Protocol)协议

➡️ 无连接UDP不建立连接直接发送数据报文降低了通信的延迟
➡️ 不可靠传输UDP不保证数据的可靠到达也不进行错误校验数据可能丢失重复或乱序
➡️ 头部开销小相比TCPUDP的头部更简单占用的字节少适用于对实时性要求高能容忍一定丢包率的应用
➡️ 端口与TCP一样UDP也使用端口号来区分同一主机上的不同应用服务
➡️ 应用场景适用于DNS查询在线视频语音通话等对实时性要求较高但能容忍少量数据丢失的场景

传输层使用端口号来识别同一台主机上运行的不同应用程序每个传输层的连接由源IP地址源端口号目的IP地址目的端口号唯一确定熟知端口号0-1023通常被预留给知名的服务如HTTP80HTTPS443SSH22注册端口号1024-49151用于公共服务而临时端口号49152-65535则是为客户端程序动态分配的

传输层是网络通信中非常关键的一环它通过TCP和UDP两种协议分别满足了不同应用场景对于数据传输可靠性和效率的需求TCP保证了数据的可靠性和有序性适用于文件传输网页浏览等而UDP则以其低延迟和轻量级特性适用于DNS查询在线视频在线游戏语音通话等对实时性要求较高但能容忍少量数据丢失的场景

⭐网络层

网络层Internet Layer在TCP/IP模型中也被称为互联网层是负责实现不同网络间的互连和通信的关键层次它主要关注的是将数据包或称为分组从源主机传输到目标主机的过程即便这两台主机位于不同的网络中网络层的核心功能包括路由选择分组转发以及提供逻辑寻址方案如IP地址来标识网络中的每一台设备

🏷️IP协议 (Internet Protocol)


IP协议是网络层的核心协议负责提供基本的数据包传输服务目前广泛使用的有两个版本IPv4和IPv6IPv4使用32位地址而IPv6使用128位地址以解决IPv4地址枯竭的问题
功能IP协议的主要功能包括数据包的封装寻址分片与重组以及提供无连接的数据报服务它不保证数据包的按序到达或无丢失这些特性通常由传输层如TCP来处理

🏷️路由选择 (Routing)


路由选择是网络层的关键任务之一其目的是确定数据包从源到目的地的最佳路径这一过程依赖于路由表路由表中包含了到不同网络的路径信息
路由协议为了构建和维护路由表网络层使用各种路由协议如静态路由RIPRouting Information ProtocolOSPFOpen Shortest Path FirstBGPBorder Gateway Protocol

🏷️分组转发 (Packet Forwarding)


分组转发是指网络设备如路由器基于分组头部的信息将数据包从一个网络接口转发到另一个网络接口直至到达目的地的过程
路由器作为网络层的实体路由器执行路由选择和分组转发它们根据IP地址来决定数据包的下一步走向

🏷️地址解析协议 (ARP)


ARP用于将IP地址映射到数据链路层的MAC地址这是网络层与数据链路层交互的一个重要环节当设备需要发送数据包时如果只知道目标IP地址就需要通过ARP来获取目标设备的MAC地址

🏷️ICMP协议 (Internet Control Message Protocol)


ICMP用于在IP主机路由器之间传递控制消息和差错报告比如目标不可达超时有助于进行网络诊断和故障排查

🏷️异构网络互联


网络层还负责实现不同类型的网络如以太网Wi-Fi卫星网络等之间的互连确保数据能够在多样化的网络环境下无缝传输

🏷️NAT (Network Address Translation)


虽然严格来说NAT不是网络层协议的一部分但它在网络层起着重要作用特别是在解决公有IP地址不足的问题上NAT允许私有网络内的多个设备共享一个或少数几个公有IP地址访问互联网

💗💗总的来说网络层通过提供逻辑寻址路由选择分组转发等功能实现了跨越多个网络的端到端通信是构建互联网的基础

⭐数据链路层

数据链路层Data Link Layer也叫网络接口层主要任务是负责在两个相邻网络实体之间的数据传输确保无差错高效地传输数据帧

🏷️功能概述


封装成帧Framing数据链路层将网络层的数据报如IP数据包封装成数据帧添加帧头和帧尾包含源和目标MAC地址帧类型等控制信息以便在物理链路上进行传输
差错检测通过循环冗余校验CRC等方法数据链路层能检测到数据在传输过程中是否发生错误但不一定能纠正错误
流量控制为了避免发送方过快发送数据导致接收方无法及时处理数据链路层实施流量控制机制确保数据传输速率与接收方处理能力相匹配
介质访问控制MAC在共享介质的网络中如以太网数据链路层定义了如何控制多个设备访问介质的规则例如CSMA/CD载波监听多路访问/冲突检测或CSMA/CA用于无线局域网
寻址数据链路层使用MAC地址物理地址来标识网络中的每个设备实现帧的定向传输
透明传输确保数据链路层传输的数据不会被帧定界符干扰即特殊字符不会被误认为是帧的开始或结束标志

🏷️两种主要服务


无连接服务如Ethernet每个帧独立发送不预先建立连接
面向连接服务如PPP点对点协议和HDLC高级数据链路控制在数据传输前需建立连接确保数据的顺序传输和可靠性

🏷️常见协议


Ethernet以太网广泛使用的局域网协议定义了物理层和数据链路层的规范
PPP点对点协议常用于拨号网络和串行链路提供点对点连接
IEEE 802.11Wi-Fi无线局域网的标准数据链路层包括了逻辑链路控制LLC和媒体访问控制MAC子层
Token Ring一种早期的局域网技术采用令牌传递的方式控制网络访问

🏷️MAC与LLC


MAC子层负责物理地址寻址介质访问控制和错误检测
LLC子层Logical Link Control提供数据链路层的高层协议与MAC子层之间的接口负责帧的封装与解封差错控制和流量控制等

💗💗数据链路层是确保数据在物理媒介上准确有效传输的基础为网络层提供了可靠的数据传输服务是计算机网络中的关键层次之一

⭐物理层

物理层是最基础的一层它直接与传输介质如双绞线光纤无线电波等打交道负责在通信信道上传输原始比特bit

🏷️信号传输与编码


信号表示物理层定义了数据是如何被表示为物理信号的例如电压的高低光的强弱或无线电信号的频率和幅度
编码方案使用如不归零编码NRZ曼彻斯特编码或差分曼彻斯特编码等将数据比特转换为可以在物理媒介上传输的信号形式

🏷️物理接口特性


电气特性定义了接口的电压电流水平阻抗匹配等电气参数
机械特性描述了连接器的物理形状尺寸引脚排列等
功能特性规定了接口的功能如哪些引脚负责发送数据哪些负责接收
规程特性说明了接口操作的规程如初始化数据传输状态指示等

🏷️数据传输模式


单工数据只能在一个方向上传输
半双工数据可以在两个方向上传输但不能同时进行
全双工允许同时进行双向的数据传输提高了通信效率

🏷️传输介质


有线介质包括双绞线UTPSTP同轴电缆光纤等
无线介质利用无线电波微波红外线等进行无线传输

🏷️信道复用技术


频分复用FDM将可用频谱分割成多个频道每个频道传输一路信号
时分复用TDM在时间上划分信道每个时间段分配给一个信号
统计时分复用STDM动态分配时隙提高信道利用率
波分复用WDM在光纤中使用不同的光波长携带不同信号
码分复用CDM通过独特的代码序列区分不同信号常用于CDMA技术

🏷️传输速率与限制


奈氏准则给出了在无噪声信道中最大数据传输速率的理论上限
香农定理在考虑噪声情况下给出了信息传输速率的最大值即信道容量

🏷️物理层设备


中继器用于放大信号延长传输距离但不改变信号内容
集线器多端口中继器用于连接多条线路所有端口共享同一信道

💗💗物理层的实现细节高度依赖于具体的网络技术和传输介质它的设计目标是在各种网络环境中提供稳定可靠的基础传输服务为上层协议提供透明的比特流传输通道

HTTP协议

HTTPHypertext Transfer Protocol超文本传输协议是一种应用层协议用于在万维网WWWWorld Wide Web上进行分布式协作式和超媒体信息系统的通信它是互联网上最广泛使用的基础协议之一主要负责从Web服务器向Web浏览器传输网页内容同时也支持其他类型的文件和数据传输

🏷️核心概念


客户端-服务器模型HTTP基于客户端如Web浏览器移动应用等和服务器存储和管理内容的计算机之间的请求-响应模型客户端发起请求获取资源服务器处理请求并返回响应
无状态性HTTP协议是无状态的即服务器不保存关于客户端的任何信息如 cookies 除外每个请求都是独立的不依赖于前一个请求
请求和响应消息结构HTTP通信由客户端发送的请求和服务器返回的响应组成请求包括请求行方法URL协议版本请求头和可选的消息体响应包括状态行协议版本状态码状态消息响应头和可选的消息体
方法请求类型常见的HTTP方法有GET请求读取指定的页面或信息POST提交数据给服务器处理PUT替换服务器上的资源DELETE删除服务器上的资源
URLUniform Resource Locator用于定位互联网上的资源HTTP请求中的URL告诉服务器要访问的具体资源
端口HTTP默认使用TCP端口80HTTPSHTTP Secure使用443端口后者是在HTTP基础上增加了SSL/TLS加密层以保障数据传输的安全性
缓存HTTP协议支持缓存机制可以减少网络带宽消耗和提高响应速度通过响应头中的Cache-ControlExpires等字段控制

🏷️工作流程简述

  1. 客户端通过TCP与服务器建立连接
  2. 客户端发送HTTP请求到服务器请求中包含请求方法URL协议版本及可能的头部和数据
  3. 服务器接收请求处理请求比如从数据库检索信息执行脚本等然后准备响应
  4. 服务器将响应数据包括状态码响应头部和可能的消息体通过HTTP响应消息发送回客户端
  5. 客户端接收响应渲染或处理响应内容然后根据需要可能关闭连接或继续与服务器通信
  6. 连接可以被保持以供后续请求复用长连接或者在每次请求-响应后关闭短连接

💗💗HTTP协议的持续发展如HTTP/2和HTTP/3引入了多路复用二进制分帧服务器推送等特性进一步提高了性能和效率

SSH协议

SSHSecure Shell协议是一种在网络层基础上提供的安全协议它旨在为网络服务提供安全的传输环境特别是在不安全的网络中SSH协议允许用户通过加密的通道进行远程登录和其他网络服务从而保护数据的机密性和完整性同时也提供了用户认证机制确保通信双方的身份真实性

🏷️基本原理与组成部分


加密传输SSH协议使用加密技术对所有传输的数据进行加密包括命令响应文件传输等以防止数据被窃听或篡改它结合了对称加密用于快速加密大量数据和非对称加密用于安全地交换密钥
算法协商在建立连接时客户端和服务端会根据各自支持的算法列表协商确定用于加密认证和数据完整性检查的具体算法
密钥交换通过一种安全的密钥交换协议如Diffie-Hellman客户端和服务器动态生成一个会话密钥这个密钥仅用于本次会话进一步增强了安全性
用户认证SSH支持多种认证方式包括基于密码的认证基于公钥的认证等公钥认证较为安全因为它不需要用户在网络上发送密码而是利用一对公钥和私钥进行身份验证
会话管理一旦认证成功SSH协议为用户提供了一个安全的会话通道用户可以在该通道内执行远程命令传输文件通过SFTP或SCP等操作

🏷️SSH协议框架


传输层协议提供服务器认证数据加密和完整性校验
用户认证协议处理客户端的身份验证
连接协议允许在一个SSH连接内部创建多个逻辑通道每个通道可以承载不同的服务如终端会话文件传输等

💗💗SSH广泛应用于远程系统管理文件传输SFTPSCP安全隧道建立端口转发等场景是系统管理员和开发人员不可或缺的工具之一它替代了早期不安全的协议如Telnet和FTP显著提升了网络操作的安全性

FTP协议

FTPFile Transfer Protocol文件传输协议是一种广泛使用的应用层协议旨在促进在网络上的两台计算机之间进行文件传输它是互联网协议套件的一部分运行在TCP/IP协议之上确保了数据传输的可靠性和效率FTP协议使得用户能够跨平台不论操作系统或文件系统类型传输文件进行文件管理和共享

🏷️关键组件

  • FTP服务器存储文件的主机等待客户端的连接请求以进行文件传输或其他FTP操作
  • FTP客户端发起连接请求的程序允许用户与FTP服务器交互执行上传下载删除重命名等文件操作

🏷️工作模式

  • 主动模式Active Mode客户端连接到FTP服务器的21端口发送命令然后开放一个随机端口等待服务器来建立数据连接服务器通过20端口连接到客户端的这个随机端口传输数据
  • 被动模式Passive Mode客户端在控制连接上请求进入被动模式后服务器会返回一个随机的端口号之后客户端主动发起数据连接到该端口绕过了一些网络环境下的防火墙限制

🏷️特性

  • 认证机制支持匿名访问和密码验证访问增强安全性
  • 二进制和文本模式适应不同类型的文件传输确保文件内容正确无误
  • 目录操作允许用户在服务器上创建删除重命名目录类似于在本地文件系统中的操作

🏷️优缺点

  • 优点广泛支持适用于多种场景的文件传输提供基本的权限控制和认证
  • 缺点因明文传输用户名和密码存在安全风险主动模式在某些网络配置下可能遇到问题相比现代协议如SFTPSecure File Transfer ProtocolFTP缺少加密数据传输不够安全

💗💗FTP协议虽然历史悠久但由于安全性的考量现在越来越多的场景倾向于使用更安全的文件传输协议如SFTPFTPSFTP over SSL/TLS

SMTP协议

SMTPSimple Mail Transfer Protocol简单邮件传输协议SMTP是一种基于TCP/IP的应用层协议设计用于在互联网上传输电子邮件它是目前最常用的电子邮件发送标准SMTP协议本身并不直接涉及邮件的接收邮件接收通常使用POP3Post Office Protocol version 3或IMAPInternet Message Access Protocol协议POP3允许用户下载邮件到本地设备并通常删除服务器上的副本而IMAP则允许用户在服务器上管理邮件支持邮件的在线访问和管理

🏷️工作流程简述

  1. 连接建立客户端如邮件用户代理MUA与SMTP服务器也称为邮件传输代理MTA建立TCP连接通常使用端口25或587对于STARTTLS加密连接
  2. 握手与验证客户端向服务器发送HELO/EHLO命令以标识自己并可能需要通过AUTH命令进行身份验证尤其是在发送安全如SSL/TLS加密邮件时
  3. 邮件传输
    • 客户端发送MAIL FROM命令指定邮件发送者的邮箱地址
    • 紧接着是RCPT TO命令指定一个或多个邮件接收者的地址
    • 服务器对每个命令做出响应如果接受则返回相应的成功代码如250 OK
    • 客户端发送DATA命令表示即将开始发送邮件的实际内容
    • 服务器响应354 Start mail input; end with <CRLF>.<CRLF>指示客户端可以开始发送邮件数据
    • 客户端发送邮件头包含发件人收件人主题等信息和邮件正文最后以一个空行CRLF.CRLF结束数据传输
  4. 断开连接邮件数据传输完成后客户端发送QUIT命令服务器确认后关闭连接

💗💗SMTP协议经历了多次扩展和改进包括增加了对TLS/SSL安全加密的支持SMTPS和STARTTLS以保护邮件在传输过程中的安全性和隐私

IPV4协议

IPv4Internet Protocol Version 4是互联网协议的第四版它是构成现代互联网基础的最重要协议之一

🏷️地址结构

IPv4使用32位的地址空间每个地址通常表示为四个十进制数中间由点.分隔比如 192.168.1.1这样的表示方法对应于四个8位的字节所以IPv4的地址范围是从 0.0.0.0 到 255.255.255.255理论上允许的最大地址数量为2^32即大约43亿个不同的地址

🏷️地址分类

IPv4地址被分为五类ABCDE其中ABC三类为主要的地址类型用于分配给网络设备D类地址用于多播而E类地址保留用于实验和未来使用

🏷️子网掩码

为了更有效地利用地址空间并创建子网引入了子网掩码子网掩码与IP地址一起确定了一个网络中的主机部分和网络部分常见的子网划分有/24即255.255.255.0

🏷️数据包结构

IPv4数据包包含一个头部和数据负载头部至少有20字节最多60字节包含以下字段

  • 版本4位标识协议版本对于IPv4始终为4
  • 首部长度4位指示IP头部的长度单位为4字节
  • 服务类型TOS8位后来被区分服务代码点DSCP和 Explicit Congestion Notification (ECN)所替代
  • 总长度16位整个IP数据包头部加数据的长度
  • 标识符标志片偏移合共16位+3位+13位用于分片和重组数据包
  • 生存时间TTL8位限制数据包在网络中的生存时间每经过一个路由器减1为0时被丢弃
  • 协议8位标识数据部分使用的上层协议如TCPUDP
  • 首部校验和16位确保头部完整性
  • 源IP地址和目的IP地址各32位发送方和接收方的地址
  • 可选项可变长度用于特殊用途如时间戳等

🏷️无连接协议

IPv4是一个无连接的协议它不维护端到端的连接状态每个数据包独立寻址和路由不保证顺序或可靠传输这些特性由上层协议如TCP来保证

🏷️直接广播和本地广播

  • 直接广播允许数据包发送到特定网络上的所有主机格式为 x.x.x.255其中x代表网络部分
  • 本地广播则限定在同一物理网络段内使用全1的广播地址 255.255.255.255

IPV6协议

IPv6Internet Protocol Version 6是为了解决IPv4地址枯竭问题以及适应互联网持续增长的需求而设计的新一代互联网协议

🏷️地址结构

IPv6使用128位的地址空间通常以8组由冒号分隔的十六进制数表示例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334为了简化书写连续的零可以被一对冒号::代替但每个地址只能有一个这样的替换

🏷️地址类型

IPv6定义了三种主要的地址类型

  • 单播地址Unicast直接指向一个接口
  • 多播地址Multicast用于向一组接口发送数据类似于IPv4的多播
  • 任播地址Anycast发送到最近的一个根据路由度量具有该地址的接口增加了路由灵活性和服务可靠性

🏷️数据包结构

IPv6的数据包结构进行了简化和优化

  • 基本首部固定为40字节这使得处理效率提高因为路由器无需检查可变长度的首部
  • 去除了IPv4中的头部长度字段标识标志段偏移校验和头部校验和在IPv6中仅在上层协议如TCP和UDP中进行和选项字段增加了流标签Flow Label字段用于标识属于同一的数据包有助于实现更好的服务质量QoS
  • 引入了扩展首部Extension Headers这些首部可根据需要插入到基本首部之后提供了灵活的功能扩展如路由选择分段认证等且只有需要处理的节点才需处理相应的扩展首部

🏷️自动配置

IPv6支持两种自动配置方式

  • 无状态地址自动配置SLAAC主机通过路由器宣告的前缀自动配置其接口地址结合MAC地址生成一个全局唯一的IPv6地址
  • 有状态DHCPv6类似于IPv4的DHCP提供更复杂的配置选项包括地址分配DNS服务器信息等

🏷️安全性

IPv6设计之初就考虑了安全性虽然没有直接内置加密功能但鼓励使用IPSecInternet Protocol Security作为标准安全机制为数据包提供验证完整性和保密性

🏷️兼容性与过渡技术

为了从IPv4平滑过渡到IPv6开发了多种过渡技术包括双栈Dual-Stack隧道技术如IPv6 over IPv4隧道翻译技术如NAT64这些技术允许IPv4和IPv6网络共存和通信

🏷️地址空间

IPv6的巨大地址空间约3.4×10^38个地址不仅解决了地址枯竭问题也为每个设备直接分配全球唯一地址成为可能促进了物联网IoT等新兴技术的发展

💗💗总的来说IPv6不仅提供了几乎无限的地址空间还增强了网络性能安全性和管理便利性是互联网基础设施的重要升级

域名系统

域名系统DNSDomain Name System是互联网的一项核心服务它作为一种分布式数据库和层次式命名系统hierarchical naming system负责将便于人类记忆的域名转换为计算机能够识别和连接的IP地址由于IP地址如192.168.1.1是一串数字不便于人们记忆和使用DNS系统通过建立域名www.baidu.com到IP地址之间的映射关系让用户可以使用有意义的域名来访问网站或其他互联网资源

DNS的工作原理基于客户端-服务器架构当用户在浏览器或其他应用程序中输入一个域名时DNS客户端会向DNS服务器发送查询请求该请求会被传递到一系列DNS服务器中直至找到存储着该域名对应IP地址的权威名称服务器

DNS不仅处理域名到IP地址的正向解析还支持从IP地址到域名的反向解析这对于一些日志记录垃圾邮件防范等场景特别重要

DNS系统是分层的包括根域名服务器顶级域名服务器权限域名服务器以及本地解析器缓存等多个层级这样的设计既保证了系统的高效性也确保了数据的可靠性和安全性

DNS还支持多种记录类型如A记录将域名指向IPv4地址AAAA记录将域名指向IPv6地址MX记录邮件交换记录CNAME记录别名记录这些记录帮助实现了互联网上复杂多样的服务配置

操作系统

操作系统是计算机硬件和用户(程序和人)的一个接口它使得其他程序更加方便有效地运行并能方便地对计算机硬件和软件资源进行访问

硬件和软件

  • ⭐硬件计算机物理设备
  • ⭐软件使硬件能够正常工作的程序集合
    • 操作系统控制计算机系统用户对硬件的访问
    • 应用程序使用计算机硬件来解决用户问题

演化过程

批处理系统 –> 分时系统 –> 个人系统 –> 并行系统 –> 分布式系统 –> 实时系统


批处理系统早期的操作系统用穿孔卡进行输入数据行式打印机输出结果磁带作为存储设备每一个要运行的程序叫做一个作业它们保证计算机所有资源从一个作业转换到另一个作业
分时系统为了有效的使用资源多道程序的概念被引入它可以将多个作业同时装入内存并且仅当该资源可用时分配给需要它的作业
  • 概念资源可以被不同的作业分享每个作业可以分到一段时间来使用资源
  • 调度给不同的程序分配资源并决定哪一个程序什么时候使用哪一种资源
  • 进程一个作业是一个要运行的程序一个进程则是在内存中等待分配资源的程序

个人系统当个人计算机产生后需要有一类适合这类计算机的操作系统于是单用户操作系统应运而生如Dos(磁盘操作系统)
并行系统在同一计算机中安装了多个CPU每个CPU可以处理一个程序或者一个程序的一部分意味着很多任务可以并行处理而不再是串行处理当然比单CPU的操作系统复杂得多
分布式系统网络和互联网的发展扩大了操作系统的内涵一个运行的作业可以由相隔干里的多台计算机共同完成程序可以在一台计算机上运行一部分在另一台计算机上运行另 一部分
实时系统指在特定时间限制内完成任务

组成部分

用户界面

用来接收用户(程序)的输入并向操作系统解释这些请求的程序

存储管理

  • 内存管理器单道程序和多道程序
    • 单道程序大多数内存用来装载单一的程序整个程序装入内存运行运行结束后程序区域由其他程序取代
    • 多道程序同一时刻可以装入多个程序到内存并且能同时被执行CPU轮流为其服务
  • 调度内存被分成大小相等的若干个部分称为帧程序被分为大小相等的部分称为页通常帧和页的大小一样
    • 请求分页调度程序被分成页但页可以依次载入内存运行和替换程序不需要全部载入内存
    • 请求分段调度程序通常由主程序和子程序组成程序将按程序员的角度划分为段它们载入内存中执行然后被来自同一程序或其他程序的模块所替代
    • 请求分页和分段调度结合了两者的优点以提高系统效率一个段可能太大而不能载入内存中的空闲区内存可以分成很多帧一个模块可以分成很多页依次装入内存执行
  • 调度器将一个作业或进程从一个状态改变为另一个状态

进程管理

  • 程序是由程序员编写的一组稳定的指令存在磁盘上它可能会也可能不会成为作业
  • 作业从一个程序被选中执行到其运行结束并再次成为一个程序的这段过程中该程序称为作业
  • 进程是一个运行中的程序该程序开始运行但还未结束只要作业装入内存就成为进程
  • 队列很多作业和进程相互竞争计算机资源为处理多个进程和作业进程管理器使用队列(等待列表)队列中存的不是作业和进程本身而是作业块或进程块作业或进程仍保存在内存或硬盘中
    • 作业队列保存等待内存的作业
    • 就绪队列保存已在内存中准备好运行但在等待CPU的进程
    • I/0队列保存正在等待I/0设备的进程(可以有多个I/0队列)
  • 进程管理器进程管理器可以用多种策略从队列中选择下一个作业或进程执行可以是先入先出(FIFO)最短时间优先最高优先级等进程管理器使用了两个调度器
    • 作业调度器
    • 进程调度器

设备管理

设备管理器负责访问输入/输出设备

文件管理

文件管理器控制对文件的访问

程序语言

程序语言是指编写程序时根据事先定义的规则(语法)而写出预定语句集合

演化过程

  • 机器语言计算机发展早期唯一的程序设计语言是机器语言计算机有自己的机器语言这种机器语言由0和1序列组成计算机唯一能识别的语言是机器语言
  • 汇编语言带符号或助记符的指令和地址代替二进制码的机器语这些语言首先被称为符号语言这些助记符语言后来被称为汇编语言最终要翻译成机器语言执行
  • 高级语言汇编语言虽然提高了编程效率但仍然需要程序员在所使用的硬件上花大量的精力为了提高程序员编程效率促进了高级语言的发展高级语言可以移植到不同的机器上通过解释成机器语言然后执行

程序翻译

当今程序通常是用一种高级语言来编写为了在计算机上运行程序程序要被翻译成它要运行的在计算机的机器语言高级语言程序被称为源程序被翻译成的机器语言程序称为目标程序有两种方法用于翻译编译和解释编译和解释的不同在于编译在执行前翻译整个源代码而解释一次只翻译和执行源代码中的一行但编译和解释都遵循相同的翻译过程

  • 编译编译程序(编译器)通常把整个源程序翻译成目标程序
  • 解释是指把源程序中的每一行翻译成目标程序中相应的行并执行它的过程
    • 解释的第一种方法源程序的每一行被翻译成被其使用的计算机上的 机器语言该机器语言被立即执行如果在翻译和执行中有任何错误这过程就显示消息其余过程就被终止程序需要被改正再次从头解释和执行
    • 解释的第二种方法随着Java的到来一种新的解释过程被引入Java语言能向任何计算机移植为了取得可移植性源程序到目标程序的翻译分成两步进行编译和解释Java源程序首先被编译成Java的字节码字节码看起来像机器语言中的代码但不是任何特定计算机的目标代码它是一种虚拟机的目标代码该虚拟机称为Java虚拟机(JVM)

⭐工作原理

源文件 -符号-> 词法分析器 -助记符-> 语法分析器 -指令-> 语义分析器 -可编译指令-> 代码生成器 -代码-> 目标文件

编程模式

模式是计算机语言看待要解决问题的一种方式计算机语言可以分成4种模式

  • 过程式强制性FORTRANCOBLBASICCPascalAda
  • 面向对象SmalltalkC++VisualBasicC#Java
  • 函数式LISPScheme
  • 说明式Prolog

过程式模式

把程序看成是操纵被动对象的主动主体一个被动对象本身不能发出一个动作但它能从主动主体接收动作过程式模式下程序就是主动主体该主体使用称为数据或数据项的被动对象作为被动对象的数据项存储在计算机内存中程序操纵它们为了操纵数据主动主体(程序)发出动作称之为过程在过程模式中对象和过程是完全独立分开的实体

⭐过程式模式中程序由三部分构成

  • 对象创建部分
  • 一组过程调用命令
  • 每个过程的一组代码

面向对象模式

处理活动对象而不是被动对象在这些对象上执行的动作都包含在这些对象中对象只需要接收合适的外部刺激来执行其中的一个动作面向对象模式中的程序仅仅向对象发送相应的请求对象做出对应的反应方法被相同类型的所有对象共享也被从这些对象继承的其他对象共享过程模式中的过程是独立的实体面向对象模式中的方法是属于对象的

  • 方法方法格式与有些过程式语言中用的函数非常相似每个方法有它的头局部变量和语句对过程式语言所讨论的大多数特性都可以应用在为面向对象程序所写的方法上
  • 相同类型的对象需要一组方法这些方法显示了这类对象对来自对象外的刺激反应为了创建这些方法面向对象语言如C++Java使用称为类的单元
  • 继承性在面向对象模式中作为本质一个对象能从另一个对象继承这个概念被称为继承性
  • 多态性在面向对象模式中的多态性是指我们可以定义一些具体相同名字的操作而这些操作在相关类中做不同的事情

函数式模式

程序被看成是一个数学函数函数是把一组输入映射到一组输出的黑盒子

  • 函数式语言预定义一系列可供任何程序员调用的原始(原子)函数
  • 函数式语言允许程序员通过若干个原始函数的组合创建新的函数

说明式模式

依据逻辑推理的原则响应查询说明性语言有自生的缺憾就是有关特殊领域的程序由于要收集大量的事实信息而变得非常庞大说明性语言迄今为止只局限于人工智能领域

共同概念

标识符

所有计算机语言的共同特点之一就是都具有标识符即对象的名称标识符允许给程序中对象命名例如计算机中每一个数据都存储在一个唯一的地址中如果没有标识符来符号化代表数据的位置你就不得不去了解并直接使用数据的地址来操纵它们取而代之只要简单给出数据的名字就可以让编译器去跟踪数据实际存放的物理地址

  • 关键字
  • 预定义标识符
  • 用户自定义标识符

数据类型

定义了一系列值及应用于这些值的一系列操作每种数据类型值的集合称为数据类型的域大多数语言都定义了两类数据类型简单数据类型复合数据类型

⭐简单数据类型

简单数据类型有时称为原子类型基本类型不能分解成更小数据类型的数据类型

  • 整数类型不包括小数部分的
  • 整数实数类型带小数部分的数字
  • 字符类型被语言使用的潜在字符集(ASCIl或Unicode)中的符号
  • 布尔类型只取两个值(真或假)的数据类型

⭐复合数据类型

复合数据类型是一组元素其中每个元素都是简单数据类型或复合数据类型

  • 数组其中每个元素具有相同类型
  • 记录其中的元素可以具有不同类型

变量

变量是存储单元的名字每个内存单元在计算机中都有一个地址虽然计算机内部使用地址但对程序员而言却不方便使用变量来代替地址变量具有数据类型

  • 变量声明大多数过程式语言和面向对象语言要求变量在使用前被声明声明警告计算机被赋予名字和类型的变量将在程序中使用计算机需要预留出要求的存储区域
  • 变量初始化允许变量在声明时进行初始化初始化就是在变量中存储一个值

常量

常量也是存储单元的名字但常量在程序开始时就被初始化值在程序运行后其值不能被改变

输入和输出

几乎所有的程序都需要输入或输出数据大多数程序设计语言使用一些预先定义好的函数完成输入和输出

  • 输入数据通过语句或者预先定义的函数来完成输入C语言有几个输入函数如scan函数用来从键盘读取数据并格式化把它存储在一个变量中
  • 输出数据通过语句或者预先定义的函数来完成输出C语言有几个输出函数如printf函数能够在显示器上输出一个字符串

表达式

表达式是由一系列操作数和运算符简化后的一个单一数值2 * 5 + 3

运算符

运算符是用来完成一个动作的特定语言的语法记号最熟悉的一些运算符都是从数学中得到乘法(*)是一个运算符表示两个数相乘每种语言都有运算符并且它们在语法或规则等方面的使用是严格定义的

  • 算数运算符有加除等
  • 关系运算符小于大于等于等
  • 逻辑运算符与等

语句

每条语句都使程序执行一个相应动作它被直接翻译成一条或多条计算机可执行的指令

  • 赋值语句给变量赋值
  • 控制语句是语句的集合判断循环等可以改变语句的执行顺序在过程式语言中作为一个程序执行
  • 复合语句是一个包含0个或多个语句的代码单元它也被称为块

子程序

那些完成单一任务的这些过程的子集能集合在一起放在它们自己的程序单元中也就是子程序子程序使得程序变得更结构化完成特定任务的子程序能一次编写多次调用

⭐局部变量

在过程式语言中就行主程序一样子程序能调用预定义的过程在局部对象上操作当子程序每次调用时这些局部对象或局部变量被创建当控制从子程序返回时被销毁局部对象属于子程序

⭐参数

主程序调用子程序使用参数传递一些数据在主程序中称为实际参数在子程序中称为形式参数参数传值在传值参数中主程序和子程序创建两个不同对象(变量)在主程序中创建的对象属于主程序在子程序中创建的对象属于子程序因为作用域不同所以相同的对象可以有相同的名字或不同的名字

软件工程

软件工程是指利用合理的工程方法和原则来获得在真实机器上工作的可靠软件

生命周期

软件生命周期是软件工程中的一个基础概念软件和其他的产品一样周期性地重复着一些阶段开始 –> 开发 <–> 使用 <–> 修改 –> 停止

开发过程

开发过程包括4个阶段分析 –> 设计 –> 实现 –> 测试

⭐开发过程模型

  • 瀑布模型开发过程只有一个方向的流动这意味着前一个阶段不结束后一个阶段不能开始
  • 增量模型软件的开发要经历一系列步骤开发者首先完成整个系统的一个简化版本这个版本表示了整个系统但不包括具体的细节在后续版本中有更多的细节被加入而有些还没完成然后再次测试系统如果这时有问题开发者知道问题出于新功能直到现有系统工作正确后才增加新的功能这个过程一直继续下去直到所有功能全部被加入

分析阶段

整个开发过程始于分析阶段这个阶段生成规格说明文档这个文档说了软件要做什么而没有说明如何去做

⭐分析阶段的两种独立方法

  • 面向过程分析如果实现阶段使用过程式语言那么面向过程分析(也称为结构化分析或经典分析)就是分析阶段使用的方法
    • 数据流图
    • 实体关系图
    • 状态图
  • 面向对象分析如果实现阶段使用面向对象语言那么面向对象分析就是分析阶段使用的方法
    • 用例图
    • 类图
    • 状态图

设计阶段

设计阶段定义系统如何完成在分析阶段所定义的需求在设计阶段系统所有的组成部分都被定义

⭐面向过程设计

面向过程设计中既要设计过程也要设计数据整个系统被分解成一组过程或模块模块化将大项目分解成较小的部分以便能容易理解和处理当系统被分解成模块时主要关心两点耦合和内聚

⭐面向对象设计

在面向对象设计中设计阶段通过详细描述类的细节来继续类是由一组变量(属性)和一组方法组成面向对象设计阶段列出这些属性和方法细节

⭐耦合是对两个模块相互绑定紧密程度的度量越紧合的模块独立性越差所以设计时尽量松散耦合

  • 松散耦合的模块更可能被重用
  • 松散耦合的模块不容易在相关模块中产生错误系统
  • 需要修改时松散耦合只需要修改一部分模块而不影响其他模块

⭐内聚是程序中处理过程相关紧密度的度量高内聚松耦合

实现阶段

⭐语言的选择C++PythonJAVA等语言

⭐软件的质量

  • 可操作性准确性高效性可靠性安全性及时性适用性
  • 可维护性可变性可修正性适应性可试性测
  • 可迁移性重用性互用性可移植性

测试阶段

测试阶段的目的就是发现开发项目中的错误(bug)良好的测试策略能发现最多的错误

⭐白盒测试

白盒测试(或玻璃盒测试)是基于知道软件内部结构的测试的目的是检查软件所有部分是否全部设计出来白盒测试假定测试者知道有关软件的一切程序就像一个玻璃盒子其中的每件事情都是可见的

  • 每个模块中的所有独立的路径至少被测试过一次
  • 所有的判断结构(两路或多路的)每个分支都被测试
  • 每个循环都被测试
  • 所有数据结构都被测试

⭐黑盒测试

黑盒测试是在不知道程序的内部也不知道程序是怎么工作的情况下测试程序程序就像一个看不见内部的黑盒黑盒测试按照软件应该完成的功能来测试

  • 穷尽测试最好的黑盒测试方法就是输入域中的所有可能的值去测试软件
  • 随机测试选择输入域的值的子集来测试子集的选择方式是非常重要的
  • 边界测试测试一些边界特殊的值

开发文档

软件的正确使用和有效维护离不开文档通常软件有三种独立的文档:用户文档系统文档和技术文档文档是一个持续的过程如果软件在发布之后有问题也必须写文档如果软件被修改那么所有的修改和与原软件包间的关系都要被写进文档只有当软件包过时后编写文档才停止

用户文档

为了软件包正常运行传统上称为用户手册的文档对用户是必不可少的它告诉用户如何一步步地使用软件包它通常包含一个教程指导用户熟悉软件包的各项特性

一个好的用户手册能够成为一个功能强大的营销工具用户文档在营销中的重要性再强调也不过分手册应该面向新手和专业用户配有好的用户文档必定有利于软件的销量

系统文档

系统文档定义软件本身撰写系统文档的目的是为了让原始开发人员之外的人能够维护和修改软件包系统文档在系统开发的所有4个阶段都应该存在

在分析阶段收集的信息应该仔细地用文档记录另外系统分析员应该定义信息的来源需求和选用的方法必须用基于它们的推论来清楚描述

在设计阶段最终版本中用到的工具必须记录在文档中例如如果结构图修改了多次那么最终的版本要用完整的注释记录在案

在实现阶段代码的每个模块都应记录在文档中另外代码应该使用注释和描述头尽可能详细地形成自文档

最后开发人员必须仔细地形成测试阶段的文档对最终产品使用的每种测试连同它的结果都要记录在文档中甚至令人不快的结果和产生它们的数据也要记录在案

技术文档

技术文档描述了软件系统的安装和服务安装文档描述了软件如何安装在每台计算机上如服务器和客户端服务文档描述了如果需要系统应该如何维护和更新

计算机安全

安全目标

  • 机密性机密性是信息安全中最通常的方面我们需要保护机密信息需要一个组织来看护这些信息以防那些危及到信息机密性的恶意行为机密性不仅仅适用于信息的存储在信息的传输中它也得到了应用当我们将一小段信息发送并存储至远程计算机或从远程计算机上检索一段信息时需要在传输时对该信息进行隐藏
  • 完整性信息需要不停地变化在一个银行中当一个客户存钱或取钱时他的账户余额需要改变完整性的意思是变化只应该由授权的实体通过授权的机制来完成完整性冲突不一定是由于恶意行为造成的它也可能是系统中断(例如短路)造成的对信息的一些不希望的改动
  • 可用性一个组织创建和存储的信息对授权实体来说应该是可用的如果信息是不可用的那它就是无用的信息需要时常改变这就意味着它必须对那些被授予访问权限的实体是可以访问的信息的不可用性对组织是有害的就像缺乏信息的机密性和完整性一样想象一下如果客户交易时不能访问他们的账户这时银行会发生什么

攻击类型

三个安全目标会受到攻击的威胁按照安全目标将攻击分为三类

⭐对机密性的攻击

  • 嗅探指对数据的非授权访问或侦听例如一个通过因特网传输的文件可能含有机密的信息一个非授权的实体可能侦听到传输并为了自己的利益使用其中的内容为了防止嗅探可以使用我们下面要讨论的加密技术以使得数据对侦听者来说难以理解
  • 流量分析虽然通过加密技术我们可以使得数据对侦听者来说难以理解但他们仍然可以通过在线流量监控收集其他类型的信息例如他们能找到发送者或接收者的电子地址(如电子邮件地址)收集多对请求和响应帮助猜测交易的本质

⭐对完整性的攻击修改假冒回放否认

  • 篡改侦听或访问信息后攻击者篡改信息使得信息有利于他们例如一个客户可能向银行发送一消息去完成一些交易攻击者侦听到信息并为了自己的利益篡改了交易的类型注意有时攻击者可能仅仅是删除或延迟了这个消息来危害这个系统或者使他们自己受益
  • 假冒当攻击者冒充其他人时假冒或哄骗就发生了例如一个攻击者可能盗窃银行卡和银行客户的PIN而假装是这个客户有时攻击者则假冒接收实体比如一个用户尝试联系一家银行但是另一个站点伪装成银行网站并从用户那里得到了一些信息
  • 重放重放是另一种类型的攻击攻击者得到用户发送的消息的副本过后设法重放它例如一个客户向他的银行发送了一条给攻击者付款的请求攻击者侦听到这个消息再次发送这条消息想从银行得到另一次付款
  • 否认是一种不同于其他类型的攻击因为它是由通信双方中的一个来进行的:发送者或接收者消息的发送者后来可能抵赖他发送了消息;消息的接收者后来也可能抵赖他接收到消息一个发送者抵赖的例子可能如一个银行客户要求银行给第三方送钱但后来他否认自己做过这样的请求一个接收者抵赖的例子可能如某人向一制造商购买产品并电子付款但制造商后来否认已经收到付款而要求再付

⭐对可用性的攻击

  • 拒绝服务(DOS)拒绝服务攻击是很常见的它可能减慢或完全中断系统的服务攻击者能使用几种策略取得这样的效果他们可能通过发送大量虚假请求使系统变得非常忙碌而崩溃或他们可能侦听并删除服务器对客户端的响应使客户端相信服务器未响应攻击者也通过侦听客户端的请求使得客户端多次发送请求导致系统变得非常忙碌

安全技术

为了达到安全目标和防止安全攻击ITU-T定义了一些安全服务的标准这些服务中的每一个都是为了在维护安全目标时防止一个或多个攻击而设计的实际完成安全目标需要一些技术手段现今流行两种技术一种是非常普通的密码术一种是特殊的隐写术

密码术

密码术(希腊起源的单词)意思是秘密书写密码术是指为使消息安全并对攻击免疫而进行转换的科学和艺术

⭐对称秘钥密码术

对称秘钥密码术使用同一个秘钥共享进行加密和解密并且这个秘钥可以用来进行双向通信

  • 替换密码用一个符号替换另一个符号如果在明文中的符号是字母表的字符用另一个字符来代替如使用字母D代替字母A
    • 单字母密码明文中相同的字符在密文中用相同的字符替换与该字符在明文中的位置无关明文和密文中的字符关系是一一对应的
    • 多字母密码字符每一次出现都使用不同的替换码明文中字符和密文中字符的关系是一对多a可以在文本开头加密成D也可以在中间加密成N多字母密码具有隐藏原有语言的字母频率的作用及时通过单字母频率统计都无法破解密文
  • 移位密码通过改变符号的位值实现加密明文第一个位置上的符号可能出现在密文的第十个位置上而明文第八个位置上的符号可能出现在密文中的第一个位置上换言之移位密码就是符号的重新排序
  • 流密码在流密码中加密和解密都是一次只对一个符号(例如一个字符或位)进行我们有一个明文流一个密文流和一个密钥流将明文流称为P密文流称为C密钥流称为K
  • 分组密码在分组密码中一组大小为m(m>1)的明文符号被加密在一起创造一组同样大小的密文基于定义在一个分组密码中整个分组是由一个单独的密钥进行加密即使这个密钥由多个值构成在分组密码中密文的分组取决于整个明文分组

⭐非对称秘钥密码术

非对称秘钥密码术秘钥是个人独有的分为公钥和私钥每个人创造并保守个人秘钥

与对称秘钥密码术基于符号(字符或位)的替换和排列不同非对称秘钥密码术基于数学函数在数字上的应用

在对称秘钥密码术中明文和密文被看作符号的组合加密和解密是对这些符号的排列和替换在非对称秘钥密码术中明文和密文都是数字加密和解密的过程是对数字应用数学函数创造其他数字的过程

隐写术

隐写术(起源于希腊语)意思是掩饰书写隐写术是通过在消息上覆盖其他内容而隐藏消息

消息完整性

有些场合我们可能不需要保密但却需要完整性消息是不受改动的

为了保证消息完整性消息要通过一个称为密码散列函数的算法函数建立消息的压缩影像称为摘要消息摘要需要保证安全免受篡改

消息验证

消息摘要可以检验消息的完整性保证消息没被篡改为了确保消息的完整性以及数据源的身份验证这消息是真的来自于 Alice 而不是任何其他的人我们需要在过程中包括一个 Alice 和 Bob 共享的秘密(没有经过其他人)我们需要创造一个消息验证码(messageauthentication codeMAC)

数字签名

保证消息完整性和消息验证使用一组公私钥签名对接收者来说是文档来自正确实体的证据密码系统使用接收者的私钥和公钥数字签名使用发送者的私钥和公钥

⭐数字签名的过程

发送者使用签名算法签署消息消息和签名被发送给接收者接收者收到消息和签名对收到的内容应用验证算法如果验证为真消息被接收否则消息被拒绝

⭐对比普通签名和数字签名的不同点

  • 包括普通签名包括在文档中是文档的一部分数字签名可以作为单独的文档来发送
  • 验证手段普通签名接收者需要一个文件上的签名副本进行比较是否可信任数字签名接收者收到消息和签名签名副本不再保存需要使用验证技术来组合消息和签名进行验证
  • 关系普通签名个人使用相同的签名签署许多文件数字签名每条消息对应它自己一个数字签名
  • 复制性普通签名允许签署文档的副本与文件中的原始件有点不同数字签名没有这样的不同

签署摘要

在处理较长消息时非对称秘钥密码系统效率低下在数字签名系统中消息通常较长但我们不得不使用非对称秘钥模式解决方案是使用数字签名签署消息的摘要摘要比消息本身要短得多

防火墙

防火墙是一个安装在一个组织的内部网络和因特网其他部分之间的设备(路由器计算机)通过防火墙可以控制对系统的访问

防火墙可能会过滤所有到来的目标为特定主机或服务器的数据包也可以用来阻拦对组织内特定主机或服务的访问

⭐防火墙通常分为包过滤防火墙和代理防火墙

  • 包过滤防火墙是一个使用过滤表单决定哪些数据包应该丢弃(不推进)的路由器用作数据包过滤器基于网络层的信息和传输层的头部:源和目标IP地址源和目标端口地址以及协议的种类(TCP或UDP)来推进或阻拦数据包
  • 代理防火墙是使用代理计算机(也称为应用网关)基于消息自身携带的信息(应用层上)进行过滤代理计算机位于客户计算机和组织计算机之间当用户客户进程发送消息时应用网关运行服务器进程来接收请求服务器在应用层打开数据包并且查找这个请求是否合法如果是那么服务器运行客户端进程并将消息发给组织内真正的服务器否则丢弃消息外部用户的请求基于内容在应用层进行筛选

学习资源