计算机基础

[网络基础](https://www.cnblogs.com/linhaifeng/articles/5937962.html)
# 正码反码补码
首位0为+ 1为-

1. 正码--->反码
正数的反码:不变
负数的反码:符号位不变,其余取反

2. 原码--->补码
正数的补码:不变
负数的补码:符号位不变,其余取反后+1 (即反码+1)
79e59840f9e0efd867d2c68adbd6ecc2.png  
计算机存储的全是补码

* * *

* * *

* * *

# osi七层
555536a26f451df342a6f96c3522bc80.png  
tcp/ip五层:应传网数物
osi七层:应表会传网数物
edd944d7af531c0d730d3fa2c9236c68.png  

## 物理层:
网线 无线电波 本质:传输低电平 高电平
## 数据链路层(以太网):
### 1.对电信号初始分组(8位一组)
### 2.以太网协议(广播+mac地址):
5507c03d67b7779b4c5f16796751c830.png  
**一组电信号构成一个数据包,叫帧**
**每一数据帧:报头head(固定18字节)+数据data(46字节~1500字节)=64字节~1518字节,超过就分片发送**
**head+data=数据包**
**head:**
* 发送者/源mac地址=6字节
* 接受者/目标mac地址=6字节
* 数据类型=6字节
**数据链路层的通信方式为广播**
接收到广播的主机如果发现目的mac地址不是自己,就丢掉

## 网络层
广播效率低,且有网络风暴
ip协议 主机跨网段就发给网关
**head(以太网头+ip头)+数据包(head+data)**
ARP协议(获取对方mac):未知对方mac情况下 通过广播,发送(源mac+目标mac全F+源ip+目标ip+数据部分 )
全F表示想获取目标ip的mac地址
主机包中 有网关 即可找到目的主机的网关,主机包中有ip,即可获得目的主机的mac
## 传输层
端口到端口的通信 找到主机的具体一个程序(0~65535)
套接字socket
a362da3834f59797450872b1ed495242.png  
tcp协议 udp协议
## 应用层
1.应用层:程序
2.表示层:加密解密,压缩解压缩
3.会话层:建立会话

* * *

* * *

* * *

# 字符编码
[字符编码](https://www.cnblogs.com/linhaifeng/articles/5950339.html)
bit:二进制位
1Byte字节=8bit
1KB=1024Bytes
1MB=1024KB
1G=1024MB


美国人:ASCII 1字节8位255个够用
中国人:gb2312够用 2字节16位65535够用
世界人民:Unicode 2字节16位65535够用(生僻字4字节) Unicode兼容ASCII
对Unicode优化--->可变长编码”的UTF-8编码(英文1字节,汉字3字节,生僻4~6字节)
a041919b4f435c0949b3d6b5b4336348.png  

内存中统一采用unicode,浪费空间来换取可以转换成任意编码(不乱码),硬盘可以采用各种编码,如utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提高传输效率与稳定性。
51841ce3ea747f57a45b123ae6ad1716.png  

万国Unicode(内存)--->encode ---> utf-8 / GBK(硬盘)
utf-8 / GBK(硬盘) --->decode ---> 万国Unicode(内存)
b4d7f157691b4d94000a8b0b16b1aa84.png  
```python
# bytes转字符串方式一
b=b'\xe9\x80\x86\xe7\x81\xab'
string=str(b, encoding='utf-8')
print(string)

# bytes转字符串方式二
b=b'\xe9\x80\x86\xe7\x81\xab'
string=b.decode() # 第一参数默认utf8,第二参数默认strict
print(string)

# bytes转字符串方式三
b=b'\xe9\x80\x86\xe7\x81haha\xab'
string=b.decode('utf-8','ignore') # 忽略非法字符,用strict会抛出异常
print(string)

# bytes转字符串方式四
b=b'\xe9\x80\x86\xe7\x81haha\xab'
string=b.decode('utf-8','replace') # 用?取代非法字符
print(string)

# 字符串转bytes方式一
str1='逆火'
b=bytes(str1, encoding='utf-8')
print(b)

# 字符串转bytes方式二
b=str1.encode('utf-8')
print(b)
```
>逆火
>逆火
>逆haha
>逆�haha�
>b'\xe9\x80\x86\xe7\x81\xab'
>b'\xe9\x80\x86\xe7\x81\xab'

**注意:bytes转字符串虽是解码,但是str(b, encoding='utf-8')这是固定用法,故不要纠结
string=b.decode() 默认--->b.decode(encoding='utf-8')**

## 网络分类
按地理位置分:
1. 局域网(LAN 较小区域内,10Km内)
2. 城域网(MAN 一座城市范围内,10~100Km)
3. 广域网(WAN)

按传输介质:有线网 光纤网 无线网
交叉线:T568A------T568B 用于同种设备之间连接
直通线:两头同一标准 用于非同种设备间连接

posted @ 2019-08-14 18:54  坚持fighting  阅读(146)  评论(0编辑  收藏  举报