# TCP/IP-HTTPS


### TCP/IP

1. `是什么`: 一系列协议组成的网络分层模型
2. `分层原因`: 网络会不稳定, 交给下层让下层去处理这些事情, 让下层去做失败重请求等操作

#### 具体分层

|                   客户端                    |      传输      |     服务端     |
| :-----------------------------------------: | :------------: | :------------: |
|         **应用层**(HTTP/FTP/DNS...)         |                |   **应用层**   |
| **传输层**(TCP: 失败重连/UDP: 不重连<直播>) |                |   **传输层**   |
|         **网络层**(IP): 路由, 寻址          |                |   **网络层**   |
|  **数据链路层**(物理层: 以太网/Wifi/光纤)   | <------------> | **数据链路层** |

#### 连接

1. `是什么`: 通信双方表明接受通信, 不将对方消息丢弃, 即为建立连接(使用端口)

   建立: 三次握手, 断开: 四次挥手(要双方都表明都无消息可发才会断开)

2. `长连接`: 利用四次挥手的原理, 发送心跳包, 阻止TCP连接断开

### HTTPS

1. `定义`: HTTP (Secure / over SSL / over TLS)

   在 HTTP 之下增加一个安全层

2. `原理`: 刚开始通过非对称加密协商出一套对称加密密钥, 之后采用对称加密达到加密传输
3. 为什么不直接非对称加密: 非对称加密`性能差`

#### TLS 建立过程

1. `Client Hello`

2. `Server Hello `(包含加密套件<对称/非对称/hash> / 客户端随机数 / 服务端随机数)

3. `服务器证书` 信任建立 为了保证公钥的可信性会进行以下验证:

   - 服务器公钥 (事实上还会包含 主机名/地区 等信息)

   - 服务器公钥的签名

   - 证书签发机构的公钥

   - 证书签发机构的公钥的签名
   - 证书签发机构的签发机构的公钥
   - 证书签发机构的签发机构的公钥的签名
   - .....
   - 根证书 (由系统自带)

4. `Secret` 使用随机数使用服务端公钥加密

   生成 Master secrect / 客户端加密密钥 / 服务端加密密钥 / 客户端 MAC secrect / 服务端 MAC secrect

   - 为什么不直接用公钥加密

     目的: 防止中间人拦截后多次发送给服务端

   - 客户端用服务端密钥加密发给服务端, 服务端用客户端密钥加密发给客户端

     目的: 防止中间人将消息直接扔回

5. `客户端通知`：将使用加密通信 

6. `客户端发送`：Finished

7. `服务器通知`：将使用加密通信

8. `服务器发送`：Finished
