计算机发展史

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


机械计算器时代(19世纪末-20世纪初):计算机的前身是用于进行数学计算的机械装置。查尔斯·巴贝奇设计的差分机(Difference Engine)和分析机(Analytical Engine)被认为是现代计算机的先驱。这些机器虽然未在巴贝奇生前完全建成,但它们的设计理念包含了现代计算机的基本要素,如存储程序和使用穿孔卡片来输入指令。
电子管计算机时代(1940s-1950s):这是现代电子计算机的起点。1946年,美国宾夕法尼亚大学的埃克特-莫奇莱计算机(ENIAC)被公认为第一台通用电子数字计算机,它使用了电子管作为基本元件。虽然ENIAC体积庞大、能耗高且可靠性低,但它标志着计算机技术的新纪元。随后,出现了像UNIVAC I这样的商业计算机,开始应用于人口普查和企业数据处理。
晶体管计算机时代(1950s-1960s):20世纪50年代末,晶体管取代电子管成为计算机的主要构建组件,这大大减小了计算机的体积、降低了能耗并提高了可靠性。1959年,IBM推出了第一个全晶体管计算机IBM 7090,开启了计算机技术的新篇章。
集成电路与微处理器时代(1960s-至今):随着1960年代集成电路(IC)的发明,计算机部件进一步微型化。1971年,英特尔公司推出了世界上第一款微处理器Intel 4004,这为个人电脑的出现奠定了基础。70年代末至80年代,苹果公司的Apple II、IBM 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
结果为132(八进制)


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

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

非位置化数字系统

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

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

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

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

数据类型

🔢整数

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

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

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

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

补码转源码:补码中的最高位(最左边的位)是符号位,如果为1,则表示该数是负数;如果是0,则是正数。正数的补码直接就是其源码,无需转换。对于负数,由于补码是通过取反(对除符号位外的所有位)再加1得到的,需要执行相反的操作:首先,从补码表示的数值中减去1。然后,对结果(除了符号位)进行位取反操作,即将1变为0,将0变为1。举例来说,假设有一个8位的二进制数,其补码表示为11111101(这是一个负数的补码):减1:11111101 - 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^n)101.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. 字符编码:文本由字符组成,计算机不能直接理解或存储这些字符,因此需要将字符转换成计算机能够识别和处理的形式——二进制数。最常用的字符编码方式有ASCII、Unicode等。
    • 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. 存储格式:在磁盘上,这些二进制数据并不是简单地按顺序排列,而是根据文件系统(如NTFS、FAT32等)的规则组织成一系列的扇区或块。文件系统会记录每个文件的起始位置、大小等信息,使得操作系统能够找到并读取这些二进制数据。

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

🎵音频

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

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

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

📊图像

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

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

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

📽️视频

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

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

💗💗完成上述步骤后,视频文件就形成了,它包含了视频流、音频流及元数据。这个文件可以存储在计算机的硬盘驱动器、固态硬盘、外部硬盘、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”使用。如果借位后仍不足以减,表明正在进行负数运算,这在计算机中通过补码后相加计算。
✖️乘法:二进制乘法也基于传统乘法规则,但每一步都是按位相乘然后结果左移对应位数。例如,两个二进制数相乘时,一个数的每一位乘以另一个数,然后根据该位的位置左移相应位数,最后将所有结果相加。
➗除法:二进制除法相对复杂,它涉及到试商过程,即将被除数与除数比较,看能容纳多少个除数,然后从被除数中减去这个数,再在结果上对齐下一位继续比较。此过程重复,直到所有位都被处理完或达到指定精度。
󠀥󠀥󠀥取模:在二进制中,取模运算相当于找到除法的余数。这对于循环和重复模式识别非常重要。
位运算:包括AND、OR、XOR和NOT等,直接作用于二进制位,用于数据操作、条件判断和算法优化,与算术运算不同,它们不改变数值大小,而是改变数字的内部表示。

🔢实数

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

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

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

数据存储

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

  • 存储数据:计算机是一台电子设备,最好的数据存储方式应该是电子信号,以电子信号的出现和消失(出现为1,消失为0,可以看做是二进制)来存储数据,即以两种状态之一来存储数据。
    • 位(bit,binary 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、火线、USB、HDMI等。


SCSI:是一个8、16或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-T、100BASE-TX、1000BASE-T)所必需的,负责数据的发送与接收。

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

