网络协议
计算机知识思维导图:网络协议。网页展示前三层结构,可在线查看完整脑图并下载 GoMind 文件。
2026-08-25
## 网络协议 ### 网络协议 #### tcp ##### 建立连接(三次握手) ##### 关闭连接(四次挥手) #### udp #### http ##### 影响 HTTP 请求的因素 ##### 版本 ##### 状态码 ##### Untitled node > 仅展示前三层结构;请在线查看完整脑图或下载 GoMind 文件。
网络协议
网络协议
1. 客户端向服务器发送连接请求报文,SYN=1, seq=x
2. 服务器接收刀连接请求后,返回确认信息,SYN=1,ACK=1,seq=y, ack=x+1
3. 客户端收到应答后,再次向服务器发送一个确认报文,ACK=1,seq=x+1, ack=y+1
为什么要建立三次连接?
PS:失效的连接请求:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』。若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。 作者:大闲人柴毛毛 链接:https://www.zhihu.com/question/24853633/answer/254224088 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
建立连接(三次握手)
1. 客户端发出连接释放报文,并停止发送数据。FIN=1, seq=x, 进入FIN-WAIT-1状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2. 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
关闭连接(四次挥手)
tcp
udp
带宽
浏览器阻塞
DNS查询
建立连接
延迟
影响 HTTP 请求的因素
If-Modified-Since
Expires
缓存处理
1.0
长连接
HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
Entity tag
If-Unmodified-Since
If-Match
If-None-Match
....
更多缓存处理
支持断点续传 Accept-Ranges
在请求头引入了range头域
409(Conflict)表示请求的资源与资源的当前状态发生冲突
410(Gone)表示服务器上的某个资源被永久性的删除
新增了24个错误状态响应码
Host头处理
在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
支持更多命令,如PUT, PATCH, OPTIONS, DELETE
支持管道机制(pipelining),即一个TCP连接内可以同时发起多个请求
支持分块传输编码(chunked transfer encoding)
支持复用TCP连接,但仍然会产生队头阻塞(Head-of-line blocking)问题
1.1
服务端推送
header头部压缩
多路复用
完全采用二进制协议
2.0
版本
状态码
Untitled node
http