七层OSI
- 物理层
- 数据链路层(ARP)
- 网络层(IP ICMP)
- 传输层(TCP UDP)
- 会话层 (SSL TLS)
- 表示层
- 应用层(HTTP FTP SMTP POP3 DNS)
三次握手&四次挥手
三次握手
client -> server : SYN=1, seq=x (client : SYN_SENT)
server -> client : ACK=1, ack=x+1, seq=y (server : SYN_REV)
client->server : ACK=1, ack=y+1 (client : ESTABLISHED)
四次挥手
client -> server : FIN, seq=x (client : FIN_WAIT_1)
server -> client : ACK, ack=x+1 (server: CLOSE_WAIT, client : FIN_WAIT_2)
server -> client : FIN, seq=y (server : LAST_ACK, client : TIME_WAIT)
client -> server : ACK, ack=y+1 (client : CLOSED)
TCP vs UDP
都位于传输层
TCP
- 基于连接,可靠
- 系统资源要求多
- 流量控制、堵塞控制、重传
UDP
- 无连接,不可靠
- 系统资源要求少
session vs cookie
HTTP是无状态的协议,服务端需要记录用户的状态,采用某种机制来标记识别用户,使用session跟踪会话。
session
- 服务器端
- 保存在集群、数据库、文件中
cookie
- 客户端
- 保存用户名与密码
第一次创建Session时,服务端会在HTTP协议中告诉客户端需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器。
HTTPS
经由HTTP进行通信,但利用SSL/TLS来加密数据包
主要目的:提供对网站服务器的身份认证,保护数据的隐私与完整性
- HTTP:默认端口80
- HTTPS:默认端口443
《图解HTTP》
HTTP+加密+认证+完整性保护=HTTPS
HTTPS采用混合加密机制
- 使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥
- 确保交换的密钥是安全的前提下,使用共享密钥加密方式进行通信
- 共享密钥加密(对称密钥加密):加密和解密通用一个密钥
- 公开密钥加密(非对称密钥加密):使用一堆非对称的密钥(私有密钥、公开密钥),发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密
HTTPS的安全通信机制
- 客户端发送报文开始SSL通信,报文中包含客户端支持的SSL指定版本,加密组件(加密算法及密钥长度等)
- 服务器端以报文作为应答,报文包含SSL版本以及加密组件;器发送证书报文,包含公开密钥证书;发送结束报文,SSL握手协商部分结束
- 客户端以报文作为回应,包括随机密码串,已用证书中公开密钥加密;发送报文提示服务器之后通信采用密钥加密;发送结束报文,包含连接至今全部报文的整体校验值
- 服务器端发送报文提示采用密钥加密;发送结束报文
- SSL连接建立完成
服务器与客户端协商加密组件 -> 服务器发送公开密钥证书 -> 客户端确认证书有效性,取出公开密钥 -> 客户端生成随机数,使用公开密钥对随机数进行加密处理,发送已加密的随机数 ->服务器用私有密钥解密,生成随机数
HTTP状态码
- 2XX 成功
- 200 OK、
- 204 No Content
- 3XX 重定向
- 4XX 客户端错误
- 400 Bad Request
- 401 Unauthorized
- 403 Forbidden
- 404 Not found
- 5XX 服务器错误
- 500 Internal Server Error
- 503 Service Unavailable
HTTP协议
HTTP是一种不保存状态,即无状态协议
HTTP请求报文
- 请求行:请求方法 请求URL 协议版本
- 请求首部字段(可选)
- 内容实体
HTTP响应报文
- 响应行:协议版本 状态码 状态码的原因短语
- 响应首部字段(可选)
- 实体主体
HTTP方法
- GET:获取资源
- POST:传输实体主体
- PUT:传输文件
- HEAD:获得报文首部
- DELETE:删除文件
- OPTION:询问支持的方法
- TRACE:追踪路径
- CONNECT:要求用隧道协议连接代理
HTTP/2.0
改善用户在使用Web时的速度体验
- 多路复用允许同时通过难过单一的HTTP/2.0连接发起多重的请求响应消息