💗💗需要注意的是,虽然在10/100Mbps网络中仅使用了1、2、3、6这四根线,但在支持千兆以太网(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.11a、802.11b、802.11g、802.11n、802.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协议族中,传输层主要有两个协议:TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。

🏷️TCP/UDP协议


TCP (Transmission Control Protocol)协议

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

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

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

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

⭐网络层

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

🏷️IP协议 (Internet Protocol)


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

🏷️路由选择 (Routing)


路由选择是网络层的关键任务之一,其目的是确定数据包从源到目的地的最佳路径。这一过程依赖于路由表,路由表中包含了到不同网络的路径信息。
路由协议:为了构建和维护路由表,网络层使用各种路由协议,如静态路由、RIP(Routing Information Protocol)、OSPF(Open Shortest Path First)、BGP(Border 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.11(Wi-Fi):无线局域网的标准,数据链路层包括了逻辑链路控制(LLC)和媒体访问控制(MAC)子层。
Token Ring:一种早期的局域网技术,采用令牌传递的方式控制网络访问。

🏷️MAC与LLC


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

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

⭐物理层

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

🏷️信号传输与编码


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

🏷️物理接口特性


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

🏷️数据传输模式


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

🏷️传输介质


有线介质:包括双绞线(UTP、STP)、同轴电缆、光纤等。
无线介质:利用无线电波、微波、红外线等进行无线传输。

🏷️信道复用技术


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

🏷️传输速率与限制


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

🏷️物理层设备


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

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

HTTP协议

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

🏷️核心概念:


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

🏷️工作流程简述:

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

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

SSH协议

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

🏷️基本原理与组成部分


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

🏷️SSH协议框架


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

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

FTP协议

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

🏷️关键组件:

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

🏷️工作模式:

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

🏷️特性:

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

🏷️优缺点:

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

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

SMTP协议

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)。SMTP是一种基于TCP/IP的应用层协议,设计用于在互联网上传输电子邮件。它是目前最常用的电子邮件发送标准。SMTP协议本身并不直接涉及邮件的接收,邮件接收通常使用POP3(Post Office Protocol version 3)或IMAP(Internet 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协议

IPv4(Internet Protocol Version 4)是互联网协议的第四版,它是构成现代互联网基础的最重要协议之一。

🏷️地址结构

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

🏷️地址分类

IPv4地址被分为五类(A、B、C、D、E),其中A、B、C三类为主要的地址类型,用于分配给网络设备。D类地址用于多播,而E类地址保留用于实验和未来使用。

🏷️子网掩码

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

🏷️数据包结构

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

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

🏷️无连接协议

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

🏷️直接广播和本地广播

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

IPV6协议

IPv6(Internet 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设计之初就考虑了安全性,虽然没有直接内置加密功能,但鼓励使用IPSec(Internet Protocol Security)作为标准安全机制,为数据包提供验证、完整性和保密性。

🏷️兼容性与过渡技术

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

🏷️地址空间

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

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

域名系统

域名系统(DNS,Domain 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种模式:

  • 过程式(强制性):FORTRAN、COBL、BASIC、C、Pascal、Ada
  • 面向对象:Smalltalk、C++、Visual、Basic、C#、Java
  • 函数式:LISP、Scheme
  • 说明式:Prolog

过程式模式

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

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

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

面向对象模式

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

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

函数式模式

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

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

说明式模式

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

共同概念

标识符

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

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

数据类型

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

⭐简单数据类型

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

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

⭐复合数据类型

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

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

变量

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

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

常量

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

输入和输出

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

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

表达式

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

运算符

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

  • 算数运算符:有加、减、乘、除等。
  • 关系运算符:小于、大于、等于等。
  • 逻辑运算符:或、非、与等。

语句

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

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

子程序

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

⭐局部变量

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

⭐参数

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

软件工程

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

生命周期

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

开发过程

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

⭐开发过程模型

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

分析阶段

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

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

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

设计阶段

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

⭐面向过程设计

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

⭐面向对象设计

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

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

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

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

实现阶段

⭐语言的选择:C++、Python、JAVA等语言

⭐软件的质量

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

测试阶段

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

⭐白盒测试

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

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

⭐黑盒测试

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

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

开发文档

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

用户文档

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

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

系统文档

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

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

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

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

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

技术文档

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

计算机安全

安全目标

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

攻击类型

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

⭐对机密性的攻击

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

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

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

⭐对可用性的攻击

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

安全技术

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

密码术

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

⭐对称秘钥密码术

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

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

⭐非对称秘钥密码术

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

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

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

隐写术

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

消息完整性

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

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

消息验证

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

数字签名

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

⭐数字签名的过程

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

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

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

签署摘要

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

防火墙

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

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

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

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

学习资源

  • 视频
    • 《计算机科学速成课》:https://www.bilibili.com/video/BV1EW411u7th
    • 【【计算机导论】计算机科学导论(大神之路-起始篇)】:https://www.bilibili.com/video/BV13V41117xc
  • 书籍
    • 《半小时漫画计算机》