物理层,数据链路层,网络层,传输层,(会话层,表示层),应用层。
物理层:处理通信连路上原始 比特 的传输 数据链路层:收集比特流形成 帧 (以太网协议) 网络层:处理分组交换网中节点之间的路由选择和 数据报 转发 (IP协议) 传输层:两个端系统中的进程之间的通信提供端到端的服务,报文 (TCP协议,UDP协议) 应用层:直接为用户应用进程提供服务(传输单元不确定)
a.封装成帧:实现可靠传输(在一段数据的前后分别添加首部和尾部)
b.透明传输:无论是什么报文都可以传输
c.差错控制:奇偶校验法和模二法
奇偶校验法:判断1出现的次数奇偶
模二法:生成多项式,模二除法得到多项式余数,填充0
d.常见协议:以太网协议
区别 | TCP | UDP |
---|---|---|
连接性 | 面向链接 | 无连接 |
可靠性 | 可靠 | 不可靠 |
报文 | 字节流 | 报文 |
传输速度 | 慢 | 快 |
连接对象 | 一对一 | 一对一,一对多,多对多 |
应用 | http协议 | DNS寻址 |
TCP保证可靠传输:
三次握手
拥塞窗口控制(保证接收方来得及接受)
慢启动算法(指数幂增长,到达拥塞窗口一半)
拥塞避免算法(慢启动到达拥塞窗口一半后开始慢慢增加)
超时重传
1.客户端发送SYN(syn=x)包,等待服务器确认
2.服务端接受后,确认客户端SYN包,同时发送SYN包(syn=y和ack=x+1)
3.客户端收到后,确认服务端SYN包,发送确认包(ack=y+1),建立链接
为什么是三次不是四次或两次?
1.客户端发送SYN包(syn=x),等待服务端确认
2.服务端接受后,发送ACK给客户端(ack=x+1),(期间可以发送数据)
3.服务端发送FIN和SYN包(syn=y),通知客户端不会在发数据并且请求断开链接
4.客户端接受,发送ACK包(ack=y+1),断开链接
起始行:方法+路径+http版本
头部:头部字段信息
空行:分开头部和主体
主体:数据
http常用方法:get,post,put,delete
头部字段 | 作用 |
---|---|
Connection | 否可以处理持久 HTTP 连接 |
Cookie | 浏览器的 cookies |
Host | URL 中的主机和端口 |
If-Modified-Since | 在指定的日期后已更改时 |
Referer | 预防csrf攻击 |
content-type | 信息类型 |
expires | 判断强缓存 |
cache-control | 判断强缓存 |
content-type类型 | 解释 |
---|---|
application/x-www-form-urlencoded | 提交原生form表单 |
multipart/form-data | post上传提交表单 |
application/json | JSON 字符串 |
响应码 | 意义 | 常见响应码 |
---|---|---|
1XX | 临时响应 | 100:请求者继续请求post中header |
2XX | 成功 | 200:成功 204:成功但无内容 |
3XX | 重定向 | 301:永久重定向 302:临时重定向 304:未修改(HTTP缓存) |
4XX | 请求错误 | 400:错误请求 401:请求要求身份验证 404:服务器找不到请求页面 |
5XX | 服务器错误 | 500:服务器内部错误 |
区别 | get | post |
---|---|---|
缓存 | 缓存 | 不缓存 |
编码 | URL编码 | 无限制 |
参数 | 明文传输 | 请求体传输 |
TCP | 传一个报文 | 分两个数据包传输 |
无连接:浏览器每次请求都需要建立tcp连接 无状态:服务器不跟踪不记录请求过的状态
长连接:新增Connection字段,可以设置keep-alive值保持连接不断开 缓存处理:新增字段cache-control,检查读取缓存 断点传输:在上传/下载资源时,如果资源过大,将其分割为多个部分,分别上传/下载,如果遇到网络故障,可以从已经上传/下载好的地方继续请求,不用从头开始,提高效率 节约带宽:响应式数据排除
多路复用:共享TCP链接的基础上同时发送请求和响应 头部压缩:客户端服务器分别存储头部信息,减少服务器压力 服务器推送:服务器可以额外的向客户端推送资源,而无需客户端明确的请求
基于udp,音视频通话
指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据,还是重新发请求到服务器取数据,Cache-Control优先级高于Expires
Cache-Control
no-cache:不直接使用缓存,根据是否过期来使用缓存
no-store:不使用缓存,每次下载新资源
max-age:缓存时长
public/private:是否只能被单个用户使用,默认为private
must-revalidate:每次访问需要缓存校验
If-Not-Match与ETag生成一段hash字符串,标识资源的状态,由服务端产生。浏览器会将这串字符串传回服务器,验证资源是否已经修改
Etag是服务器端的唯一标识符
服务器端文件的最后修改时间
判断Cache-Control与Expires,在缓存数据未失效的情况下,会命中强缓存,直接使用浏览器的缓存数据,不会再向服务器发送任何请求,http状态码200,如果没有命中强缓存,就会进行协商缓存,对响应头ETag和请求头if-none-match进行校验后,如果不一致,请求头中If-Not-Match和If-Modified-Since进行比较如果时间差不大,返回304状态码,走协商缓存缓存,否则直接返回数据(ETag是服务器端唯一标识,Last-Modified最后修改时间)
https=http+ssl
对称加密:有一个密钥,它可以加密一段信息,也可以对加密后的信息进行解密
非对称加密:有两把密钥,通常一把叫做公钥、一把叫私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开
情况1:
服务器端存在公钥A、私钥A,浏览器存在公钥B、私钥B。互相传输进行解密
情况2:
浏览器接受服务器公钥A,浏览器用公钥A加密秘钥X传服务端,服务器端用公钥A解密
偷换公钥A为公钥B(狸猫换太子)
客户端A访问服务器B,A生成随机数1,SSL版本加密算法等信息传递给服务器B
服务器B知道后确认双方加密算法,生成随机数2,并将随机数2和证书一同返回给客户端A
A得到证书后校验CA证书有效性,生成随机数3,把证书中的公钥加密随机数3传给服务器B
B得到加密随机数3,用私钥解密
客户端A和服务器B都用随机数1,2,3生成一个对话秘钥,之后通信用秘钥加密进行会话
证书的选择、购买到部署,传统的模式下都会比较耗时耗力
与纯文本通信相比,加密通信会消耗更多的CPU及内存资源