<commit_before>---
layout: post
category: ComputerNetwork
title: 计算机网络复习
tags: ComputerNetwork
---

[张今灵整理](https://github.com/Gillian97/FrontEnd-Interview/blob/main/NetWork.md)

## ssh工作原理

> [参考](https://segmentfault.com/a/1190000037563769)

SSH的加密原理中，使用了RSA非对称加密算法。
整个过程是这样的：
（1）远程主机收到用户的登录请求，把自己的公钥发给用户。
（2）用户使用这个公钥，将登录密码加密后，发送回来。
（3）远程主机用自己的私钥，解密登录密码，如果密码正确，就同意用户登录。

#### 中间人攻击

SSH之所以能够保证安全，原因在于它采用了公钥加密，这个过程本身是安全的，但是实际用的时候存在一个风险：如果有人截获了登录请求，然后冒充远程主机，将伪造的公钥发给用户，那么用户很难辨别真伪。因为不像https协议，SSH协议的公钥是没有证书中心（CA）公证的，是自己签发的。

如果攻击者插在用户与远程主机之间（比如在公共的wifi区域），用伪造的公钥，获取用户的登录密码。再用这个密码登录远程主机，那么SSH的安全机制就不存在了。这种风险就是著名的"中间人攻击"（Man-in-the-middle attack）。那么SSH协议是怎样应对的呢？

#### 口令登录

让用户手动确定是否同意，并给出diff。确认后会缓存，之后不会warning.

#### 公钥登录

把客户端端公钥手动保存在服务端。登录的时候，远程主机会向用户发送一段随机字符串，用户用自己的私钥加密后，再发回来。远程主机用事先储存的公钥进行解密，如果成功，就证明用户是可信的，直接允许登录shell，不再要求密码。

也就是数字签名。

## httpDns

HTTPDNS使用HTTP与DNS服务器交互，代替传统的基于UDP的DNS协议，域名解析请求直接发送到HTTPDNS服务端，从而绕过运营商的Local DNS

- 传统的DNS有解析慢，更新不及时，转发跨运营商，nat跨运营商等问题，影响了流量的调度。
- HTTPDNS通过客户端sdk和服务端，直接解析dns，绕过了传统dns缺点，实现智能调度，同时从根本避免了**劫持**问题。

[这个解释好些](https://juejin.im/post/6844903695587475469)

[参考](https://www.cnblogs.com/jimmyhe/p/11279762.html)

## https

HTTP 由于是明文传输，所以安全上存在以下三个风险：

- **窃听风险**，比如通信链路上可以获取通信内容，用户号容易没。
- **篡改风险**，比如强制入垃圾广告，视觉污染，用户眼容易瞎。
- **冒充风险**，比如冒充淘宝网站，用户钱容易没。

HTTP**S** 在 HTTP 与 TCP 层之间加入了 `SSL/TLS` 协议。

[![图片](https://cdn.jsdelivr.net/gh/mafulong/mdPic@vv3/v3/20211222183251.jpg)](https://github.com/Gillian97/FrontEnd-Interview/blob/main/images/协议栈.jpg)

可以很好的解决了上述的风险：

- **信息加密**：交互信息无法被窃取，但你的号会因为「自身忘记」账号而没。
- **校验机制**：无法篡改通信内容，篡改了就不能正常显示，但百度「竞价排名」依然可以搜索垃圾广告。
- **身份证书**：证明淘宝是真的淘宝网，但你的钱还是会因为「剁手」而没。

##### HTTPS 解决方案

> HTTPS 是如何解决上面的三个风险的？

- **混合加密**的方式实现信息的**机密性**，解决了窃听的风险。
- **摘要算法**的方式来实现**完整性**，它能够为数据生成独一无二的「指纹」，指纹用于校验数据的完整性，解决了篡改的风险。
- 将服务器公钥放入到**数字证书**中，解决了冒充的风险（中间人攻击）。



HTTPS 采用的是**对称加密**和**非对称加密**结合的「混合加密」方式：

- 在通信建立前采用**非对称加密**的方式交换「会话秘钥」，后续就不再使用非对称加密。
- 在通信过程中全部使用**对称加密**的「会话秘钥」的方式加密明文数据。



SSL/TLS 协议基本流程：

- 客户端向服务器索要并验证服务器的公钥。<commit_msg>add logbook<commit_after>---
layout: post
category: ComputerNetwork
title: 计算机网络复习
tags: ComputerNetwork
---

[张今灵整理](https://github.com/Gillian97/FrontEnd-Interview/blob/main/NetWork.md)

## ssh工作原理

> [参考](https://segmentfault.com/a/1190000037563769)

SSH的加密原理中，使用了RSA非对称加密算法。
整个过程是这样的：
（1）远程主机收到用户的登录请求，把自己的公钥发给用户。
（2）用户使用这个公钥，将登录密码加密后，发送回来。
（3）远程主机用自己的私钥，解密登录密码，如果密码正确，就同意用户登录。

#### 中间人攻击

SSH之所以能够保证安全，原因在于它采用了公钥加密，这个过程本身是安全的，但是实际用的时候存在一个风险：如果有人截获了登录请求，然后冒充远程主机，将伪造的公钥发给用户，那么用户很难辨别真伪。因为不像https协议，SSH协议的公钥是没有证书中心（CA）公证的，是自己签发的。

如果攻击者插在用户与远程主机之间（比如在公共的wifi区域），用伪造的公钥，获取用户的登录密码。再用这个密码登录远程主机，那么SSH的安全机制就不存在了。这种风险就是著名的"中间人攻击"（Man-in-the-middle attack）。那么SSH协议是怎样应对的呢？

#### 口令登录

让用户手动确定是否同意，并给出diff。确认后会缓存，之后不会warning.

#### 公钥登录

把客户端端公钥手动保存在服务端。登录的时候，远程主机会向用户发送一段随机字符串，用户用自己的私钥加密后，再发回来。远程主机用事先储存的公钥进行解密，如果成功，就证明用户是可信的，直接允许登录shell，不再要求密码。

也就是数字签名。

## httpDns

HTTPDNS使用HTTP与DNS服务器交互，代替传统的基于UDP的DNS协议，域名解析请求直接发送到HTTPDNS服务端，从而绕过运营商的Local DNS

- 传统的DNS有解析慢，更新不及时，转发跨运营商，nat跨运营商等问题，影响了流量的调度。
- HTTPDNS通过客户端sdk和服务端，直接解析dns，绕过了传统dns缺点，实现智能调度，同时从根本避免了**劫持**问题。

[这个解释好些](https://juejin.im/post/6844903695587475469)

[参考](https://www.cnblogs.com/jimmyhe/p/11279762.html)

## https

HTTP 由于是明文传输，所以安全上存在以下三个风险：

- **窃听风险**，比如通信链路上可以获取通信内容，用户号容易没。
- **篡改风险**，比如强制入垃圾广告，视觉污染，用户眼容易瞎。
- **冒充风险**，比如冒充淘宝网站，用户钱容易没。

解决： 加密、认证、防篡改

HTTP**S** 在 HTTP 与 TCP 层之间加入了 `SSL/TLS` 协议。

[![图片](https://cdn.jsdelivr.net/gh/mafulong/mdPic@vv3/v3/20211222183251.jpg)](https://github.com/Gillian97/FrontEnd-Interview/blob/main/images/协议栈.jpg)

可以很好的解决了上述的风险：

- **信息加密**：交互信息无法被窃取，但你的号会因为「自身忘记」账号而没。
- **校验机制**：无法篡改通信内容，篡改了就不能正常显示，但百度「竞价排名」依然可以搜索垃圾广告。
- **身份证书**：证明淘宝是真的淘宝网，但你的钱还是会因为「剁手」而没。

##### HTTPS 解决方案

> HTTPS 是如何解决上面的三个风险的？

- **混合加密**的方式实现信息的**机密性**，解决了窃听的风险。
- **摘要算法**的方式来实现**完整性**，它能够为数据生成独一无二的「指纹」，指纹用于校验数据的完整性，解决了篡改的风险。
- 将服务器公钥放入到**数字证书**中，解决了冒充的风险（中间人攻击）。



HTTPS 采用的是**对称加密**和**非对称加密**结合的「混合加密」方式：

- 在通信建立前采用**非对称加密**的方式交换「会话秘钥」，后续就不再使用非对称加密。
- 在通信过程中全部使用**对称加密**的「会话秘钥」的方式加密明文数据。



SSL/TLS 协议基本流程：

- 客户端向服务器索要并验证服务器的公钥。
{'fraction_non_alphanumeric': 0.1672880934625901, 'fraction_numerical': 0.03281133482475764, 'mean_word_length': 8.985111662531017, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 7, 'https://': 12, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6646545', 'n_tokens_mistral': 3314, 'n_tokens_neox': 3846, 'n_words': 134}