OSI模型的作用
1应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。(应用层,表示层,会话层)
2传输层:负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。
3网络层:选择合适的路由和交换结点,确保数据及时传送。主要包括IP协议。
4数据链路层:在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
5物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。
三次握手和四次挥手
三次握手
第一次握手:会发送一个报文段,表明我想和你建立连接
第二次握手:服务器收到客户端回复的报文,同意和客户端建立链接
第三次握手:告知服务器我收到了你的回复
如果只有两次握手服务器是不能确定自己的发送功能和和客户端的接受功能是否正常
四次挥手
第一次挥手:客户端发送一个报文段
第二次挥手:服务端回应一个ack确认位,表明接收到客户端的断开请求
第三次挥手:服务端发送报文段要求关闭
第四次挥手:客户端确认应答
采用全双工的传输方式,四次挥手是为了保证数据传输的完整性,当客户端给服务端发出信号后,只能确认客户端结束发送消息,而服务端还是可以发送报文段的,所以采用四次挥手
HTTP和HTTPS
http意思是超文本传输协议,建立在tcp/ip协议之上,是应用层协议,默认端口号是80端口,并且是无状态的明文传输
加密算法
对称+非对称+CA认证
对称加密:通过公共秘钥加密,再通过公共秘钥解密
非对称加密:通过公钥加密,通过私钥解密
CA认证:对称+非对称的实现过程中,黑客如果将公钥劫持,将自己的公钥和加密算法传给客户端,并没有办法辨认出是否被劫持,所以加入CA认证,经过机构认证的公钥才是安全的
TCP的长短链接
长链接:链接-》传输数据-》保持链接-》直到一方关闭
短链接:链接-》传输数据-》关闭链接
短链接
优点:管理方便,存在的链接都是有用的链接
缺点:频繁的进行tcp链接造成系统开销
长连接
优点:省去了tcp的建立和关闭状态
缺点:一直不关闭的话,会存在一个问题,随着客户端的连接越来越多,服务器的负载压力会增大,降低服务器的整体性能,更严重者,可能导致服务器崩溃;其次,如果大量处于连接状态的TCP通信双方长时间没有进行数据传输,这也会浪费系统和网络资源。
应用场景
长链接:例如数据库的链接,用于频繁的读写操作,点对点通讯,而且连接数不太多的情况。
短链接:web网站的http服务一般都用短连接。因为长连接对于服务器来说是要耗费一定的系统资源的,像web网站服务,通常会有大量的客户端连接请求,并发连接量大,使用短连接会更节省系统资源,能够及时响应客户请求。
Get和Post的区别
get的参数是进行url拼接,post则是通过请求体传输
get的url长度是有限的(2048个字符),而post没有限制
从安全性来说get的安全性较低,因为是直接进行参数拼接,暴露在了url中,不能传输敏感词汇。
TCP和UDP的区别
tcp是面向字节流的,基本的传输单位是TCP报文段,UDP是面向报文的,基本传输单位是用户数据包
tcp注重传输的安全可靠性,udp是无连接传输,使用最大努力交付,不保证可靠传输
TCP连接只能是一对一的(端到端);UDP支持一对一、一对多、多对一和多对多的通信方式。
从输入url到后端的过程
DNS域名解析
访问host文件(将域名与ip进行配对)
如果没有命中就访问本地缓存查看是否有映射关系
访问DNS服务器(根域名服务器-》顶级域名服务器-》二级域名服务器)最终返回ip
建立TCP链接(三次握手)
发送http请求
服务端解析请求
返回http响应(响应头,响应行,响应体)
四次挥手
浏览器解析页面转换为一颗dom树,进行渲染
TCP如何保证传输的可靠性
校验和:检测数据在传输过程中的任何变化,如果校验和有差错,TCP将弃用本次的报文段,会将报文段分为多个16位的段,进行反码相加,将结果保存在校验和字段中,接收方以相同的方式进行计算,最终结果如果是全为1则表明校验和正确
超时重传机制:在数据包丢失或延迟的情况下,重新发送数据包,直到收到对方的确认应答(ACK)。
流量控制:TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。
拥塞控制:和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。由拥塞窗口表示,发送方发送数据的大小是滑动窗口和拥塞窗口的最小值,这样可以保证发送方既不会超过接收方的接收能力,也不会造成网络的过度拥塞
TCP 的拥塞控制采用了四种算法,即 慢开始、 拥塞避免、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
HTTP报文头中的内容
报文分为两部分:请求报文和响应报文
请求报文:请求行,请求头,请求体
响应报文:响应的状态码,响应头,响应体
请求行:请求方式,http版本,url
请求头:host地址,认证信息,编码方式
请求体:包含请求的具体数据
DNS域名解析过程
用于域名的解析服务,将域名地址转换为IP地址
查询浏览器缓存是否命中,如果命中,直接返回ip地址
查询本地host文件
将域名发送给本地域名服务器,本地域名服务器查询本地DNS缓存,没有找到就依次通过根域名服务器,顶级域名服务器,权限域名服务器发起查询请求,最终返回ip地址
操作系统将返回的ip地址进行保存并返回给浏览器
http各版本的区别
http1.0
明文传输
不支持身份认证
采用短链接
不支持端点续传,只能传输完整的数据包
http1.1
采用摘要算法进行身份认证
支持长链接(通过keep-alive)
支持管道传输
支持虚拟网络,多个虚拟主机共享一个ip
支持端点续传,通过请求头的range实现
http2.0
支持二进制分帧,不再是传输文本文件
多用于https,安全性更高
支持头部压缩
支持多路复用,一个链接处理多个请求
Cookie和Session的区别
Cookie 和Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。Cookie一般用来保存用户信息,Session主要作用是通过服务端记录用户的状态
保存的位置不相同,cookie存在客户端,而session存在服务端
session比cookie的安全性更高,cookie可以通过拦截获取你的信息
单个cookie保存的数据不能操作4k,一个站点最多保存20个cookie,而session则没有大小限制至于服务器的内存大小相关
cookie可以长期存储,session是有过期时间
为什么使用?
因为http是无状态协议,对事务的处理没有记忆功能,如果我们想要知道以前传输对的信息则需要二次重传,而cookie会将数据保存在客户端中
粘包和拆包
粘包
发送的数据小于缓存区的大小,将多条数据进行合并发送
接收方没有及时读取缓冲区的数据,造成粘包
拆包
当发送的数据大于剩余缓冲区的大小,进行拆包
发送数据的长度大于最大报文长度进行拆包
解决策略:
我们可以使用消息定长的策略,不够长度的后面补0(FTP协议),
设置消特殊分隔符,接收方通过识别特殊的分隔符来确定数据的长度(电子邮件SMTP)
在头部添加数据长度,接收方通过读取数据长度来确定
XSS攻击
攻击者向网站恶意植入script脚本,当用户访问时,这段代码会自动运行,实现对用户浏览器的控制,以此来窃取数据。
反射性XSS攻击:当用户点击链接时,会自动执行脚本会造成token泄漏
存储性XSS攻击:攻击者的script代码会被提交给服务端进行保存,当其他用户执行这段script代码本地cookie会被发送到一个特点网点,造成泄漏
Dom性:攻击者构建了特殊的URL,用户打开网站后,JS脚本从URL在获取数据,从而导致了恶意代码的执行
防范
采用前端渲染:使用CSP建立一个白名单,告诉浏览器哪些外部资源可以进行加载和执行,从而防止恶意代码的注入攻击
对存入数据库的数据进行转义处理
CSRF
跨域请求伪造,攻击者通过一些技术手段骗过浏览器的身份认证,让浏览器认证攻击者和操作者是同一个人
防范:
验证码
请求中加入token认证
检查HTTP中的Refer属性,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站