网络
- HTTP请求类型
GET POST HEAD PUT DELETE OPTION
- GET POST区别
GET:安全 幂等 可缓存
POST:非安全 非幂等 非可缓存
安全:(GET HEAD OPTION)
幂等:(GET PUT DELETE)
可缓存:(GET HEAD)
- 三次握手 四次挥手
三次握手
C SYN
S SYN+ACK
C ACK
四次挥手
C FIN
S ACK
S FIN+ACK
C ACK
为什么三次:
- 三次才可以阻止重复历史连接 (旧的SYN先到
- 三次才可以同步初始序列号(SYN +ACK才可以保证序列号一致,序列号保证去重复)
- 三次可以避免资源浪费
为什么四次挥手:
服务器通常等待完成数据的发送和处理,所以 服务端ACK和FIN分开发送
2MSL maximun segment lifttime 报文最大生存事件(2MSL=60s)
- HTTP特点 和优缺点 等
1.HTTP 是灵活可扩展的,可以任意添加头字段实现功能
2.HTTP 是可靠传输,利用TCP/IP,‘尽量’保证数据到达
3.HTTP 是应用层协议,比起FTP,SSH,SMTP,它更通用,能够传输人意数据
4.HTTP 是请求-应答模式,客户端主动请求,服务器被动回复(无连接)
5.HTTP 本质是无状态的,每个请求无关联
无连接 (HTTP持久连接),减少建立
无状态 (Cookie/Session)
头部字段
connection: keep-alive
time:20
max:10(多少个请求响应对)
如何判断请求结束
Content-length :1024
chunked:空格
优缺点
1.HTTP 最大的优点是简单,灵活,易于扩展
2.HTTP 有成熟的软硬件环境,应用广泛,是互联网的基础设施
3.HTTP 是无状态,可以轻松实现集群化,扩展性能,可以通过cookie实现有状态
4.HTTP 明文传输,更方便分析研究,已被窃听
5.HTTP 死不安全的,无法验证双方身份,也无法判断是否篡改
6.HTTP性能不算差,但是还有提升空间
HTTP1.1
长链接:解决效率问题,一个连接收发多个响应
2.过多长链接也会占用资源。需要策略选择关闭
3.队头阻塞 可以用 并发连接 和 域名分片解决
HTTP2
1.取消了小版本号,没有2.0
2.兼容HTTP1
3.HPACK压缩头部,消除重复冗余数据
4.二进制桢传输,而非header+body
5.虚拟流:队头堵塞,多路复用
6.安全性提升1.2+
HTTP3.0:
谷歌开发的QUIC协议,利用UDP实现可靠数据传输。
-----HTTP架构-----
HTTP
SSL/TLS
TCP/IP
-----HTTP2架构-----
HTTP
HPack/Stream
TLS 1.2+
TCP/IP
- Charles
中间人攻击,CA证书 完全信任
窃听风险 加密
篡改风险 摘要
冒充风险 证书
- HTTPS + SSL/TLS 流程
TCP/IP 中间插入了 SSL/TLS
C:TSL版本 ,支持的加密算法 ,随机数 C
S:商定的加密算法,随机数S,server证书
C:验证证书(CA发布),组装会话密钥 (随机C+随机S+预主密钥
C:通过公钥对 预主密钥(pre-master key)加密传输 (摘要算法)
S:私钥解密获得主密钥,组装会话密钥
C:加密的握手消息
S:加密的握手消息
通信建立非对称加密交互密钥
通信用对称加密
- UDP 和 TCP
UDP
无连接
尽最大努力交付
面向报文(不合并 不拆分)
复用 分用 差错检测
TCP
面向连接 :开始之前需要连接(三握四挥)
可靠传输 (无差错,不丢失,不重复,按序到达)
面向字节流
流量控制(滑动窗口协议,发送窗口接收大小,接受窗口发送大小)
拥塞控制(慢开始,拥塞避免。快恢复,快重传:新的x+3)。先指数到16,线性
- DNS (端口53)
使用 UDP & 明文
递归查询 (帮你问一下)本地DNS-根域DNS-顶级DNS-权限DNS
迭代查询 (告诉你谁可能知道)
DNS劫持,窃听 钓鱼DNS。 DNS解析在HTTP连接之前
解决 劫持
- httpDNS使用 HTTPS访问80端口
- 长连接 Client - 长连Server - 内网 - server
DNS解析转发,移动为了节省资源,转发给电信DNS,但是移动电信可能不一样,跨网变慢
- Session/Cookie
server生成cookie,客户端记录
cookie主要记录用户状态,区分用户,状态保存在客户端
修改:新cookie覆盖老cookie,规则name path domain需要一致
删除:新cookie覆盖老cookie,,规则name path domain需要一致 设置过期时间 或者
Max-Age, Expires,Domain(作用域),HttpOnly(只能通过HTTP传输)
cookie安全
- 加密
- 只在https携带cookie
- 设置cookie为httpOnly,防止跨站脚本(https://blog.csdn.net/qq_38553333/article/details/80055521)js脚本将无法读取到cookie
Session
Session主要记录用户状态,区分用户,状态保存在服务端
依赖cookie机制
server 生成sessionId set-Cookie sessid=xxxx
client 发送 Cookie:sessid=xxxx,通过sessid区别
scoket
HTTP:超文本传输协议,首先它是一个协议,并且是基于TCP/IP协议基础之上的应用层协议。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,HTTP是应用层协议,主要解决如何包装数据。HTTP协议详细规定了浏览器与服务器之间相互通信的规则,是万维网交换信息的基础。HTTP是基于请求-响应形式并且是短连接,并且是无状态的协议。针对其无状态特性,在实际应用中又需要有状态的形式,因此一般会通过session/cookie技术来解决此问题。
Socket:Socket是应用层与TCP/IP协议族通信的中间软件抽象层, 它是一组接口。 Socket不属于协议范畴,而是一个调用接口(API),Socket是对TCP/IP协议的封装,通过调用Socket,才能使用TCP/IP协议。Socket连接是长连接,理论上客户端和服务器端一旦建立连接将不会主动断开此连接。Socket连接属于请求-响应形式,服务端可主动将消息推送给客户端。