基础
大约 11 分钟
OSI七层模型
层级 | 功能 |
---|---|
物理层 | 主要实现相邻节点间比特流的透明传输,物理层定义了物理设备的标准,如网线的类型等, 网卡也会在这层工作 。 |
数据链路层 | 将网络层传下来的比特数据包组装成帧,并在相邻节点的链路上传送帧。数据链路层会将0、1序列划分为具有意义的数据帧传送给另一端。 |
网络层 | 选择合适的路由和交换结点,能让数据及时传送,此层的数据称为数据包,要关注的是IP协议。 |
传输层 | 向主机进程提供通用的数据传输服务。传输层需要关注的协议有TCP协议和UDP协议。 |
会话层 | 负责在网络中的两节点之间建立、维持和终止通信,常见的协议有 ADSP、RPC 等。 |
表示层 | 主要负责数据格式的转换,解决不同系统之间通信语法问题 |
应用层 | 为应用程序提供交互服务,目的是更方便应用从网络中接收的数据,重点关注HTTP协议 |
TCP和IP模型
OSI七层模型 | TCP/IP 五层模型 | TCP/IP 四层模型 | 功能 | TCP/IP协议族 |
---|---|---|---|---|
应用层 | 应用层 | 应用层 | 文件传输,电子邮件,文件服务,虚拟终端等 | SMTP,DNS,Telnet,TFTP,HTTP,SNHP,FTP |
表示层 | 应用层 | 应用层 | 数据格式化,代码转换,数据加密 | 无 |
会话层 | 应用层 | 应用层 | 解除或建立与别的接点的联系 | 无 |
传输层 | 传输层 | 传输层 | 提供端对端的接口 | TCP,UDP |
网络层 | 网络层 | 网络层 | 为数据包选择路由 | IP,ICHP,RIP,OSPF,BCP,ICMF |
数据链路层 | 数据链路层 | 网络接口层 | 传输有地址的顿以及错误检测功能 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理层 | 物理层 | 网络接口层 | 以二进制数据形式在物理媒介上传输数据 | IS02110,IEEE802,IEEE802.2 |
HTTP
请求方法
相关信息
HTTP 1.0 支持三种请求方式:
- GET
- POST
- HEAD
HTTP 1.1 额外支持 6 种请求方式
- OPTIONS
- PUT
- PATCH
- DELETE
- TRACE
- CONNECT
方法 | 描述 |
---|---|
GET | 请求一个指定资源,用于获取数据 |
HEAD | 和 GET 类似,但是只返回响应头,不返回响应体 |
POST | 用于提交信息到目标地址,用于数据提交和文件上传 |
PUT | 提交更新的信息,用于替换原数据 |
DELETE | 删除指定的资源 |
CONNECT | 与服务器建立隧道 |
OPTIONS | 返回特定服务器地址所支持的 HTTP 请求方法, 也可用于测试服务器支持的功能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
PATCH | 和 PUT 相似,主要用于部分更新 |
HTTP 状态码
数字 | 含义 |
---|---|
1XX | 指示信息,表示请求以接收,继续处理 |
2XX | 成功,表示请求已经被成功接收、理解、接受 |
3XX | 状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向 |
4XX | 状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。 |
5XX | 状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码 |
常见状态码
HTTP 状态码 | 名称 | 描述 |
---|---|---|
100 | Continue | 继续 表示客户端可以继续提交请求 |
101 | Switching Protocols | 切换协议 切换传输协议,只能从低版本切换到高版本,如 HTTP1.0 切换为 HTTP1.1 |
200 | OK | 请求成功 表示服务器成功返回了数据 |
201 | Created | 已创建 表示服务器成功接收到请求并创建了对应的资源 |
202 | Accepted | 已接受 表示服务器已经接受了请求,请求将会被处理 |
203 | Non-Authoritative Information | 非授权信息 表示请求成功,但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容 表示服务器成功处理请求 |
205 | Reset Content | 重置内容 服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容服务器成功处理了部分GET请求 |
300 | Multiple Choices | 多种选择请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址与301类似。使用GET和POST请求查看 |
304 | Not Modified | 未修改 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | Use Proxy | 使用代理 所请求的资源必须通过代理访问 |
307 | Temporary Redirect | 临时重定向与302类似。使用GET请求重定向 |
400 | Bad Request | 错误请求表示客户端请求的报文有错误 |
401 | Unauthorized | 未授权缺失或错误的认证,这个状态代码必须和WWW-Authenticate 报头域一起使用 |
403 | Forbidden | 禁止访问表示服务器禁止访问资源,并不是客户端的请求出错 |
404 | Not Found | 未找到表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端 |
501 | Not Implemented | 功能未实现表示客户端请求的功能还不支持 |
502 | Bad Gateway | 网关错误通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误 |
503 | Service Unavailable | 服务器不可用表示服务器当前很忙,暂时无法响应服务器 |
504 | Gateway Timeout | 网关超时网关超时,由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答 |
HTTPS vs HTTP
特性 | HTTP | HTTPS |
---|---|---|
定义 | HTTP 是超文本传输协议,用于从万维网服务器传输超文本到本地浏览器的传送协议。 | HTTPS 是带有安全性的 HTTP,通过 SSL/TLS 提供加密处理、数据完整性校验及身份认证。 |
端口 | 默认的 HTTP 端口是 80。 | 默认的 HTTPS 端口是 443。 |
安全性 | HTTP 本身不是安全的,因为数据在传输过程中没有加密,可能会被第三方获取。 | HTTPS 是安全的,因为数据在传输过程中会被加密,防止被第三方获取。 |
速度 | HTTP 相对较快,因为没有加密和解密的过程。 | HTTPS 相对较慢,因为数据在传输过程中需要进行加密和解密。 |
工作原理
HTTPS
协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现
Client
发起一个HTTPS
的请求Server
把事先配置好的公钥证书返回给客户端。Client
验证公钥证书:比如是否在有效期内,证书的用途是不是匹配Client
请求的站点,是不是在CRL
吊销列表里面,它的上一级证书是否有效,这是一个递归的过程,直到验证到根证书(操作系统内置的Root
证书或者Client
内置的Root
证书),如果验证通过则继续,不通过则显示警告信息。Client
使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给Server。Server
使用自己的私钥解密这个消息,得到对称密钥。至此,Client
和Server
双方都持有了相同的对称密钥。Server
使用对称密钥加密明文内容A
,发送给Client
。Client
使用对称密钥解密响应的密文,得到明文内容A
。Client
再次发起HTTPS
的请求,使用对称密钥加密请求的明文内容B
,然后Server
使用对称密钥解密密文,得到明文内容B
。
HTTP 1.0 vs 1.1 vs 2.0
区别
特性 | HTTP 1.0 | HTTP 1.1 | HTTP 2.0 |
---|---|---|---|
连接方式 | 无连接,每次请求都要建立连接 | 长连接,减少了 TCP 连接的重复建立和断开所造成的额外开销 | 多路复用,一个 TCP 连接上可以并发多个 HTTP 请求 |
队头阻塞 | 存在,下一个请求必须在前一个请求响应到达之前才能发送 | 存在,虽然可以发起多个请求,但服务器必须按照接收请求的顺序发送响应 | 解决,可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应 |
头部压缩 | 不支持 | 不支持 | 支持,使用 HPACK 算法对 header 进行压缩 |
服务器推送 | 不支持 | 不支持 | 支持 |
数字证书
数字证书是一种权威性的电子文档,它提供了一种在互联网上验证身份的方式。数字证书对个人或组织的线上凭据与身份进行验证,并能让网络用户和接收者知道其所输入的数据将前往受信任的来源。它们类似于网站和用户的安全徽章,并有助于确保互联网的安全性。
数字证书由证书颁发机构(CA)所颁发,用于对线上数据进行加密。数字证书也称为公钥证书或身份证书。例如,TLS/SSL证书有两种用途:对网站、浏览器和Web服务器之间传输的数据进行加密和保护,以及有助于识别并验证网站所有者。
数字证书的基本架构是公开密钥PKI,即利用一对密钥实施加密和解密。其中密钥包括私钥和公钥,私钥主要用于签名和解密,由用户自定义,只有用户自己知道;公钥用于签名验证和加密,可被多个用户共享。
数字证书的应用非常广泛,例如在安全电子邮件中使用数字证书可以建构安全电子邮件证书,主要用户加密电子邮件的传输,保护电子邮件在传输和接收过程中的安全²。另外,数字证书也可以用于终端的保护,例如在电子商务的活动过程中安装了数字证书,那么即使其账户或者密码等个人信息被盗取,其账户中的信息与资金安全仍然能得到有效的保障。
数字签名工作原理
签名过程
- 利用签名哈希算法(例如
sha256
md5
)计算包括证书颁发者信息、证书持有者信息、证书有效期、证书持有者公钥等在内的信息(如x.509
的例子),生成证书摘要α
。 - 颁发者生成一对私钥和公钥,然后使用私钥对指纹进行加密,得到的加密数据即为颁发者的数字签名
γ
。 - 将数字签名
γ
附加到数字证书上,形成一个签名过的数字证书。 - 颁发者将签名过的数字证书和公钥一起交给证书持有者。
验签过程
- 使用者通过某种方式(例如,浏览器访问)获取签名过的数字证书,解析后可以得到数字签名
γ
和数字证书。 - 使用者使用数字证书中的指纹算法重新计算数字证书相关内容,生成一个新的指纹
β
。 - 同时,使用者使用获取到的颁发者的公钥解密数字签名,得到解密后的指纹
α
。 - 对比两个指纹
α
和β
,如果相同,则证明证书是合法的,使用者可以信任并使用该证书中的信息(例如,持有者的公钥)。
例子:X.509 证书包含的信息
- 证书的版本信息
- 证书的序列号
- 证书所使用的签名算法
- 证书的发行机构名称
- 证书的有效期,现在通用的证书一般采用UTC时间格式,它的计时范围为1950-2049
- 证书所有人的名称
- 证书所有人的公开密钥
- 证书发行者对证书的签名
作用
- 数据加密:加密数据确保数据安全
- 身份确定:确保双方身份正确
- 不可篡改:无法修改已签名的文件
- 不可否认:CA 的监督下确保交易达成后不能否认未进行交易