网络协议
OSI七层模型
分层设计,不同层实现不同功能
- 应用层:为计算机用户提供接口和服务
- 表示层:数据处理(编码解码,加密解密)
- 会话层:管理通信会话
- 传输层:管理端到端的通信连接
- 网络层:管理数据路由
- 数据链路层:管理相邻节点之间的数据通信
- 物理层:数据通信的光电物理特性
TCP/IP四层模型
应用层
应用层提供不同应用之间的通信,定义了运行在不同端系统上的应用程序进程如何相互传递报文。
HTTP协议,FTP协议,SMTP协议,DNS协议。
传输层
传输层提供主机间不同进程的通信,向应用层提供通信服务。
TCP协议,UDP协议。
网络层
网络层提供主机之间的通信,提供灵活的,无连接的数据报服务,网络层不提供服务质量的承诺。
IP协议,ICMP协议。
网络层特点:
- 不需要建立连接。
- 不提供可靠的连接。
- 每个数据报是单独路由。
- 每个数据报有完整的目标地址。
HTTP版本
keep-alive长连接
- 大大减少客户端与服务器端通信的时间
- 减少TCP连接建立和连接释放的时间成本
多路复用
在一个信道上传输多路信号或数据流的过程和技术。
- 可以并行在一个TCP连接中交互多种类型信息
- 多请求并行,不依赖多TCP连接
服务端推送
不等客户端发送请求,服务端主动推送资源。
- 能更加快速的渲染页面
- 增加用户体验
HTTP请求方法
- GET:请求服务器发送某个资源
- HEAD:类似GET,但只返回响应头(用于客户端对服务器的接口检查)
- POST:向服务器写入数据
- PUT:向服务器写入资源
- DELETE:请求服务器删除资源
- OPTIONS:返回服务器支持操作资源的方法
幂等操作:任意多次执行所产生的影响均与一次执行的影响相同
幂等函数:可以使用相同的参数重复执行,并能获得相同结果的函数
HTTP状态码
- 200:OK,请求成功,响应报文包含了请求的资源
- 204:No Content,响应报文包含头部和状态行,但没有响应体
- 304:Not Modified,所请求的资源未修改,服务器不会返回资源。(资源从服务器获取重定向到从本地获取)
- 400:Bad Request,客户端请求语法错误
- 401:Unauthorized,客户端请求时未提供身份认证
- 403:Forbidden,请求被服务器拒绝
- 404:Not Found,资源找不到
- 500:Internal Server Error,服务器内部错误
- 502:Bad Gateway,网关或代理服务器向远端服务器执行请求错误
- 503:Service Unavailable,服务器宕机
- 504:Gateway Timeout,网关或代理服务器请求远端服务器超时
对称/非对称加密
密钥a,密钥b是拥有一定数学关系的一组密钥
密钥a:公钥给大家使用,对外公开。
密钥b:私钥自己使用,不对外公开。
对称加密 | 非对称加密 | |
---|---|---|
密钥 | 同一串密钥 | 一组密钥(公钥,私钥) |
效率 | 高 | 低 |
安全性 | 较高 | 更高 |
散列算法(哈希算法)
哈希算法是一种可以从任何一种数据中创建更小的数字指纹的方法,它把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定。
哈希碰撞:原文和哈希算法的结果为多对一关系。
加盐操作:明文+自定义字符《Hash》->xxxxxx(确保数据安全性)
哈希散列算法不算加密算法
HTTPS加密认证的过程(TLS技术)
HTTPS(Secure)是安全的HTTP协议
http(s)://<主机>:<端口号>/<路径>
HTTP和HTTPS区别
HTTP | HTTPS | |
---|---|---|
安全性 | 不安全 | 安全 |
复杂度 | 低 | 高 |
效率 | 高 | 低 |
端口号 | 80 | 443 |
TLS:传输层安全性协议
TLS是介于传输层和应用层之间的协议
- 保证数据安全和数据完整
- 对传输层数据进行加密后传输(结合了对称/非对称加密技术)
SSL安全参数握手:
DNS服务
DNS(domain name system)域名系统:它是一项互联网服务,存储域名和IP地址相互映射的关系。
域名由点,字母和数字组成。点分割不同的域。
www.baidu.com,
三级域名:www
二级域名:baidu
顶级域名:com
DNS工作原理
(迭代查询)
- 先查本地的缓存有无IP地址
- 若没有再查询本地域名服务器
- 本地域名服务器向根域名服务器查询顶级域名服务器在哪里
- 根域名服务器返回目标顶部域名服务器IP
- 本地域名服务器向顶部域名服务器查询权威域名服务器在哪里
- 顶级域名服务器返回目标权威域名服务器IP
- 本地域名服务器向权威域名服务器查询具体的IP是什么
- 权威域名服务器返回目标具体IP
- 本地域名服务器再返回给本地PC
DNS安全
将正常站点解析到恶意页面
DNS胁持:黑客攻击本地DNS服务
DNS欺骗:黑客冒充(权威)域名服务器,将查询到的IP地址进行替换
DDOS攻击:让DNS服务宕机
TCP与UDP协议
传输层提供主机间不同进程的通信
识别具体进程:套接字(Socket)=IP地址+端口(0~65535)
差别:
- 协议头部复杂度不同
- TCP提供的是可靠的有连接服务
- UDP提供的是不可靠的无连接服务
可靠传输指无差错,不丢失,不重复,并且按序到达。
TCP连接建立(三次握手)
TCP提供的是可靠的有连接的服务。
ACK:确认位,ACK=1,确认号才生效。
SYN:同步位,SYN=1,表示连接请求报文。
第一次:SYN=1,请求同步并告诉对方自己的数据序列号。
第二次:SYN=1、ACK=1,确认对方的数据并告诉对方自己的数据序列号。
第三次:ACK=1,确认对方的数据(可以开始传输数据了)
TCP连接释放(四次挥手)
FIN:终止位,FIN=1,表示释放连接。
第一次:FIN=1,主动方主动请求中断连接。
第二次:ACK=1,表示确认收到中断报文
第三次:FIN=1,ACK=1,被动方请求中断连接
第四次:ACK=1,确认中断连接。
TIME−WAIT状态
指第四次挥手后,主动方中断连接方所处的状态,此状态下,主动方尚未完全关闭TCP连接,端口不可复用。TIME-WAIT需要等待2MSL
为什么TIME-WAIT需要等待2MSL?
- 确保第四次挥手的报文一定正确到达对方。
- 2MSL时间内,如果没有到达对方,那么对方会重新进行第三次挥手,确保连接正常释放。
- 确保当前连接所有的报文都已经过期。
操作系统
进程
- 进程是系统资源分配和调度的基本单位
- 进程作为程序独立运行的载体,保障程序正常运行
- 进程使得操作系统资源的利用率大幅提升
进程状态
1.就绪状态:当进程被分配到除CPU以外的所有必要资源,只差CPU资源的状态
2.执行状态:进程获得CPU资源后,程序正在执行的状态
3.阻塞状态:进程因某种原因无法执行而放弃CPU资源的状态
同步和异步
同步:等上一个任务完成,才能执行下一个任务(顺序执行),适用CPU密集的操作。效率低但是安全。
[CPU密集:CPU利用率高,耗处理器资源]
异步:不同任务之间不互相等待,互相抢占资源,适用IO密集的操作。效率高但是有安全隐患。
[IO密集:频繁读写网络,磁盘等任务]
并发和并行
并发:系统只有一个CPU处理器,多个线程在同一时间间隔内运行(交替运行)
并行:系统有多个CPU处理器,多个线程在同一时刻运行(同时执行)
线程
- 提高程序并发的能力
- 线程是操作系统进行运行调度的最小单位
- 包含在进程中,一个进程可并发多个线程
进程与线程
协程
协程为什么叫做协作式线程?
- 由用户自行调度
- 协作运行,相互让步
优缺点:
调度,切换,管理更加轻量
减少了上下文切换的成本(用户态实现)
内核无法感知协程的存在(CPU多核优势丢失)
主要运用在IO密集场景
存储器的层次结构
- 缓存:集成在CPU中的高速缓存
- 主存:内存条
- 辅存:固态硬盘,磁盘
局部性原理
CPU在访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
锁
死锁
死锁的概念:两个或两个以上的进程,在执行过程中,由于竞争资源或者由于彼此通信(调度顺序不当)而造成的一种阻塞的现象,若无外力的作用,他们都将无法推进下去。这些永远在互相等待的进程称为死锁进程。
发生死锁的四个必要条件:
- 互斥条件
- 请求保持条件
- 不可剥夺条件
- 环路等待条件
1、互斥条件
- 进程或线程对资源的使用是一种排他性的使用
- 某个资源只能由一个进程或线程使用,其他进程或线程需要使用只能等待。
2、请求保持条件
- 进程至少保持一个资源,又提出新的资源请求。
- 新资源被占用,请求被阻塞。
- 被阻塞的进程不释放自己保持的资源。
3、不可剥夺条件
- 进程获得的资源在未完成使用前不能提前被剥夺。
- 获得的资源只能由进程自身释放
4、环路等待条件
预防死锁:破坏四个必要条件之一即可
-
摒弃请求保持条件
系统规定进程运行之前,一次性申请所有需要的资源。
使得进程在运行期间不会提出新的资源请求,从而摒弃请求保持条件。 -
摒弃不可剥夺条件
当一个进程请求新的资源得不到满足时,必须强制释放其占有的资源。 -
摒弃环路等待条件
可用资源线性排序,递增申请。
悲观锁/乐观锁
悲观锁每次操作都加锁,乐观锁默认不加锁
悲观锁适合写操作的场景。
乐观锁适合读操作的场景。
互斥锁/共享锁
互斥锁指该锁一次只能被一个线程所持有
共享锁指该锁可被多个线程所持有,获得共享锁的线程只能读数据,不能修改数据
同步问题
生产者消费者问题
- 一组生产者进程,一组消费者进程,中间还有一个缓冲区。
- 生产者在缓冲区溢出前,不断向缓冲区生产数据。
- 消费者在缓冲区为空前,不断向缓冲区消费数据。
哲学家进餐问题
临界资源
一些虽作为共享资源,却又无法同时被多个进程同时访问的共享资源。当有进程在使用临界资源时,其他进程必须依据同步机制等待其释放该共享资源,才可重新竞争使用共享资源。
基础数据结构
链表,数组,栈,队列
链表
链表是一种物理存储单元上非连续,非顺序的存储结构。
逻辑顺序通过指针链接次序实现。
单向链表:每个节点包含当前节点的值和下一个节点的引用。
双向链表:每个节点包含当前节点的值,还有上一个节点和下一个节点的引用。
区别:已知一个节点的值,要找到它上一个节点的值,双向链表的时间复杂度是O(1),单向链表的时间复杂度是O(N)。空间换时间的概念
增删改:单向链表的时间复杂度都是O(N),头尾是O(1)。双向链表的时间复杂度都是O(1)。
查:单双链表的时间复杂度都是O(N)
数组
- 固定长度(不支持增,删)
- 内存连续
- 访问任意元素时间复杂度为O(1),通过下标访问。
栈
后进先出
队列
先进先出