Skip to content

Commit

Permalink
http
Browse files Browse the repository at this point in the history
  • Loading branch information
wolverinn committed Nov 29, 2019
1 parent 42b2aee commit 637af44
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 2 deletions.
63 changes: 61 additions & 2 deletions Computer Network.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 计算机网络

### 什么是三次握手?
### 什么是三次握手(three-way handshake)

![三次握手](_v_images/20191129101827556_21212.png)

Expand Down Expand Up @@ -107,4 +107,63 @@ MSL(Maximum Segment Lifetime),指一个片段在网络中最大的存活时间

拥塞控制主要由四个算法组成:**慢启动(Slow Start)、拥塞避免(Congestion voidance)、快重传 (Fast Retransmit)、快恢复(Fast Recovery)**

1. 慢启动:
1. 慢启动:刚开始发送数据时,先把拥塞窗口(congestion window)设置为一个最大报文段MSS的数值,每收到一个新的确认报文之后,就把拥塞窗口加1个MSS。这样每经过一个传输轮次(或者说是每经过一个往返时间RTT),拥塞窗口的大小就会加倍

![slow start](_v_images/20191129155345024_11142.png)

2. 拥塞避免:当拥塞窗口的大小达到慢开始门限(slow start threshold)时,开始执行拥塞避免算法,拥塞窗口大小不再指数增加,而是线性增加,即每经过一个传输轮次只增加1MSS.
> 无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。**(这是不使用快重传的情况)**
3. 快重传:快重传要求接收方在收到一个失序的报文段后就立即发出**重复确认**(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

![快重传](_v_images/20191129161026032_32431.png)

4. 快恢复:当发送方连续收到三个重复确认时,就把慢开始门限减半,然后执行拥塞避免算法。不执行慢开始算法的原因:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方认为现在网络可能没有出现拥塞。
也有的快重传是把开始时的拥塞窗口cwnd值再增大一点,即等于 ssthresh + 3*MSS 。这样做的理由是:既然发送方收到三个重复的确认,就表明有三个分组已经离开了网络。这三个分组不再消耗网络的资源而是停留在接收方的缓存中。可见现在网络中减少了三个分组。因此可以适当把拥塞窗口扩大些。

### TCP与UDP的区别

1. TCP是面向连接的,UDP是无连接的;
2. TCP是可靠的,UDP不可靠;
3. TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多;
4. TCP是面向字节流的,UDP是面向报文的;
5. TCP有拥塞控制机制,UDP没有,适合媒体通信;
6. TCP首部开销(20字节)比UDP首部开销(8字节)要大

### HTTP和HTTPS有什么区别?

1. 端口不同:HTTP使用的是80端口,HTTPS使用443端口;
2. HTTP(超文本传输协议)信息是明文传输,HTTPS运行在SSL(Secure Socket Layer)之上,添加了加密和认证机制,更加安全;
3. HTTPS由于加密解密会带来更大的CPU和内存开销;
4. HTTPS通信需要证书,一般需要向证书颁发机构(CA)购买

##### Https的连接过程?
<details>
<summary>展开</summary>

1. 客户端向服务器发送请求,同时发送客户端支持的一套加密规则(包括对称加密、非对称加密、摘要算法);
2. 服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,**加密公钥**(用于非对称加密),以及证书的颁发机构等信息(证书中的私钥只能用于服务器端进行解密);
3. 客户端验证服务器的合法性,包括:证书是否过期,CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配;
4. 如果证书受信任,或者用户接收了不受信任的证书,浏览器会生成一个**随机密钥**(用于对称算法),并用服务器提供的公钥加密(采用非对称算法对密钥加密);使用Hash算法对握手消息进行**摘要**计算,并对摘要使用之前产生的密钥加密(对称算法);将加密后的随机密钥和摘要一起发送给服务器;
5. 服务器使用自己的私钥解密,得到对称加密的密钥,用这个密钥解密出Hash摘要值,并验证握手消息是否一致;如果一致,服务器使用对称加密的密钥加密握手消息发给浏览器;
6. 浏览器解密并验证摘要,若一致,则握手结束。之后的数据传送都使用对称加密的密钥进行加密

总结:非对称加密算法用于在握手过程中加密生成的密码;对称加密算法用于对真正传输的数据进行加密;HASH算法用于验证数据的完整性。
</details>

##### 什么是对称加密、非对称加密?区别是什么?
<details>
<summary>展开</summary>

- 对称加密:加密和解密采用相同的密钥。如:DES、RC2、RC4
- 非对称加密:需要两个密钥:公钥和私钥。如果用公钥加密,需要用私钥才能解密。如:RSA
- 区别:对称加密速度更快,通常用于大量数据的加密;非对称加密安全性更高(不需要传送私钥)
</details>

##### 数字签名、报文摘要的原理
<details>
<summary>展开</summary>

- 发送者A用私钥进行签名,接收者B用公钥验证签名。因为除A外没有人有私钥,所以B相信签名是来自A。A不可抵赖,B也不能伪造报文。
- 摘要算法:MD5、SHA
</details>
Binary file added _v_images/20191129155345024_11142.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added _v_images/20191129161026032_32431.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 637af44

Please sign in to comment.