Skip to content

Commit

Permalink
Merge pull request wolverinn#56 from RealBeBetter/master
Browse files Browse the repository at this point in the history
fix: fix Computer Network TCP images
  • Loading branch information
wolverinn authored Dec 12, 2022
2 parents fd8c9e9 + 4ef264b commit ca69799
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 2 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.DS_Store
*/.DS_Store
.idea/
46 changes: 44 additions & 2 deletions Computer Network.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

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

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

- 第一次握手:Client将SYN置1,随机产生一个初始序列号seq发送给Server,进入SYN_SENT状态;
- 第二次握手:Server收到Client的SYN=1之后,知道客户端请求建立连接,将自己的SYN置1,ACK置1,产生一个acknowledge number=sequence number+1,并随机产生一个自己的初始序列号,发送给客户端;进入SYN_RCVD状态;
Expand Down Expand Up @@ -90,7 +90,7 @@ TCP连接的一方A,随机选择一个32位的序列号(Sequence Number)

### 什么是四次挥手?

![四次挥手](_v_images/20191129112652915_15481.png)
![image-20221212004254912](/_v_images/image-20221212004254912.png)

- 第一次挥手:Client将FIN置为1,发送一个序列号seq给Server;进入FIN_WAIT_1状态;
- 第二次挥手:Server收到FIN之后,发送一个ACK=1,acknowledge number=收到的序列号+1;进入CLOSE_WAIT状态。此时客户端已经没有要发送的数据了,但仍可以接受服务器发来的数据。
Expand Down Expand Up @@ -263,6 +263,8 @@ https://zh.wikipedia.org/wiki/HTTP/3
##### Https的连接过程?
<details>
<summary>展开</summary>
![image-20221212012139142](/_v_images/image-20221212012139142.png)


1. 客户端向服务器发送请求,同时发送客户端支持的一套加密规则(包括对称加密、非对称加密、摘要算法);
2. 服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,**加密公钥**(用于非对称加密),以及证书的颁发机构等信息(证书中的私钥只能用于服务器端进行解密);
Expand Down Expand Up @@ -404,7 +406,47 @@ Cookie保存在客户端本地,客户端请求服务器时会将Cookie一起

用于解决内网中的主机要和因特网上的主机通信。由NAT路由器将主机的本地IP地址转换为全球IP地址,分为静态转换(转换得到的全球IP地址固定不变)和动态NAT转换。

## HTTP各版本

![image-20220528142308368](/_v_images/202205281423439.png)

- HTTP 0.9版本

- HTTP协议的第一个版本,功能简单,**已弃用**
- 仅支持纯文本数据的传输,虽然支持HTML,但是不支持图片插入
- 仅支持GET请求方式,且不支持请求头
- 无状态,短连接。没有对用户状态的管理;每次请求建立一个TCP连接,响应之后关闭TCP连接。

- HTTP 1.0版本

- 支持POST、GET、HEAD三种方法
- **支持长连接keep-alive**(但**默认还是使用短连接**:浏览器每一次请求建立一次TCP连接,请求处理完毕之后断开)。
- 服务器不跟踪用户的行为也不记录用户过往请求。

- HTTP 1.1版本

- 新增PUT、DELETE、CONNECT、TRACE、OPTIONS方法,是现今**使用最多**的版本。
- 支持长连接,在一次TCP连接中可以发送多个请求或响应,且默认使用长连接。
- 支持宽带优化、断点续传。请求的对象部分数据,可以不必发送整个对象;文件上传下载支持续传。
- 因为长连接产生的问题:队头阻塞。长连接中,发送请求和响应都是串行化的,前面的消息会造成后面的消息也阻塞。解决方法是创建多个TCP连接,这样就可以基本保证了可用性,浏览器**默认的最大TCP连接数是6个**

- HTTP 2.0版本

- 二进制分帧,所有帧都是用二进制编码,节省了空间
- 多路复用:HTTP 2.0中所有的连接都是持久化的。相比1.1版本可以不用维护更多的TCP连接,在处理并发请求的时候,可以将多个数据流中**互不依赖的帧**可以**乱序发送**,同时还支持**优先级**。接收方接收之后可以根据帧头部信息将帧组合起来。(解决了1.1版本中的队头阻塞问题)
- 头部压缩:1.1版本每次传输都需要传输一份首部,2.0让双方各自缓存一份首部字段表,达到更快传输的目标。

- HTTP 3.0版本

- 基于UDP的**QUIC多路复用**:在一个QUIC中可以并发发送多个HTTP请求Stream,且如果各个Stream互不依赖,那么就不会造成**使用TCP带来的队头阻塞问题**。这个问题源头上是因为TCP连接,TCP连接的性质决定了重传会影响队后的数据发送,所以干脆选用UDP来解决这个方案。
- 0RRT建链:RRT表示Round-Trip Time,3.0可以实现0RRT建链。一般来说HTTPS协议要建立完整链接包括**TCP握手****TLS握手**,总计需要至少2-3个RTT,普通的HTTP协议也需要至少1个RTT才可以完成握手。基于UDP的QUIC协议可以在第一次发送包的时候直接发送业务数据。但是由于首次连接需要发送公钥数据,所以首次连接并不使用这一方法。

![image-202205281424550.gif](/_v_images/202205281424550.gif)

> 参考文档:[图解 | 为什么HTTP3.0要弃用TCP协议,而改用UDP协议?_涛哥聊Python-CSDN博客](
### 参考
- [面试/笔试第一弹 —— 计算机网络面试问题集锦](https://blog.csdn.net/justloveyou_/article/details/78303617)
- [【面试】计算机网络_雨下一整晚real的博客-CSDN博客](https://blog.csdn.net/qq_43103529/article/details/120813469)
- [什么时候选TCP、UDP?](https://blog.csdn.net/yjxsdzx/article/details/71937886)
- [TCP速率与窗口,带宽,RTT之间的关系](https://blog.csdn.net/bad_sheep/article/details/6158676)
Binary file added _v_images/202205281423439.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/202205281424550.gif
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/image-20221212004219997.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/image-20221212004254912.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/image-20221212012139142.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 ca69799

Please sign in to comment.