1.0 OSI 七层模型
1.1 什么是OSI模型
OSI模型指的是Open System Interconnection Reference Model,即开放式系统互联模型。它是世界上第一个试图在世界范围内规范网络标准的框架
1.2 模型图示
1.2.1 应用层
-
应用层位于OSI模型最上方
-
只关心业务逻辑,不关心数据的传输
类似微信用户发送微信,只需关注发送的消息内容,不需要关注数据传输等问题
1.2.2 表示层
负责协商用于传输的数据格式,并转换数据格式
主要作用是负责将数据进行编码和解码,以确保不同计算机之间的数据交换是可靠和互通的。
表示层的作用如下:
-
数据压缩:表示层可以对数据进行压缩,以减少传输数据的大小,从而提高传输效率。
-
数据加密:表示层可以对数据进行加密,以保护数据的机密性和安全性,防止数据在传输过程中被非法获取和篡改。
-
数据格式化:表示层可以将数据转换成网络中所使用的标准格式,以确保不同计算机之间的数据交换是顺利的。
-
数据翻译:表示层可以将来自不同计算机的数据进行翻译和转换,以确保不同操作系统和应用程序之间的数据交换是有效的。
1.2.3 会话层
-
负责管理两个连网实体间的连接
-
功能及特点:建立连接,维持通信,释放连接
例如:客户端与服务端之间进行稳定、实时、持续的连接
1.2.4 传输层
负责将数据从一个实体(一个服务或应用)传输到另一个实体,但不负责数据传输的方式
例如:从北京搬家到广州
传输层的能力
-
数据分隔重组:将数据拆分后按顺序重组
-
纠错:在数据传输过程中出现问题后采取方式进行纠正
-
管理连接:处理数据的频繁交换
-
流量控制:控制传输数据的速率
-
端口寻址:标明参与传输的实体的端口号
1.2.5 网络层
负责把一个封包从一个IP地址传输到另一个IP地址
将传输层提供的数据分割成更小的数据包,然后将这些数据包传输到目标设备的网络层
网络层的任务是确保这些数据包能够通过不同的网络传输到目标设备
为了实现这一点,网络层使用一些协议和技术,例如IP协议(Internet Protocol)、路由选择协议、ICMP协议(Internet Control Message Protocol)等。
网络层的主要功能包括以下几点:
-
地址分配:网络层负责为每个连接到网络上的设备分配一个唯一的IP地址,以便在网络中进行区分和识别。
-
路由选择:网络层负责根据目标设备的IP地址选择最佳的路由路径,以确保数据能够正确地到达目标设备。
-
分段和重组:当数据包太大无法在网络上传输时,网络层会对数据进行分段,并在目标设备处进行重组。
-
网络互连:网络层负责连接不同的网络,以构建更大的网络拓扑结构。
1.2.6 数据链路层
-
确保两个临近设备间数据的传输,并隐藏底层实现
-
帧同步:两个设备之间传输时的协商速率问题
-
数据纠错
主要作用是提供在物理层上传输的数据的可靠性和错误检测,以及协调数据在物理层的传输。
1.2.7 物理层
-
封装和隐藏具体的传输手段,并且提供稳定的传输接口
-
比如:电缆、光纤、蓝牙等
1.3 OSI的问题
-
分层设计较为臃肿,并非每一层都为必要的
-
过于理论化,OSI模型是一种理论模型,它并没有被广泛地实现。因此,它无法充分考虑实际网络中的现实问题。没有考虑实际网络中出现的一些问题,比如安全性、性能、可靠性等问题。因此,它不能完全满足实际应用的需求。
2.0 互联网协议群
2.1 概述
-
OSI无实际可行方案
-
罗伯特.卡恩和文顿.顿瑟夫提出的TCP协议
2.2 TCP/IP协议群要解决的5个问题
2.2.1 报文拆分
-
数据量大,网络底层设备不支持
-
复用路径
2.2.2 增加协议头
数据分块后在接收端需要重组,所以需要使用头部来添加一些描述字段
2.2.3 数据在相邻设备间数据传递
2.2.4 路由和寻址
路由算法:通过算法寻找下一个要到达的节点
2.2.5 数据重组
2.3 TCP/IP协议群的5层模型
2.3.1 应用层
数据从一个应用发往另一个应用的过程
2.3.2 传输层
主机到主机之间的传输
2.3.3 网络层
提供路由和寻址
2.3.4 数据链路层
两个节点之间的物理连接
2.3.5 物理层
负责0-1信号的传输
2.3.6 5层模型和OSI的区别
-
删除了会话层,会话是虚拟概念,不是必须的
-
删除了表示层,数据压缩、数据格式转换不是应用必须的
2.4 TCP/IP协议群可选项
-
传输层:TCP协议、UDP协议、TLS/SSL、SCTP等
-
网络层:IP协议(ipv4和ipv6)、ICMP协议、IPSec协议
3.0 TCP协议
3.1 概述
TCP全名是(Transport Control Protocol),是一个可以提供可靠的、支持全双工、连接导向的协议,因此在客户端和服务端之间传输数据的时候,是必须先建立一个连接的。
3.2 特点
3.2.1 连接
-
是虚拟、抽象的概念
-
能让两个通信的程序间确保彼此都在线
-
加快响应请求速度
-
连接也被称为会话(Session)
-
使通信更稳定、安全
-
-
消耗更多资源
3.2.2 全双工
单工:任何时刻都只能单向传送
半双工:允许数据在两个方向上传输,在某一时刻,只允许数据在一个方向上传输
全双工:任何时刻都能双向发送数据
3.2.3 可靠性
可靠性指数据保证无损传输
-
使无序的数据恢复原有顺序
-
多播时每个接收方都获得无损副本
3.3 TCP协议的工作过程
3.3.1 建立连接的过程(三次握手)
-
客户端发送SYN
-
服务端准备好进行连接
-
服务端针对客户端的SYN给ACK
-
服务端发送SYN
-
客户端准备就绪
-
客户端发送ACK
3.3.2 断开连接的过程(四次挥手)
-
客户端发送断开请求FIN
-
服务端收到请求,发送ACK
-
服务端经过一个等待,确定可以关闭连接,发送FIN
-
客户端收到FIN,处理完自己的事情后发送ACK
为什么TCP的断开连接过程比连接过程要多一次握手过程?
具体来说,在断开连接时,当一方完成了数据的传输并希望断开连接时,它会发送一个FIN(结束)报文给对方,表示它已经没有数据要发送了。对方接收到这个FIN报文后,会发送一个ACK(确认)报文给对方,表示已经收到了FIN报文。但是此时这个连接还没有真正关闭,因为另一方还有可能在发送数据。为了确保对方接收到了FIN报文并完成了数据的传输,需要再进行一次ACK握手,即对方发送一个FIN报文给请求方,请求方再发送一个ACK报文给对方,表示已经收到了对方的FIN报文并确认关闭连接。
3.3.3 传输数据
3.3.3.1 报文拆分
-
应用层数据很大时无法一次性传输完
-
拆分后可实现并行传输
3.3.3.2 顺序保证
如果TCP段特别多的时候,该如何进行排序?
当大量的TCP段同时传输时,为了确保数据能够正确有序地传输,TCP协议使用了序号(sequence number)和确认号(acknowledgement number)来进行数据排序。
具体来说,发送方发送的每个TCP段都会带有一个序号,用来标识该段数据在整个数据流中的位置。接收方会根据收到的TCP段的序号来对数据进行排序,并发送一个确认号,表示已经收到了前面的所有TCP段。如果发送方没有收到确认,就会重传相应的TCP段。
时间窗口
TCP序号:发送序号(Seq)、接收序号(Ack)
一个端的发送序号是另一个端的接受序号
3.3.3.3 增加TCP头
-
源端口:描述发送方机器上的应用
-
目标端口:描述接收方服务器上的应用
-
发送序号(Seq)/接收序号(Ack)
标志位
NS、CWR、ECE:TCP扩展协议
ECN:显示拥塞控制协议,有助于帮助解决延迟和丢包问题,
URG:紧急标志位
SYN(Synchronize Sequence Numbers):同步序号,也就是在建立连接。
FIN: 终止连接
ACK(Achnowledgment):响应。
PSH(push):传送数据
RST(Reset Connection): 重置连接
3.4 TCP协议周边配置
纠错能力:保证数据可靠性;
流控能力:协同两边速率,保证可靠性;
拥塞控制能力:确定网络的拥堵情况决定传输速度。
3.4.1 纠错能力
TCP拥有一个16bit的Checksum字段
Checksum是一个函数,把原文映射到一个不可逆的16bit的编码中这样就可以知道原文传输过程中有没有发生变化
3.4.2 流控能力
主要目标:让发送方和接收方协商一个合理的收发速率,让两边都可以稳定的工作。
利用滑动窗口
滑动窗口的大小意味着接收方还有多大的缓冲区可以用于 接收数据
TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于 接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报。
3.5 TCP快速超时重传机制
其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
4.0 IP协议
4.1 IP协议的基本概念
IP协议(Internet Protocol):网络层协议。
4.2 IP协议可能遇到的问题
4.2.1 封包损坏
4.2.2 丢包
4.2.3 重发
4.2.4 乱序
4.3 网络层需要解决的3个问题
4.3.1 延迟
4.3.2 吞吐量
4.3.3 丢包率
4.4 IP协议的架构
IP协议目前主要有两种架构,IPv4和IPv6,IPv4是目前应用最广泛的互联网协议
4.5 IP协议的工作原理
4.5.1 分片
-
把数据切分成片
-
适配底层传输网络
4.5.2 增加协议头
Type Of Service:服务的类型,是为了响应不同的用户诉求,用来选择延迟、吞吐量和丢包率之间的关系。
IHL(Internet Header Length):IP协议头的大小。
Total Length:报文(封包datagram)的长度
Identification:报文的ID,发送方分配,代表顺序
Fragment offset:描述是否要分包(拆分),和如何拆分。
Time To Live:封包存活的时间。
Protocol:描述上层的协议,比如TCP=6,UDP=17
Options:可选项
Checksum:检验封包的正确性
4.5.3 延迟、吞吐量、丢包率
延迟:1bit的数据从网络的1个终端传送到另一个终端需要的时间
吞吐量:单位时间内可以传输的平均数据量
丢包率:发送出去的封包没有到达目的地的比例
4.5.4 寻址
-
寻址:给一个地址,然后找到这个东西
-
IPv4地址(32位):逐级寻址
例如:101.16.3.17
寻址过程
寻址步骤
-
找到顶层网络
103.16.3.1 最顶层的网络号和 255.0.0.0 (子网掩码)做位与运算得到:
103.16.3.1 & 255.0.0.0 = 103.0.0.0
-
找到下一层网络
用IP地址和下一级的子网掩码做位与:
103.16.3.1 & 255.255.0.0 =103.16.0.0
-
找到再下一级网络
使用 255.255.255.0 子网掩码找到下一级网络:
103.16.3.1 & 255.255.255.0 = 103.16.3.0
-
定位设备
设备就在子网 103.16.3.0 中;最终找到的设备号是 1
4.5.5 路由
-
若寻找的IP地址不在局域网中,需要路由找到去往对应网络的路径。
-
IP地址和子网掩码位与的过程是由路由算法实现的
5.0 IPv6协议
5.1 背景
IPv4只能支持43亿设备,不够用。
5.2 工作原理
IPv6和IPv4两者工作原理相似,为切片、增加封包头、路由(寻址几个阶段)
5.3 IPv6和IPv4的主要区别
5.3.1 地址
地址数量:IPv4有4个8位,共**32位,IPv6有8个16位,共128位**
分割符号:
-
IPv4的地址用 . 分割,如 103.28.7.35 。每一个是8位,用0-255的数字表示
-
IPv6的地址用 : 分割,如 0123:4567:89ab:cdef:0123:4567:89ab:cdef 。每个是一个16位的16进制数字,就是4个符
书写方式:
IPv6地址可简写
5.3.2 寻址
5.3.2.1 全局单播
站点前缀(Site Prefix):48bit,一般是由ISP(Internet Service Providor,运营商)或者RIR(Regional Internet Registry, 地区性互联网注册机构)。RIR将IP地址分配给运营商。
子网号(Subnet ID):16bit,用于站点内部区分子网。
接口号(Interface ID):64bit,用于站点内部区分设备。
5.3.2.2 本地单播
定义:给定地址,本地网定位设备
格式:
例子:fe80::123e:456d
Link-local必须以fe80开头
Link-local是指一个网络节点(如一台计算机或一个网络设备)在本地网络(通常是一个局域网)上分配的IP地址。这种地址通常只在局域网内可用,而不会在互联网上可路由。
Link-local地址是在Internet Engineering Task Force(IETF)的RFC 3927中定义的。它们通常以169.254开头的IPv4地址,或者以fe80开头的IPv6地址。
5.3.2.3 分组多播
-
需要以8个1,也就是 ff00 开头,后面跟上一个分组的编号。
-
所在的网络中已经定义了该分组编号,而且有设备可以识别这个编号。
-
拥有分组下设备的完整清单,并把数据发送给对应的设备们。
-
IPv4也支持分组多播,但需要网络配置整体配合
5.4 新设备接入
新设备接入IPv6后,会使用IPv6的邻居发现协议(Neighbour Discover Protocol)为自己申请一个IP地址。当新设备需要发送信息到目的地时,还可以通过ND协议广播查询目标设备。然后如果需要路由,还可以通过ND查找路由器。
传统:ARP协议(Address Resolution Protocol,地址解析协议)。每个节点存储许多额外信息
IPv6:更加无状态化,减少数据冗余带来的风险和负担
5.5 IPv6的主要优势
-
解决了IP地址耗尽的问题
-
解决了网络区域、站点划分的问题。
-
协议层支持多播。Ipv6可以有专门的地址用作多播。
-
支持邻居发现协议,自动分配地址,做到了无状态接入设备。
IPv4协议可以通过使用子网掩码来划分站点,但由于IPv4地址空间有限,可能无法满足大型网络的需求。因此,IPv4协议只能部分地解决站点划分问题。
6.0 UDP协议
6.1 背景
-
1980年由科学家David P. Reed提出
-
协议简单,搭建在IP协议之上(也就是在传输层的意思)
-
尽可能的减少通信机制,速度非常快
-
该协议的RFC只有两页
6.2 介绍
全称: User Datagram Protocol**,用户数据报协议**
定义:在传输层提供直接发送报文(Datagram)的能力。Datagram是数据传输的最小单位。
目标:发送报文,无法拆分数据
为什么不直接调用IP协议?
IP协议只能把数据从一个网络接口发送到另一个网络接口,无法寻址到应用
6.3 UDP和TCP的区别
本质
UDP:提供报文交换,简化协议
TCP:提供可靠的网络传输
可靠性
UDP:不可靠
TCP:可靠
顺序
UDP:无序
TCP:有序
负载
UDP:负载小
TCP:负载大
广播场景
UDP:合适
TCP:不合适,代价大
7.0 HTTP协议
-
HTTP协议(Hyper Text Transfer Protocol): 应用层协议
-
目标: 是处理客户端和服务端之间的通信
7.1 请求/返回
7.1.1 请求(Request)
一次请求,分成头(Header)和体(Body)。 下面是一个请求头+消息体的示例
示例:
7.1.2 返回(Response)
一次返回,也同样分(Header)和体(Body)。 下面是一个返回头+消息体的
示例:
7.2 网址
URL(Uniform Resource Locator):用于在互联网上定位一个资源
7.3 DNS
DNS(Domain Name System):域名解析系统
7.3.1 DNS Query的分级缓存策略
1.先查询浏览器的本地缓存(通常在内存中)
2.本地没缓存,查找操作系统的hosts文件,该文件在linux 中在 /etc/hosts里
3.上述步骤没有找到,DNS会查询本地服务提供商(ISP)
4.ISP没找到,请求指向Root根服务器,返回顶级域名服务器地址
5.浏览器发送请求给顶级域名服务器,返回权威域名服务器地址
6.浏览器发送Lookup请求给权威域名服务器,找到具体DNS记录,返回给浏览器
7.3.2 DNS记录
DNS的数据以记录形式存储,就叫DNS记录。DNS记录的种类非常多, 有30多种。每条DNS记录描述了网址(URL)的一种关系
7.3.2.1 A记录
功能:定义主机的IP地址
7.3.2.2 AAAA记录
功能:定义主机的IPv6地址
7.3.2.3 CNAME记录(Canonical Name Record)
功能:定义域名的别名
7.3.2.4 MX记录(Mail exchanger record)
功能:定义邮件服务器所在的位置
7.3.2.5 NS记录(Name Server Record)
功能:定义DNS信息服务器所在的位置
7.3.2.6 SOA记录(Start of Authority Record**)
功能:定义在多个ns服务器中哪个是主服务器
7.3.2.7 TXT记录
功能:提供一个文本信息
7.3.3 内容分发网络(CDN)
CDN(Content Delivery Network):将请求分散到全世界各地,分发流量,加快访问速度
CDN上无法部署业务逻辑,更新慢,无法保证一致性,比较适合纯的静态资源,比如图片、视频、脚本文件、样式文件等
7.3.4 请求头和返回头
HTTP协议通过请求头和返回头控制协议工作。无论是请求头还是返回头都是Key/Value的形式
7.3.4.1 常见头部介绍
Content-Length:发送/接收Body内容的字节数
User-Agent:这个字段可以帮助统计客户端用了什么浏览器、操作系统等
Content-Type:请求的时候,告知服务端数据的媒体类(MediaType/MIME Type)。返回的时候告知客户端,数据的媒体类型
Origin:描述请求来源地址
Accept:是HTTP协议协商能力的体现,用于建议服务端返回何种媒体类型(MIME Type)
*/*代表所有类型(默认)
多个类型用逗号隔开例如:text/html, application/json
Accept-Encoding:建议服务端发送哪种编码(压缩算法)
deflate, gzip;q=1.0, *;q=0.5
Accept-Language:建议服务端传递哪种语言
Accept-Language:fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5
Referer:告诉服务端打开当前页面的上一张页面的URL
非浏览器环境有时候不发送Referer(或者虚拟Referer,通常是爬虫)
常用于用户行为分析
Connection:决定HTTP连接(不是TCP连接)是否在当前事务完成后关闭
7.4 HTTP的方法
GET:从服务器获取资源
POST:在服务器创建资源(幂等性)
PUT:在服务器修改资源
DELETE:在服务器删除资源
OPTION :跨域部分讲解
TRACE :用于显示调试信息 多数网站不支持
CONNECT: 代理部分讲解
PATCH :对资源进行部分更新(极少用)
7.5 状态码
1xx:提供信息
100 continue 101 切换协议(switch protocol)
2xx:成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误
7.5.1 2xx状态码
200 – OK
201 – Created 已创建
202 – Accepted 已接收
203 – Non-Authoritative Information 非权威内容
204 – No Content 没有内容
205 – Reset Content 重置内容
206 – Partial Content 服务器下发了部分内容(range header)
7.5.2 3xx状态码
300 – Multiple Choices 用户请求了多个选项的资源(返回选项列表)
301 – Moved Permanently 永久转移
302 – Found 资源被找到(以前是临时转移)
303 – See Other 可以使用GET方法在另一个URL找到资源
304 – Not Modified 没有修改(缓存部分特别说明)
305 – Use Proxy 需要代理
307 – Temporary Redirect 临时重定向
308 – Permanent Redirect 永久重定向
301和308
-
共同点
资源被永久移动到新的地址
-
差异
客户端收到308请求后,延用旧的method(POST/GET/PUT)到新地址
客户端收到301请求后,通常用户会向新地址发起GET请求
302/303/307
-
共同点
资源临时放到新地址
-
差异
302是http1.0提出的,最早叫做Moved Temporarily; 很多浏览器实现的时候没有遵照标准,把所有请求都重定向为GET
1999年标准委员会增加了303和307,并将302重新定义为Found。
303告诉客户端使用GET方法重定向资源
307告诉客户端使用原请求的method重定向资源
7.5.3 4xx状态码
400 – Bad Request 请求格式错误
401 – Unauthorized 没有授权
402 – Payment Required 请先付费
403 – Forbidden 禁止访问
404 – Not Found 没有找到
405 – Method Not Allowed 方法不被允许
406 – Not Acceptable 服务端可以提供的内容和客户端期待的不一样
注:多数服务端开发已经不遵循状态码
7.5.4 5xx状态码
500 – Internal Server Error(内部服务器错误)
501 – Not Implemented(没有实现)
502 – Bad Gateway(网关错误)
503 – Service Unavailable(服务不可用)
504 – Gateway Timeout(网关超时)
505 – HTTP Version Not Supported(版本不支持)
注:多数服务端开发已经不遵循状态码
7.6 HTTP缓存
传统的HTTP协议层网络结构的三种实体:
什么是缓存?
存储将被用到的数据,提升访问速度
缓存的工作原理
为什么要用缓存
-
成本低(速度快,时间少)
-
有选择性存储数据
缓存条目
缓存条目:通常是Key/Value结构。如HTTP缓存,通常以Key为URL;Value通常不仅仅只包括数据,还会包括一些描述字段,比如缓存的失效时间等。
缓存置换
缓存置换:缓存满了后,每次创建新的缓存条目,就会删除旧的缓存条目
LRU(LRU-Least recently used)缓存置换算法
HTTP缓存
HTTP缓存最重要的配置项为Cache-Control HTTP 返回头。 不仅浏览器可以缓存,浏览器和服务器之间的HTTP代理服务器也可以缓存
什么是代理服务器
代理服务器接收一个请求,然后把请求转发给另一个服务器;从另一个服务器接收结果,然后再返回给请求方。根据工作方式的不同,分成正向代理和反向代理。
正向代理
定义:把要请求的网址(资源)发送给代理服务器,由代理服务器向目标发送请求后获取资源再返回给请求方
反向代理
定义:当请求方向一个网址发送一个请求的时候,请求方意识不到,请求的其实是一个反向代理服务器,这个代理服务器将请求代理给了内部的网络
强制缓存
强制缓存行为是强制执行的,在缓存到期前,一定会使用浏览器的缓存
基于确定时间的强制缓存:
协商缓存
协商缓存的行为是基于变更协商的。在缓存条目对应的资源发生生变化前,都使用浏览器缓存。因此协商缓存必须每次都请求服务端.
Etag
服务端想实现协商缓存时可返回ETag,资源不变,ETag的数值也不会改变。
浏览器保存服务端的E-Tag后缓存资源:
下次请求时带上该E-Tag(服务器匹配成功后返回304 Not Modified):
Last-Modifed(Depreciated)
Last-Modifed(Depreciated):基于变更时间的协商缓存方案
服务器返回资源时返回一个 Last-Modifed 头:
7.7 HTTP连接
keep-Alive:多次请求复用一个TCP连接
为什么要keep-alive?
为了节省网络成本,会考虑多个请求复用一个TCP连接
keep-alive的断开
单个请求:请求完成后,在timeout时间内没第二个请求进来则会关闭。
多个请求:在一个请求响应之后,在 timeout 时间内有另一个请求进来,就会利用相同的 TCP 连接继续响应这个请求,直到没有更多请求进来,可以通过 max 字段设定最多响应的请求数。
keep-alive是不是长连接?
lkeep-alive并不是长连接
lWebSocket:长连接,提供在HTTP协议退化成TCP协议的方式。让客户端和服务器之间保持很长时间的连接且不中断
8.0 加密解密证书
8.1 加密
加密:将明文信息变成不可读的密文内容,只有拥有解密方法的对象才能够将密文还原成加密前的内容。
8.1.1 对称加密
对称加密:加密/解密用一个秘钥,且加密方和解密方都知道秘钥,如DES,3DES等。
8.1.2 非对称加密
非对称加密:加密用一个秘钥,解密用另一个秘钥且加密方一般有2个秘钥,解密方有一个解密秘钥。非对称加密安全性高,但速度慢,如RSA算法。
对称加密:
-
数据传输:在网络数据传输过程中,对称加密可以用于保护数据的机密性。例如,HTTPS协议就使用对称加密算法来加密网络通信数据。
-
存储数据:对称加密也可以用于保护存储在本地或云端的数据的机密性。例如,硬盘加密技术就是一种基于对称加密的数据加密方式。
-
身份验证:对称加密可以用于身份验证,例如在密码验证过程中使用对称密钥加密密码进行传输。
非对称加密:
-
数字签名:非对称加密可以用于数字签名,即用私钥对消息进行签名,用公钥对签名进行验证。数字签名可以用于验证文件的完整性和身份认证等方面。
-
加密通信:非对称加密也可以用于安全通信。例如,PGP(Pretty Good Privacy)和S/MIME(Secure/Multipurpose Internet Mail Extensions)协议使用非对称加密来加密电子邮件通信。
-
金融交易:非对称加密可以用于金融交易安全。例如,数字货币使用非对称加密来保护交易的机密性和完整性。
-
数字证书:非对称加密也可以用于数字证书,数字证书用于验证网站或应用程序的身份和信任。
摘要算法
摘要算法:就是将原文和摘要同时传输给接收方
三个特点
-
公开
-
一致
-
难碰撞
场景举例1:密码保存
场景举例2:数据传输
8.2互联网信任体系
私下签协议
公钥和私钥通常用于以下两个方面:
-
加密和解密信息:公钥和私钥通常被用于加密和解密通信过程中的敏感信息,例如信用卡号码、密码等。公钥用于加密信息,私钥则用于解密信息。这样做的好处是,即使通信过程中的信息被窃取,黑客也无法轻易地解密信息,因为他们不知道私钥。
-
身份验证:公钥和私钥也可以用于身份验证。例如,当你访问一个网站时,网站会给你一个公钥,然后你的计算机会用这个公钥加密一个随机数并发送给网站。网站收到这个加密信息后,使用自己的私钥解密它,并将解密后的随机数用作身份验证。这种方式可以确保你正在和真正的网站进行通信,而不是一个欺诈者。
权威机构证书
Alice和Bob都去第三方机构注册账号,然后上传自己的公钥给第三方机构。 第三方机构可以给Alice和Bob办法一个证书,证书里含有他们的公钥。
信任链条
情况1:Bob机器上有预装证书,Bob和Alice签约的时候,就会用这个预装的根证书验证Alice证书的签名,要使用权威机构的公钥(而公钥在证书里)。
情况2:Bob机器上没有预装证书,而是预装了给权威机构颁发证书的机构的证书。
信任体系里面存在的漏洞:
Bob安装盗版操作系统,系统中含有恶意机构的CA
黑客发的邮件,点击后安装CA
9.0 同源策略
禁止一个源(origin)的脚本和文档和另一个源的脚本和文档交互
两个URL的protocol,port和host相同,那么同源
思考:如何两个源产生过多交互会有什么问题
为什么不禁用不同源的js?
应不应该允许不同源的js修改dom?
应不应该允许不同源的js获取远程图片内容?
应不应该允许网站提交数据到不同源的服务器?
应不应该允许网站提交cookie到不同源的服务器?
同源策略(Same-Origin Policy)是一个浏览器安全机制,用于限制一个文档或脚本如何与来自不同源的资源进行交互。同源策略要求文档或脚本只能与来自同一源的资源进行交互,而不能与来自不同源的资源进行交互。
同源指的是协议、域名和端口号均相同。如果一个脚本想要访问一个不同源的资源,例如一个来自不同域名的图片或脚本文件,那么它会被同源策略禁止访问。
跨域资源共用(CORS)
跨域资源共用(Cross-Origin Resource Sharing)使用额外HTTP头允许指定的源和另一个源进行交互
代理
利用代理将不同源的资源代理到同源的资源
10.0 面试问什么
10.1 TCP/IP协议群做了哪些事情?
1.报文拆分
2.增加协议头
3.数据传输
4.路由和寻址
5.数据重组
10.2 TCP协议为什么是3次握手4次挥手?
10.3 IPv4和Ipv6的区别
-
地址不同(Ipv4 32位、Ipv6 128位)-> 地址空间、数目不同
-
地址分配不同(IPv4资源是稀缺的,分配需要竞争;IPv6可以给每个人分配很多地址)
-
寻址方式不同:IPv4通过子网掩码计算网络地址;IPv6有固定的计算方式划分网络。
-
地址解析策略不同(IPv4需要ARP,IPv6通过无状态的邻居发现)
-
DNS不同(IPv4是A记录,IPv6是AAAA记录)
10.4 TCP和UDP的区别
-
面向流 vs 面向报文
-
会话 vs 无会话
-
头(大 vs 小)
-
TCP保证正确性(可靠性),UDP不保证
-
UDP实现广播成本低
10.5 TCP如何确保数据顺序
为什么需要保证:TCP拆分封包的时候是顺序拆分的,但是包会无序的到达目的地。
方法:利用(SEQ, ACK)编号确定封包的唯一性
方法:利用滑动窗口存放没有排好序的封包,直到窗口中完全有序才发送ACK。如果有包丢失,就会一直不发ACK。 如果窗口大小是4,发送ABCD,如果只有BD到目的地,那么滑动窗口中是_B_D
10.6 如果网络延迟是30ms,那么Ping一个网站需要多少ms? 如果请求一个HTTPS协议的网站,TTFB至少ms?
10.7 CDN更换图片?缓存更新?
当您在 CDN 上更换图片时,可能需要更新 CDN 缓存以确保最新更改得到反映。这是因为 CDN 将内容缓存到其全球网络中的多个服务器上,以提高内容传输速度和性能,从而使用户可以更快地访问您的网站或应用程序。如果您更改了图片并且CDN的缓存尚未更新,则用户将仍然看到旧的图片。
10.8 LRU是什么?
缓存置换:缓存满了后,每次创建新的缓存条目,就会删除旧的缓存条目。
10.9 什么是https中间人攻击?
10.10 NIO有什么优势?
•Reactive模型+非阻塞(减少线程切换)
•内核级别拷贝内存到JVM(减少系统调用)
•缓冲区增加数据处理的灵活性(clear/flip等操作)
处理I/O场景有明显性能优势
10.11 一次DNS查询最快和最慢差距有多大?
-
最快命中本地浏览器缓存
-
最慢需要到服务商(ISP)-> Root服务器 -> 顶级域名服务器 -> 权威服务器 链路很长。
DNS是分级缓存策略,每级缓存都非常强大。
10.12 HTTP keep-alive和http2.0的多路复用有什么区别?
-
keep-alive : 复用TCP连接发送请求,节省了握手时间,本质还是串行。
-
http2.0 多路复用: 数据被打散成为小块,本质是并行。
10.13 强制缓存和协商缓存的区别
强制缓存强制执行,强制缓存不需要再发送请求给服务端。
协商缓存需要发送请求给服务端验数据版本,如果有新版本的数据就需要重新下发数据,如果没有就返回304 Not Modified。