python-电脑结构、ARP协议、单位转换、字节bytes、字符串与字节关系等知识总结

目录

一、计算机五大部件

二、程序运行的过程

三、ARP协议

四、单位转换

五、数据类型:字节bytes

六、字符串和字节的关系

一.计算机五大部件

电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备、输出设备、存储器、运算器和控制器。

我们把键盘和鼠标叫输入设备。

输入设备: 向电脑输入数据和信息的设备。除了键盘。除了键盘鼠标,其他输入设备还包括触摸板、麦克风、摄像头,游戏手柄、扫描仪等。

显示器用来向我们展示画面,显示内容,音箱则播放音乐给我们听,我们管他们叫输出设备。

输出设备: 将电脑中的信息输出给用户的设备。常用的输入设备有:显示器、音箱、打印机、投影仪等。

主板:连接所有其他设备的设备,是其他设备的载体,主板主要是为CPU、内存、显卡、硬盘等提供平台,相当于人体的躯干,关联着各个器官。

CPU:中央处理单元(Cntral Pocessing Uit)的缩写,也叫处理器,是计算机的运算核心和控制核心。人靠大脑思考,电脑靠CPU来运算、控制。让电脑的各个部件顺利工作,起到协调和控制作用。

硬盘:存储资料和软件等数据的设备,有容量大,断电数据不丢失的特点。也被人们称之为“数据仓库”。

内存:1. 负责硬盘等硬件上的数据与CPU之间数据交换处理;2. 缓存系统中的临时数据。3. 断电后数据丢失。

显卡:显示器想要呈现画面,显卡是关键。简单来说,就是负责在显示屏上显示一切信息。打个比方,它就像是人的眼睛,没有了它,电脑就无法驱动形成图像了。显卡性能好,电脑的图形处理能力就高,尤其在玩游戏时更能发现这个(所以很多游戏会要求显卡性能)。对玩家而言,最好选择独立显卡。不过,如果不玩大型游戏,CPU内置核心显卡也基本能满足要求。缺点: 系统功耗有所加大,发热量也较大,额外购买。

电源:将电压220伏的市电转换为低等电压,然后送到主板及各个硬件!供电!电脑运行需要电力,而电源就是为此供电的,也可以说它在为电脑提供一切动力。电源决定了电脑的稳定性。它和人体心脏功能类似,都是提供动力的核心。

 CPU:是计算机的运算核心和控制核心,让电脑的各个部件顺利工作,起到协调和控制作用。

硬盘:存储资料和软件等数据的设备,有容量大,断电数据不丢失的特点。也被人们称之为“数据仓库”。
内存:1. 负责硬盘等硬件上的数据与CPU之间数据交换处理;2. 缓存系统中的临时数据。3. 断电后数据丢失。

二.程序是如何执行起来的?

当我们在电脑上打开QQ时(右键-打开 或者双击QQ图标),其实是通过鼠标(输入设备)向CPU发送了一条命令,CPU接收到这条命令后,QQ程序就从硬盘里被加载到内存(加载时不通过处理器,直接从硬盘加载程序到内存里),加载完成后,CPU就开始执行QQ程序。程序执行起来后,CPU可以让QQ程序显示在我们的在显示器上。也就是你看到了QQ 程序运行起来了。如果这个时候,你用QQ截取了一张屏幕的图片,那么这张图片会首先保存到内存,在没有退出截屏状态时,你可以在这张图片上写字、画线条,等你右键保存这张图片的时候,这张图片就会保存到硬盘里。

内存存取数据的速度比硬盘的存取速度快了10倍, 在某些环境里,硬盘和内存之间的速度差距可能会更大。

而CPU的速度比内存不知还要快多少倍。当我们把程序从硬盘放到内存以后,CPU就直接在内存运行程序,这样比CPU直接在硬盘运行程序就要快很多。

内存解决了一部分CPU运行过快,而硬盘数据存取太慢的问题。 提高了我们的电脑的运行速度。

内存就如同一条“高速车道”一般,数据由传输速度较慢的硬盘通过这条高速车道传送至CPU进行处理!

但内存是带电存储的(一旦断电数据就会消失),而且容量有限,所以要长时间储存程序或数据就需要使用硬盘。

三者之间的关系:

简单来说,硬盘用来存储我们的程序和数据,当我们运行程序的时候,CPU首先接受到我们的命令,之后CPU是告诉硬盘,我要运行你存储的程序A,你把程序A送到内存去。CPU对内存说,我让硬盘把程序A送到你这里来了,你保存一下。 等程序A被完整的送到内存之后。CPU就开始执行程序A。

 过程就像上面说的,我们在举一个接近我们生活的例子。

