一、HTTP协议原理
 1. HTTP协议概述
 
 HTTP(HyperText Transfer Protocol,超文本传输协议)是用于在Web浏览器和服务器之间传输超文本的应用层协议。它是无状态的,即每次请求都是独立的,不保留任何上下文信息。
2. HTTP请求与响应
 HTTP请求
 
 一个HTTP请求由以下部分组成:
请求行:包含请求方法、请求URI和HTTP版本。
 请求头部:包括多个头字段,提供请求的附加信息。
 请求主体(可选):在POST或PUT请求中包含数据。
 示例:
vbnet
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
 HTTP响应
 
 一个HTTP响应由以下部分组成:
状态行:包含HTTP版本、状态码和原因短语。
 响应头部:包括多个头字段,提供响应的附加信息。
 响应主体(可选):包含实际的数据内容。
 示例:
less
HTTP/1.1 200 OK
Date: Mon, 23 May 2022 22:38:34 GMT
Server: Apache/2.4.1 (Unix)
Content-Length: 438
Content-Type: text/html
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>3. 常见的HTTP方法
 GET:请求指定资源的信息。
 POST:向服务器提交数据,通常用于提交表单。
 PUT:上传指定资源。
 DELETE:删除指定资源。
 HEAD:请求资源的头部信息。
 OPTIONS:请求服务器支持的HTTP方法。
 PATCH:局部更新资源。
 4. 常见的HTTP状态码
 
 1xx(信息性状态码):表示请求已接收,继续处理。
 100 Continue
 2xx(成功状态码):表示请求已成功处理。
 200 OK
 201 Created
 3xx(重定向状态码):表示需要进一步操作以完成请求。
 301 Moved Permanently
 302 Found
 4xx(客户端错误状态码):表示请求错误。
 400 Bad Request
 401 Unauthorized
 404 Not Found
 5xx(服务器错误状态码):表示服务器处理请求时发生错误。
 500 Internal Server Error
 502 Bad Gateway
 5. HTTP/1.1 vs HTTP/2
 
 HTTP/1.1:
 
基于文本协议,易于调试。
 单个TCP连接上只能发送一个请求,阻塞问题严重(队头阻塞)。
 支持持久连接和管道化。
 HTTP/2:
 
基于二进制协议,提高了传输效率。
 使用多路复用技术,在单个TCP连接上可以同时发送多个请求。
 支持服务器推送,提升资源加载效率。
 更高效的头部压缩。
二、TCP/IP协议栈
 1. TCP/IP协议概述
 
 TCP/IP协议栈是互联网的基础协议集,分为四层:应用层、传输层、网络层和链路层。
2. 各层功能及常见协议
应用层
 功能:为应用程序提供网络服务。
 常见协议:HTTP、HTTPS、FTP、SMTP、DNS、SSH。
传输层
 功能:提供端到端的通信服务,负责数据传输的可靠性和完整性。
常见协议:
 TCP(传输控制协议):
 面向连接,提供可靠的数据传输。
 数据传输前需建立连接(三次握手),传输完毕后需关闭连接(四次挥手)。
 具有流量控制和拥塞控制机制。
 UDP(用户数据报协议):
 无连接,提供不可靠的数据传输。
 传输效率高,适用于实时应用(如视频流、在线游戏)。
网络层
 功能:负责数据包的路由和转发。
 常见协议:
 IP(互联网协议):
 提供不可靠的、无连接的数据传输。
 IPv4和IPv6是两种主要版本。
 ICMP(Internet控制报文协议):
 用于发送错误报告和网络探测信息(如ping命令)。
 ARP(地址解析协议):
 将IP地址解析为MAC地址。
链路层
 功能:负责物理网络上的数据传输。
 常见协议:
 Ethernet(以太网):
 常用的局域网技术,使用MAC地址进行数据传输。
 PPP(点对点协议):
 用于点对点连接的数据链路层协议。
3. TCP三次握手和四次挥手
三次握手
 TCP在通信开始前需要建立连接,使用三次握手过程:
SYN:客户端发送SYN(同步)包,表示希望建立连接。
 SYN-ACK:服务器接收到SYN包后,回复一个SYN-ACK包,表示同意建立连接。
 ACK:客户端接收到SYN-ACK包后,回复一个ACK包,连接建立成功。
 示例:
markdown
1. Client -> Server: SYN
2. Server -> Client: SYN-ACK
3. Client -> Server: ACK
四次挥手
 TCP在通信结束后需要关闭连接,使用四次挥手过程:
FIN:客户端发送FIN(终止)包,表示希望关闭连接。
 ACK:服务器接收到FIN包后,回复一个ACK包,表示同意关闭连接。
 FIN:服务器也发送一个FIN包,表示希望关闭连接。
 ACK:客户端接收到FIN包后,回复一个ACK包,连接关闭成功。
 示例:
markdown
  
1. Client -> Server: FIN
2. Server -> Client: ACK
3. Server -> Client: FIN
4. Client -> Server: ACK









