1、计算机网络模型
- 物理层 :底层数据传输
- 数据链路层:定义数据的基本格式
- 网络层:定义IP地址,定义路由功能,如不同设备的信息转发,提供主机间的逻辑通信
- 传输层:端到端数据传输的基本功能,如TCP , UDP,提供进程间的通信
- 会话层:控制应用程序之间的通讯功能,如 将数据分配给不同的软件
- 标识层:数据格式标准,定义加密,压缩等
- 应用层:各种应用软件
2、DNS :Domain Name System 域名系统
为了能够使用户不至于去记忆复杂的ip地址,更方便的通过域名来访问互联网,通过主机名,来获得主机的IP地址这个过程,就叫做域名解析
DNS解析过程:
- 首先访问本地浏览器的缓存,如果缓存中存有域名所对应的ip地址,直接访问即可
- 如果本地浏览器没有缓存,则寻找硬盘中的host文件
- 硬盘host文件中没有,浏览器发送一个DNS请求到本地DNS服务器,如本地的联通,移动等,访问它们的缓存,有则返回,无则访问DNS根服务器(以递归的方式)
- 根域名服务器得到请求之后,不会直接返回域名与ip地址之间的对应关系,而是将相对应的域名解析器的地址告诉给本地DNS服务器,由本地DNS服务器再去访问。
- 最终得到域名与ip地址之间的对应关系,将其返回给客户端,并缓存,方便下次使用
DNS查询方式:
- 递归解析:由本地DNS服务器向根域名服务器(如.com)查询,然后根域名服务器再向下一级级查询,最后将解析结果返还给本地DNS服务器
- 迭代解析:浏览器发送请求给本地DNS服务器,但是本地DNS服务器不是自己向下查询的 ,而是将根域名服务器的地址交给客户端,让客户端浏览器自己访问根域名服务器(自力更生型,只是帮忙找到可以解析的服务器的地址,而不会帮助查询出最后的结果)
DNS负载均衡:
当一个域名非常火的时候,每个时间点都有大量的人去访问它,所以它的压力会非常大。为了解决这个问题,采用了这个负载均衡的技术:为同一个主机名分配多个ip地址,在应答DNS服务器的查询请求时,按照一定的顺序按个返回ip地址,将客户端的访问引导到不同的主机上,使不同的客户端访问不同的服务器。
域名解析时,使用的时UDP协议,因为它比较快;而区域传送用TCP协议,安全且准确。
3、HTTP 未完待续~~
3.1 http的请求方法有:
- get:向服务器请求一定的资源
- post:传输实体,向服务器传输信息
- head:获取报文的头部,确认url信息的准确性和资源更新的时间
- options:查询支持的方法 :将返回 post,get ,delete,head 等信息
- put:上传文件,但是没有身份验证功能,任何人都能上传,故一般不使用
- peach :对资源进行部分修改,put也能做到,但是是覆盖行的 ,peach可以做到部分修改
- delete:删除文件,也不带身份验证功能
- connect:使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。
3.2 get 与 post 的区别
- 传输内容方面,get请求使用url或Cookie传参,而post将数据存放到body中进行数据传输
- 安全方面,get请求传送的参数直接显示在路径上,而post的数据在地址栏不可加,故更安全
- 传送数据大小方面,get请求能够传输的数据较小,最多2K,而post的数据可以非常大
- 数据类型:get请求只能传输ASCII字符,post无限制。
- 本质区别:get请求是幂等性的,从一次和多次请求某一个资源应该具有同样的副作用。意味这对同一个URL的多个请求应该返回相同的结果。(如使用get请求提交数据时,多次刷新,可能会造成数据的多次提交。为了防止这个错误的发生,可以为每次操作都生成一个ticked_id值,一个ticked_id表示操作至多运行一次
3.3Cookie 与 Session
相同之处:都是用来跟踪浏览器用于身份的会话方式
不同之处:
- 存储位置:Cookie值存储在客户端,Session存放在服务器上
- 安全性:Cookies放在本地,不如存放在服务器端的Session安全
- 容量方面:大量的Session存放在服务器端的时候,访问多,会比较占用服务器的性能。如果为了减轻服务器的压力,可以使用Cookies。大型网站,不建议将用户数据全部存放Session
- 容量限制:单个Cookie在客户端的限制是3K,session没有这个限制
3.4 HTTP1.0 \ HTTP1.1 \ HTTP 2.0 的区别
1.0与1.1的区别
- 长连接 : http1.1支持长连接和请求的流水线处理,在一个TCP连接上可以处理多个请求和相应,减少了建立和关闭链接的消耗和延迟。
- 节省带宽:1.0中存在着浪费带宽的现象,比如客户端只需要对象的一部分数据,但是服务器往往将整个对象都传输过来,并且不支持断点续传的功能。1.1中支持只发送header信息
- HOST域:在1.0中,默认每台主机都有一个自己的IP地址,所以在url中不需要传递主机名,1.0中没有host。随着虚拟主机的发展,每台物理服务器可以存在多个虚拟主机,共享同一个IP地址,所以在1.1中,请求和响应消息都得支持host域
- 缓存处理:1.0中主要使用header的if-Modified-Since,Expires来作为缓存判断的标准,1.1中引入了更多的缓存控制策略 : 如:
- 错误通知的管理:1.1中新增了24个错误相应码:如409表示请求的资源与资源当前状态冲突,410表示服务器上的某个资源被永久性删除
1.1与2.0的区别
- 多路复用:2.0采用了多路复用,做到一个链接并发处理多个请求,并发请求的数量比1.1大了好几个数量级
- 头部数据压缩: 在1.1中,头部数据由状态行、响应/请求头部、消息主体三部分组成。一般上,消息主体被压缩,但是状态行和头部消息未被压缩,随着web功能变得更加复杂,每个页面的请求次数增加,导致消耗在头部的数据更加多。2.0中对header进行了数据压缩,体积变小,在网络上的传输速度更快
- 服务器推送:在客户端请求之前发送数据。 1.0中,服务器必须等待浏览器的每一个请求确认之后,才可以发送数据。网络经常处于空闲和未被充分使用的状态。2.0中引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
3.5HTTPS
HTTPS 并不是新协议,而是让 「HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信」。通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
http采用明文传输,内容可能被窃听,不安全;无法验证通信方的身份,不安全;无法证明报文的完整性,报文有可能被篡改。
https的加密方式有两种:对称密匙加密,和非对称密匙加密。对称密匙加密速度快,但是无法安全地将密匙传送给通信方。非对称密匙加密时,使用公开的密匙对通讯信息进行加密,然后再使用私有密匙进行解密。
加密之后,因为需要解密流程,所以速度下降,且数字证书的授权需要高额费用。
4、TCP
4.1TCP是什么
TCP 传输控制协议 是一种面向链接的、可靠的、基于字节流的传输控制协议。
4.2TCP头部报文
- 源端口source port,2字节;
- 目标端口destination port ,2字节
- 序列号Sequence Number ,4字节,TCP连接中传送的字节流中的每一个字节都按顺序编号
- 确认号Acknowledge Number ,4字节,期待收到对方下一个报文段第一个数据字节的序号
- 数据偏移,4字节,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远
- 保留、占6位,保留为今后使用,但目前应置为0 。
- TCP Flag(紧急URG,确认ACK,推送PSH,复位RST,同步SYN,终止FIN)1/0;
- 窗口:两字节,发送本报文段的一方的接收窗口(允许对方发送的数据量)
- 检验和,检验首部和数据两部分
- 紧急指针,在URG=1时有效,发送紧急数据的字节数(紧急数据末尾在报文段中的位置
- 选项:长度可变,最长4字节
4.3 TCP的三次握手,以及四次挥手
三次握手:
- 初始状态,客户端处于关闭状态,服务端处于监听状态
- 第一次:客户端发送报文,同步序列号SYN = 1 ,和自身的序列号:seq = x ,到服务端,自身处于SYN_Send状态
- 第二次:服务器端收到报文,若同意链接,向客户端发送:SYN= 1 、 seq = y 、确认序列号 ack = x+1(下次期待收到的数据包),以及确认号ACK= 1,服务器端处于SYN_Receive状态
- 第三次,客户端收到服务端的SYN和ACK后,知道可以发送下一序列的数据包了,发送同步序列号ack = y+1 ,seq = x+1 , 以及确认号ACK= 1;客户端处于established状态。
四次挥手(因为TCP链接是全双工通讯,所有每一方都得确认断开链接才行)
- 初始化阶段,二者都处于连接状态
- 第一次:客户端发起断开链接 ,告诉服务器端可以断开连接了
- 第二次,服务端收到释放链接请求后,知道无数据需要接受,处于CLOSED_WAIT状态
- 第三次,服务端向客户端的所有数据都发送完毕,告诉客户端可以关闭接受数据连接了 ,服务端处于LAST_ACK状态,等待确认客户端时候收到了自己的请求
- 第四次,客户端收到后,发送ACK=1 , 确认收到,此刻有2ms的延迟。(服务器端若未收到,则再次发送断开链接请求
4.4 TCP粘包
TCP粘包,指的是发送方发送的若干数据到接收方接受时粘成一团,后一个数据包的头紧接着前一个包的尾。粘包现象主要是由TCP连接服用导致的,与数据包过大、流量控制、拥塞控制、接收端不及时接受缓冲区的包都有关系。TCP默认使用Nagle算法,此算法导致了粘包(上一个分组确认收到的时候,发送下一个分组;手机多个小分组,在下一个确认信息到达时,一起发送。
4.5 TCP如何保证可靠传输
- 拥塞控制:慢开始、拥塞避免、快重传、快恢复
- 流量控制:使用滑动窗口控制流量传输
- 确认与重传
- 数据校验
- 数据合理分片和排序
5 UDP与TCP
UDP 是一个简单的面向数据报的运输层协议;UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。
5.1 UDP特点
- 无连接
- 面向报文
- 无拥塞控制
- 尽最大可能交付
- 支持一对一、一对多、多对一、多对多的交互通信
- 首部开销小
5.2 TCP的特点
- 面向连接的
- 提供可靠交付的服务
- 提供全双工通讯
- 面向字节流
5.2 UDP头部
源端口、目标端口、长度(UDP首部和UDP数据的字节长度)、校验和(它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。)