

计算机网络
当在地址栏输入URL并且查询会发生什么
1、当输入URL后,浏览器会解析输入的url的主机端,口号,协议,并且构造一个http请求,如果http有缓存,则使用缓存资源,否则向服务器发送请求获取资源
2.DNS解析,DNS服务器会将URL解析,返回URL所对应的IP地址,返回浏览器解析
3.TCP三次握手,客户端和服务端通过三次握手获取连接
4.客户端发送http/https请求到服务器
5.服务器处理请求并且返回报文
6.浏览器渲染浏览器页面
7.TCP四次挥手断开连接
DNS
DNS是一种将域名转化为Ip的分布式服务器,设计DNS服务器采用分布式需要注意以下几个问题:
1.单点故障:如果DNS服务器崩溃了,通信容量就会很多,单个服务器不得不处理所有的请求,一台服务器很难满足
2.远距离集中式服务器:DNS服务器不可能邻近所有的用户,距离太远会造成严重的时延
3.维护成本巨大
DNS解析过程
1.首先查询浏览器缓存中是否有对应的IP地址
2.如果浏览器缓存中没有的话就会从Host文件中去查询
3.如果Host文件中也没有的话,就会像本地的DNS服务器发送请求
4.如果本地DNS服务器中有该ip地址,则返回。如果没有则向根DNS服务器发起请求,根服务器返回需要查询的顶级域名服务器
5.本地服务器向顶级域名服务器发送请求,顶级服务器返回需要查询权威DNS服务器
6.最后本地DNS解析器向权威服务器发送请求,返回域名的ip地址
7.本地DNS解析器将IP地址返回给浏览器,并且存储在本地浏览器中,方便下次访问
8.浏览器向IP地址发起连接
DNS的解析方式
1.递归查询:本地DNS解析器,向上层服务器发送请求,返回的时完整的查询结果,例如:本地DNS解析服务器->根服务器->顶级服务器->权威服务器->顶级服务器->根服务器->本地DNS解析服务器
2.迭代查询:本地DNS服务器向根服务器发送请求,根服务器返回顶级服务器到本地DNS解析服务器,本地DNS服务器再向顶级服务器发送请求,返回权威域名服务器,诸如此类
注意:递归查询适合用户和客户端,迭代查询适合DNS服务器之间的通信
Http特性与简述
- 简述:
(1).客户端发送http请求
(2).服务端做出响应处理后,返回http响应报文 - www构建技术:
(1).HTML:超文本语言
(2).HTTP:文档传输协议
(3).URL:指定的传输地址 - HTTP版本:
(1)HTTP/1.0-1996.5
(2)HTTP/1.1-1997.1
(3)HTTP/2.0正在制订中 - 特性
(1)简单:基本报文形式为header+body,头部信息也采用key-value的简单文本形式
(2)灵活和易于扩展
·HTTP协议里的各种请求方法,URL/URI,状态码,头文段每个部分都不是固定死的,允许开发人员自定义和扩展
·HTTP在应用层,下层可以随意切换
·HTTPS在在HTTP与TCP之间增加了SSL/TSL安全传输层
(3)无状态,明文传输,不安全
无状态:
服务器不会去记忆http的状态,也不需要额外的资源来记录信息,这样可以减轻服务器的负担,但是在完成服务器与客户端之间的关联性的操作时会很麻烦(可以使用Cookie技术:在请求和响应报文中写入Cookie信息来控制客户端的状态,这样的话服务端就可以观测到客户端的状态)
明文传输:
传输过程中的信息是透明的,这样虽然可以方便阅读,但是给信息安全造成了极大的隐患
不安全:
1.使用明文,内容容易被窃听
2.不验证对方的身份,很可能遭到伪装
3.无法验证报文的完整性,可能遭到篡改
(可以通过HTTPS的方式解决,通过引入SSL/TLS,增强安全性) - HTTP各版本的特点
1.HTTP/1.0
是第一个正式的版本
(1)引入了请求头和响应头,支持多种请求方法和状态码
(2)不支持长久连接,每次发送请求都需要建立新的连接
2.HTTP/1.1
(1)引入了长连接
在连接断开时可以发送很多个请求,不需要每次请求都请求新的连接。
(2)管道网络传输
在服务端响应之前也可以发送请求,不需要等待响应
(3)队头阻塞
如果在发送在服务器的请求队列中,位于前面的请求阻塞了,后面的队列会等带请求阻塞完之后才会出来之后的请求,换句话说,服务器时严格按照顺序处理请求的
3.HTTP/2.0
HTTP2协议是基于HTTPS的,所以HTTP的安全性是有保障的
(1)头部压缩:
HTTP/2使用HPACK压缩算法对请求和响应头进行压缩,减少了传输的头部数据量,降低延迟。
(2)二进制帧:
HTTP/2将数据分割成二进制进行传输,分为头信息帧(Header Frame)和数据信息帧(Data Frame)
(3)并发传输
引用了Stream的概念,多个Steam复用在TCP连接,针对不同的Http请求使用不同的StreamID来区分,接收端可以通过StreamID有序组装HTTP消息,不同的Stream帧是可以乱序发送的,因此可以并发不同的Stream,也就是并行交错地发送请求和响应
(4).服务器推送:
在HTTP2中,服务器可以向客户端一个请求发送多个响应,服务端可以额外的向客户端推送请求之外的资源,无需客户端明确请求资源
HTTPS和HTTP的区别
1.http是通过明文的方式在网络中传输的,https解决了http不安全的缺陷,在TCP和HTTP之间加入了SSL/TLS安全协议,使得报文可以加密传输
2.HTTPS在TCP三次握手之后,还需要进行SSL/TLS的握手过程,才可以进行加密传输
3.HTTP的端口号是80,HTTPS的端口号是443
4.HTTPS协议需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可靠的
对称加密
对称加密可以称之为私钥加密,使用相同的密钥来进行加密和解密
1.在加密的过程中,明文数据通过特定的算法和密钥进行加密,生成密文数据,解密过程则是用相同的算法和密钥进行解密,恢复为铭文数据
2.由于加密和解密都使用相同的密钥,因此对称加密算法的速度通常很快,但密钥的安全性很高,如果密钥泄露,那么攻击者可以轻易的揭秘数据
非对称加密
1.非对称加密称之为公钥加密,使用一对不同但相关的密钥:公钥和私钥
2.公钥用于加密数据,私钥用于解密数据如果使用公钥加密数据,只有拥有响应私钥的人才能解密数据,如果使用私钥加密了数据,可以使用相应的公钥进行解密
3.除了加密和解密之外,非对称加密还用于【数字签名】,可以验证消息的来源和完整性
混合加密
HTTPS采用对称和非对称加密结合的混合加密方式,保证信息的机密性,解决了窃听的风险
- 通信建立前:采用非对称加密的方式交换【会话密钥】,后续不再使用非对称加密
- 通信过程中:采用对称加密的会话密钥,加密明文数据
TCP三次握手
TCP是面向连接的可靠传输协议,客户端与服务器之间通信首先要通过套接字(Socket)进行连接,通过三次握手进行连接
1.第一次连接:随机初始化序列号,client_isn,放入TCP首部序列号段,客户端SYN置为1,之后发送给服务端表示发起连接,之后客户端处于SYN——SENT状态
2.第二次连接:服务端接收客户端的SYN报文之后,会随机生成序列号server——isn放入TCP首部序列号段,【确认应答号】填入client——Isn+1,并且SYN和ACK都置为1,把SYN和ACK报文都发送给了客户端,表示服务端接受了请求,并希望建立连接
3.客户端收到服务端的报文之后又,还向服务端回应一个应答报文,把ACK置为1,确认应答号填入server——isn+1,最后发送报文到服务端,之后客户端处于ESTABLISHED状态,表示客户端已经准备好和服务端进行数据传输,服务端收到客户端的报文之后,已进入ESTABLISHED状态。
此时双方可以进行数据传输
TCP头部协议格式
1.源端口号和目的端口号:用于告诉主机,报文段来自哪里,传给哪个协议或者应用程序(16位+16位=32位,共占4个字节)
2.首部长度:表示TCP头部有多少个字节,最长60
3.窗口大小:接收窗口,告诉对方本端TCP缓冲区还有多少空间可以接受数据,用来做流量控制
4.标志字段:
ACK:用于知识确认应答号是否有效,1表示成功接收报文段的确认
RST:用于重置一个已经混乱的连接,或者拒绝一个无效的请求
SYN:用于请求建立一个连接
FIN:用于断开一个连接
5.检验和:接受方用于检验和检查该报文段是否出现差错(CRC算法),同UDP