计网
网络OSI模型和TCP/IP模型
OSI 网络模型主要有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层
TCP模型 应用层,传输层,网络层和网络接口层
- tcp 在传输层
- ip 在网络层
HTTP、HTTPS、CDN、DNS、FTP 都是应用层协议
用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,避免了连接建立和释放的开销,这个方法称为 HTTP 长连接
建立 TCP -> 请求资源 -> 响应资源 -> 释放连接,那么此方式就是 HTTP 短连接
HTTPS握手过程
在将 TLS 证书部署服务端时,证书文件其实就是服务端的公钥,会在 TLS 握手阶段传递给客户端,而服务端的私钥则一直留在服务端,一定要确保私钥不能被窃取。
在 RSA 密钥协商算法中,客户端会生成随机密钥,并使用服务端的公钥加密后再传给服务端。根据非对称加密算法,公钥加密的消息仅能通过私钥解密,这样服务端解密后,双方就得到了相同的密钥,再用它加密应用消息。
TLS 第一次握手,客户端生产的随机数(Client Random),后面用于生成「会话秘钥」条件之一
TLS 第二次握手,服务器生产的随机数(Server Random),客户端获取服务器的数字证书
TLS 第三次握手,客户端一个随机数,生成本次通信的会话秘钥
TLS 第四次握手,加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信,握手阶段已经结束
HTTP进行TCP连接之后,在什么情况下会中断
无响应或close
DNS 基于UDP协议实现,DNS使用UDP协议进行域名解析和数据传输
cookie和session有什么区别
Cookie的数据存储在客户端,Session的数据存储在服务器端,服务器为每个用户分配一个唯一的Session ID,cookie不安全,可以设置时间,session在浏览器关闭时结束,默认情况下禁用 Cookie 后,Session 是无法正常使用的
JWT 令牌都有哪些字段
头部和载荷均为JSON格式,使用Base64编码进行序列化,而签名部分是对头部、载荷和密钥进行签名后的结果
为什么有HTTP协议了?还要用RPC
RPC 其实比 HTTP 出现的要早,RPC性能还行
HTTP长连接与WebSocket有什么区别
全双工和半双工,应用场景
Nginx支持的负载均衡算法包括
轮询,IP哈希,URL哈希,最短响应时间,加权轮询
tcp的头部
序列号,确认应答号,控制位(ACK,SYN,FIN...)
TCP三次握手过程
客户端初始化序列号,SYN=1
服务端初始化序列号,SYN=1,ACK=1,确认应答号
客户端ACK=1,确认应答号,连接建立
tcp为什么需要三次握手建立连接
为了防止旧的重复连接初始化造成混乱
在两次握手的情况下,服务端没有中间状态给客户端来阻止历史连接
同步双方初始序列号
ACK 报文是不会有重传的,当 ACK 丢失了,就由对方重传对应的报文
大量SYN包发送给服务端服务端会发生什么事情
有可能会导致TCP 半连接队列打满,这样当 TCP 半连接队列满了,后续再在收到 SYN 报文就会丢弃,导致客户端无法和服务端建立连接
增大 TCP 半连接队列,减少 SYN+ACK 重传次数
TCP 四次挥手过程
客户端主动调用关闭连接的函数,于是就会发送 FIN 报文
服务端收到了 FIN 报文,然后马上回复一个 ACK 确认报文,继续 read 接收缓冲区已接收的数据
服务端就会发一个 FIN 包
客户端接收到服务端的 FIN 包,并发送 ACK 确认包给服务端
服务端收到 ACK 确认包后,就进入了最后的 CLOSE 状态,客户端经过 2MSL 时间之后,也进入 CLOSE 状态
第三次挥手一直没发
孤儿连接,在 60 秒后还没有收到 FIN 报文,连接就会直接关闭
为什么四次挥手之后要等2MSL
网络中可能存在来自发送方的数据包
服务端出现大量的timewait
短链接太多,长连接超时
TCP和UDP区别是什么
TCP 是面向连接,TCP 是一对一,拥塞控制、流量控制,TCP 是流式传输,没有边界,但保证顺序和可靠
TCP为什么可靠传输
序列号,确认应答,超时重传,流量控制,拥塞控制
ddos攻击?怎么防范
DDoS 攻击是通过连接互联网的计算机网络进行的,僵尸网络
增强网络基础设施,流量清洗和负载均衡
DNS劫持的原理是攻击者在用户查询DNS服务器时篡改响应,将用户请求的域名映射到攻击者控制的虚假IP地址上,使用户误以为访问的是正常网站
ARQ
停止等待ARQ:超时重传,丢失确认,迟到确认(丢弃重复)
连续ARQ:流水线传输,累积确认(按序最后一个),滑动窗口,回退N帧,选择重传