如果说把硬盘比喻成一个大仓库,CPU比喻成加工车间,那么内存就是一个临时的小仓库。从距离上来说, 相比内存到CPU的距离和硬盘到内存的距离,内存和CPU的距离更短。

硬盘(大仓库)用来保存车间需要用的原料和最终生产出来的商品。仓库太大,取出原料和存储商品太慢,耗时间。

内存(临时小仓库):原料会先放到这里,小仓库,可以很快的找到需要的原料或商品。

CPU(车间):从内存(小仓库)里拿到原料,生产商品。中间会有半成品,半成品可以放在内存(小仓库)里。

三.Arp协议

发包分三步:

1.计算是否在同一个广播域

2.利用arp协议获取mac地址

3.发包

1.如果在同一个广播域:

例如pc1要向pc3发包,流程如下:

(1.首先计算pc1和pc3在同一个广播域(利用ip进行计算)

(2.arp协议获取pc3的mac地址

格式:原mac  目标mac  原ip  目标ip

具体:pc1mac  FF:FF:FF:FF:FF:FF  192.168.11.10  192.168.11.11

(在同一个广播域所有机器都可以收到这个数据包,然后开始解包,发现ip地址不是自己的就丢弃,发现ip是自己的就返回自己的mac地址)

返回格式:自己的mac  目标mac  自己的ip  目标ip

具体:pc3mac  pc1mac  192.168.11.11  192.168.11.10

这样pc1就受到了pc3的mac地址

(3.开始发包

发包格式:原mac  目标mac  原ip  目标ip  数据部分

具体:pc1mac  pc3mac  192.168.11.10  192.168.11.11  数据

2.如果不在同一个广播域:

例如pc1要向pc4发包,流程如下:

(1.首先计算pc1和pc3不在同一个广播域

(2.arp协议获取pc1所在广播域的网关1的mac地址

格式:自己的mac  目标mac  自己的ip  目标ip

具体:pc1mac  网关1mac  192.168.11.10  网关ip

网关1解包发现是要自己的mac地址后,网关就会响应,把自己的mac地址返回给pc1

返回格式:网关1的mac  目标mac  网关1的ip  目标ip

具体:网关1mac  pc1mac  网关1ip  192.168.11.10

Pc1获取到网关1mac地址后开始发包

(3.pc1开始给pc4发包:

发包格式:原mac  目标mac  原ip  目标ip  数据部分

具体:pc1mac  网关1mac  192.168.11.10  172.16.45.10  数据

Pc4返回数据流程一样,这里不做赘述。

四.单位转换:

1GB=1024MB

1MB=1024KB

1KB=1024B  (Byte == 字节,简写B)

1B=8b  (bit == 二进制位,计算机数据最小的单位,简写b)

五、数据类型:字节bytes

表现形式:name = b”baby”

内部原理

Utf-8编码下:

01100010 b

01100001 a

01111001 y

如果是字符串类型的baby,那默认是Unicode,一字符占4个字节

如果有中文:

表现形式:b'\xe5\xa4\xa9\xe4\xb8\x8b'(“天下“的表现形式)

\x表示16进制

Utf-8编码下:

 

例如:\xe5表示00100101,其中e前四位,5后四位

因为是前四位,一共16中变换形式,所以用16进制刚好可以表现(\x)

所以\xe5 正确的表现形式是 1110 0101(就是十六进制和二进制的转换)

六、字符串和字节的关系

内存:

00000000 00000000 00000000 01010100         unicode    A

01010100                                                          utf-8      A

01010100 01010100                                          gbk       A

01010000 00000100                                          gb2312    A

...                                                                            …

硬盘:

01010100                                                 utf-8    A

01010100                                                 utf-8    A

01010100                                                 gbk      A

01010100                                                 gb2312    A

...                                                                 ...

本质上,内存中都是010101,具体是什么样子的010101,需要根据编码来决定。不同编码的010101,互相不认识。

在python3里:

默认解释器的编码:utf-8 -> 010101010101

特殊的:

字符串(str):

表现: a = "alex"  

本质: 01010101,unicode

字节(bytes):

表现: a = b"alex"  

本质: 01010101,某种编码: utf-8,gbk,.....

总结:

python3:

str   --> uniocde

bytes --> gbk,utf-8.....

字符串类型的表现形式是 name = “baby” 默认是用Unicode编码的,当字符串需要网络传输或者硬盘储存时,需要将Unicode编码的str准换为其他编码的bytes,以节省空间。

 

posted @ 2019-07-19 23:47  CentKiller  阅读(255)  评论(0编辑  收藏  举报