OSI七层模型和TCP/IP五层模型
OSI七层模型
TCP/IP协议体系结构
1. 应用层
任务: 通过应用进程间的交互来完成特定的网络应用; 数据单元:报文; 协议:定义的是应用进程间通信和交互的规则,如域名协议DNS、支持万维网应用的HTTP协议、支持电子邮件的SMTP 协议等等;
2. 运输层
任务:负责向两台主机中进程之间的通信提供通用的数据传输服务; 协议:TCP 、UDP
TCP
传输控制协议TCP :提供面向连接的、可靠的数据传输服务; 数据单元:报文段;
UDP
用户数据报协议UDP :提供无连接的、尽最大努力的数据传输服务; 数据单元:用户数据报;
3. 网络层
任务:负责为分组交换网上的不同主机提供通信服务; 两种服务:虚电路和数据报服务 协议:无连接的网际协议IP 和多种路由选择协议; 可靠性:不提供服务质量的承诺; 数据单元:将运输层产生的报文段或用户数据报封装成分组或包,也称IP数据报或简称数据报;
虚电路
面向连接的,可靠通信由网络质量保证;
数据报服务(TCP/IP 体系)
网络层向上提供简单灵活、无连接的、尽最大可能交付的数据报(分组)服务;
4. 数据链路层
任务:两台主机之间的数据传输都是在链路上进行的,需要专门的链路层协议。主要解决了三个问题——封装成帧、透明传输、差错检测; 数据单元:帧; 可靠性:差错检测,如果发现有差错,就简单的丢弃以免继续在网络中传送白白浪费资源。如果需要改错,就需要采用可靠传输协议来纠错。过去OSI的观点是将其设计为可靠的,增加了帧编号、确认和重传机制。现在一般将可靠性交由上层TCP 去做,数据链路层有错帧,立刻丢包,上层请求重传。 两种信道传输方式:点对点信道()、广播信道(局域网使用的技术) 点对点协议:点对点协议PPP 互联网用户连接某个ISP接入互联网。此协议为用户计算机和ISP 通信的协议。 包括三部分:
- 一个将IP数据报封装到串行链路的方法;
- 链路控制协议
LCP - 网络控制协议
NCP
广播信道协议:CSMA/CD 协议(以太网技术) 包括: 多点接入、载波监听、碰撞检测
5. 物理层
任务:尽量屏蔽硬件差异带来的影响; 单位:bit流传输
TCP UDP 的区别
TCP 和UDP 都是运输层的协议。
区别 | UDP | TCP |
---|
是否连接 | 无连接 | 面向连接 | 可靠性 | 不可靠 | 可靠,使用流量控制和拥塞控制 | 连接个数 | 一对一、一对多、多对一、多对多 | 一对一 | 传输方式 | 面向报文 | 面向字节流 | 首部开销 | 仅八字节 | 最小20字节,最大60字节 | 适用场景 | 实时应用,视频传输 | 可靠传输的应用,比如文件传输,软件下载 |
三次握手和四次挥手
TCP 的连接建立
基础概念:SYN 首部同步位,SYN 同步报文段不能携带数据但是会消耗一个序号; ACK 首部确认位,ack 为确认序号,seq 为数据报文段序号;确实报文段不携带数据不消耗序号。
1. 客户端发送同步报文段,SYN=1,同时发送自己的序号seq=x,进入SYN-SEND(同步已发送)状态;
2. 服务端收到请求连接信号,如同意连接,发送SYN=1且ACK=1的报文段,并发送自己的序号seq=y,且发送对于客户端序号的确认序号ack=x+1,进入SYN-RCVD(同步收到)状态;
3. 客户端收到确认信号后,发送对确认信号确认的信号。发送确认报文段ACK=1,自己的序号seq=x+1,确认序号ack=y+1;之后进入ESTABLISHED(已建立连接)状态,服务端收到后也进入ESTABLISHED(已建立连接)状态。
TCP的连接释放
基础概念:FIN 首部的终止控制符;
1. 客户端发连接释放报文段,FIN=1,其序号seq=u;进入FIN-WAIT-1(终止等待1)状态;
2. 服务器端发出确认报文段,ACK=1,序号seq=v,确认号ack=u+1,进入CLOSE-WAIT(关闭等待)状态; 客户端接收到服务端的确认后,进入FIN-WAIT-2(终止等待2)状态;此时TCP连接处于半关闭状态,A已经没有数据发送了,但是服务端发送数据,A还是需要接收。
3. 服务器数据发送结束后,发送连接释放和确认报文段,FIN=1且ACK=1,发送自己这时的seq=w,重发上次的确认号ack=u+1。服务端进入LAST-ACK(最后确认)状态;
4. 客户端接收到后,发确认报文段ACK=1,确认号ack=w+1,自己的序号seq=u+1。此时进入TIME-WAIT(时间等待)状态,经过时间等待计时器设置的时间2MSL,关闭。服务端接收到确认后,进入关闭状态。
HTTP 和HTTPS
区别
都是www服务器和浏览器之间的超文本传输协议
HTTP | HTTPS |
---|
http:// 开头 | https:// 开头 | 不安全 | 安全 | 标准端口:80 | 标准端口:443 | OSI 模型中工作于应用层 | OSI 模型中安全传输机制工作于传输层 | 无法加密 | 加密传输 | 无需证书 | 需要CA 机构颁发的SSL 证书 |
HTTPS验证流程
- 客户端请求服务器获取
证书公钥 - 客户端(SSL/TLS)解析证书(无效会弹出警告)
- 生成随机值
- 用
公钥加密 随机值生成密钥 - 客户端将
密钥 发送给服务器 - 服务端用
私钥 解密密钥 得到随机值 将信息和随机值混合在一起 进行对称加密- 将加密的内容发送给客户端
- 客户端用
密钥 解密信息
HTTP特性以及状态码
状态码 | 特性 |
---|
200 | 响应成功 | 301 | 永久重定向 | 302 | 临时重定向 | 304 | 资源缓存 | 403 | 服务器禁止访问 | 404 | 服务器资源未找到 | 500 | 服务器内部错误 | 504 | 服务器繁忙 | 1xx | Informational(信息状态码) 接受请求正在处理 | 2xx | Success(成功状态码) 请求正常处理完毕 | 3xx | Redirection(重定向状态码) 需要附加操作已完成请求 | 4xx | Client Error(客户端错误状态码) 服务器无法处理请求 | 5xx | Server Error(服务器错误状态码) 服务器处理请求出错 |
HTTP1.0、HTTP1.1、HTTP2.0的区别
- 1.1和1相比较,1.1可以一次传输多个文件;
- http1.x解析基于文本,http2.0采用二进制格式,新增特性 多路复用、header压缩、服务端推送(静态html资源);
HTTP缓存机制
浏览器缓存的分类
主要分为两类:协商缓存和强缓存,也可以称为缓存协商和彻底缓存。 浏览器在第一次缓存请求成功后再次请求时:
- 首先会获取该资源缓存的header信息,根据其中的
expires 和 cache-control 来判断是否命中强缓存,如果命中,直接从缓存中获取资源,包括header信息,不会和服务器进行通信; - 没有命中强缓存,则会发送请求至服务器,该请求会携带有关缓存的header字段信息:
Last-Modified/IF-Modified-Since 、Etag/IF-None-Match 。由服务器根据信息判断是否命中协商缓存,若命中则服务器返回新的响应header更新之前的信息,但不会返回资源内容,它会告诉浏览器可以直接从缓存获取; - 若还是没有命中则返回最新的资源内容。
强缓存
Expires 是http1.0时的规范,它的值为一个绝对时间的GMT格式时间字符串,代表资源的过期时间,在这个时间之前极为命中,有一个缺点就是失效时间是一个绝对时间,服务器和客户端时间偏差较大时,会导致缓存混乱。 Cache-Control 是http1.1出现的header信息,主要是利用该字段的max-age来进行判断,它就是一个相对时间。 两者都可以在服务端配置,Cache-Control 优先级更高。
协商缓存
协商缓存就是由服务器来决定缓存资源是否可用。主要涉及到以下header字段。第一次请求的响应头会带上某个字段:Last-Modified 或者Etag ,后续请求则会对应的带上If-Modified-Since 或者 If-None-Match ,若响应头没有上面的两字段,则请求头也不会有相应的字段。
Last-Modified 和 If-Modefied-Since 都是GMT格式的时间字符串;Etag 和 If-None-Match 这两个值是由服务器生成的每个资源的唯一表示字符串,只要资源变化值就该改变。
Last-Modified 与ETag 是可以一起使用的,服务器会优先验证ETag ,一致的情况下,才会继续比对Last-Modified ,最后才决定是否返回304。
既然有了Last-Modified为什么还要Etag:两者都是一个目的,和服务器协商缓存文件为最新。前者是用的最后修改时间和服务器文件最后修改时间对比来做的;后者是用文件内容的标识符做对比来判断的; 修改时间带来的问题就是,文件可能短时间内重复修改,但是内容最终未变化,使用修改时间的话就会做多次无用的GET,Etag的话就避免了这个问题!
输入URL到浏览器页面呈现的全部过程
网络:构建请求->查找强缓存->DNS解析->三次握手建立TCP连接 浏览器解析:解析HTML构建DOM树->解析CSS构建CSS树、样式计算->生成布局树(Layout tree) 浏览器渲染:建立图层树(Layer Tree)->生成绘制列表->生成图块并栅格化->显示器显示内容(浏览器会将各层的信息发送至GPU,GPU进行合成并显示)->断开连接(TCP四次挥手)
GET 和POST 的区别
GET | POST |
---|
浏览器回退不会再次请求 | 再次请求 | 浏览器主动缓存 | 不会,需要手动设置 | 浏览器历史记录会完整保存 | 不会保存 | URL 中的参数长度是有限制的 | 没有限制 | 通过URL 传送 | Request body 中 | 参数暴露在地址栏,不安全 | 报文内部更安全 | 一般用于查询信息 | 一般用于提交信息 | 产生一个TCP 数据包 | 产生两个TCP 数据包 |
xss 、csrf 、ddos 攻击原理及避免方式
XSS (跨站脚本攻击)
一种代码注入攻击。攻击者在目标网站上注入恶意代码,当被攻击者登录网站时就会执行这些恶意脚本,可以用来读取用户的 cookie 、session 、tokens 或其他敏感信息。
避免方式:
1. url参数使用encodeURIComponent方法转义;
2. 将html中的特殊符号进行转义;
3. 尽量不使用InnerHtml插入HTML内容用textContent或innerText来替代;
4. jquery方面使用text(),而不使用html();
CSRF (跨站请求伪造)
攻击者由被攻击网站进入第三方网站,向被攻击网站发送跨站请求。利用在被攻击网站已经获取的 用户凭证,绕过后台的用户验证,达到冒充用户对被攻击网站进行某种操作的目的。
避免方式:
1. 添加验证码;
2. 使用Token进行用户鉴别;
DDOS (分布式拒绝服务)
DDOS 又叫分布式拒绝服务,其原理就是利用大量的请求造成资源过载,导致服务不可用。
避免方式:
1. 限制单IP请求频率;
2. 防火墙等防护设置禁止ICMP包等;
3. 检查特权端口的开放;
|