计算机网络前端重点
-
协议与划分层次
- OSI七层模型
- 物理层:实现相邻计算机节点之间比特流的透明传送
- 链路层:两台主机之间大的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议
- 网络层:向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。选择合适的路由
- 传输层:负责向两台主机进程之间的通信提供通用的数据传输服务
- 会话层:建立、管理、维护会话
- 表示层:数据格式转化、数据加密
- 应用层:通过应用进程间的交互来完成特定网络应用
- TCP/IP四层协议
- 网络接口层
- 网际层
- 运输层
- 应用层
- OSI七层模型
-
TCP
- 传输可靠性
- 校验和:由发送端计算,然后由接收端验证。其目的是为了发现TCP首部和数据在发送端到接受端之间发生的任何改动,如果接收方检测到校验和有差错,则TCP端会被直接丢弃。
- 序列号:TCP传输时将每个字节的数据都进行了编号,这就是序列号
- 确认应答:每次接收方收到数据后,都会对传输方进行确认应答,也就是发送ACK报文,这个ACK报文当中带有对应的确认序列号,告诉发送方接收到了哪些数据,下一次的数据从哪里发。
- 超时重传:发送方发送数据后,启动一个定时器,超时还未收到接收方的确认,则重新发送这个数据。
- 流量控制
- 控制发送者的发送速度
- 由滑动窗口协议实现,接收方在返回ACK时会包含自己接收窗口的大小,发送方根据接收窗口大小调整自己的发送速度,发送方的窗口大小不能超过接收窗口
- 当接收方不能接收数据了,就会将窗口设置为0,此时发送方就必须停止发送数据并启动一个计时器,时间一到就会主动询问接收方窗口的大小,如果仍然为0则重置计时器继续等待
- 拥塞控制
- 慢开始:由小到大逐渐增加拥塞窗口的大小
- 拥塞避免:按线性规律缓慢增长
- 快重传:发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段
- 快恢复:当发送方连续收到三个重复确认时就执行乘法减小算法,把ssthresh门限减半,然后执行拥塞避免算法
- 三次握手
- 过程:A发送请求,B发送确认报文,A发送确认报文
- 原因
- 为了防止失效的连接请求到达服务器,让服务器错误打开连接
- 双方确认自己与对方的发送与接收是正常的
- 四次挥手
- 过程:A发送释放报文,B发送确认报文,A发出确认进入TIME-WAIT,等待2MSL(最大报文存活时间)后释放连接,B收到确认后释放
- TIME-WAIT等待2MSL原因:为了保证A发送的最后一个ACK报文段能够到达B,防止已失效的连接请求报文段出现在本连接中
- 粘包和拆包
- 发生原因
- 要发送的数据大于TCP发送缓冲区剩余空间大小将会发生拆包;待发送数据大于最大报文长度,TCP在传输前进行拆包。要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;接收数据端的应用层没有及时读取接收缓冲区中的数据将发生粘包
- 解决方法
- 发送端给每个数据包添加包首部,首部中包含数据包的长度
- 发送端将每个数据包封装成固定长度(不够的用0填充)
- 在数据包之间设置边界
- 发生原因
- 传输可靠性
-
http
- 报文结构
- 请求行:由请求方法、URL和HTTP协议版本组成
- 请求头:主要含产生请求的浏览器类型,客户端可以接受的语言‘编码,要访问的主机,请求报文的长度。
- 请求空行:表示请求头发送结束了
- 请求体:具体的请求参数
- 响应行:http协议的版本,状态码,响应描述
- 响应头:返回时间、服务器型号、缓存过期时间
- 响应空行:通知响应头发送结束
- 响应体:前端需要的数据
- 方法
- GET和POST区别
- GET使用URL或cookie传参,而POST将数据放在body中
- GET方式提交的数据有长度限制,而POST的数据则可以非常大
- POST比GET安全,数据在地址栏不可见
- GET是幂等性,POST不是
- PUT和POST区别
- PUT是幂等的:连续调用一次或者多次效果相同
- GET和POST区别
- 状态码
- 1XX 接收的请求正在处理
- 2XX 请求正常处理完毕
- 3XX 需要进行附加操作以完成请求
- 4XX 服务器无法处理请求
- 5XX 服务器处理请求出错
- 短连接和长连接
- 短连接:没进行一次HTTP通信就要新建一个TCP连接
- 长连接:只需要建立一次TCP连接就能进行多次HTTP通信
- 流水线:在同一条长连接上连续发出请求不用等待响应返回这样可以减少延迟
- HTTP协议各个版本
- 0.9 仅GET
- 1.0 短连接
- 1.1 长连接 流水线
- 2.0 二进制+多路复用+header压缩
- 输入网址变化
- URL解析
- DNS域名解析
- 建立TCP连接
- 发送HTTP请求
- 服务器处理请求
- 返回响应结果
- 关闭TCP连接
- 浏览器解析HTML
- 浏览器布局渲染
- 报文结构
-
https
- SSL四次握手
- 1、首先客户端发送HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;
2、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密);
3、消息体产生之后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;
4、发送给服务端,此时只有服务端(RSA私钥)能解密。
5、解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。
- 1、首先客户端发送HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;
- HTTP安全性问题
- 使用明文进行通信,内容可能会被窃听;
不验证通信方的身份,通信方的身份有可能遭遇伪装;
无法证明报文的完整性,报文有可能遭篡改
- 使用明文进行通信,内容可能会被窃听;
- 缺点
- 因为需要进行加密解密等过程,因此速度会更慢;
需要支付证书授权的高额费用。
- 因为需要进行加密解密等过程,因此速度会更慢;
- SSL四次握手
-
DNS
- 查询流程:(分为迭代、递归查询)
用户 --> 本地 --> 根域名服务器 --> 顶级域名服务器 --> 其他服务器
- 查询流程:(分为迭代、递归查询)
-
CDN
- 本质仍然是一个缓存,而且将数据缓存在离用户最近的地方,使用户以最快速度获取数据,即所谓网络访问第一跳。
-
cookie和session
1.Cookie 存储在浏览器中,容易被恶意查看
2.cookie数据保存在客户端,session数据保存在服务器端
3.Cookie有大小限制