计算机网络总结1

164 阅读9分钟

一.http和https

1. http和https的区别

  • a.https是什么?-》一种进行安全通信的通信协议
  • b.为什么安全? -》https经由http通信,但由SSL/TLS来加密数据包
  • c.创造https的目的是什么?-》提供对服务器网站的身份认证,保障数据隐私
  • d .如何使用https?-》使用https是得交钱的,需要申请ca证书 好了,现在开始说它俩的区别
  1. 首先http是明文传输的,https是经过SSL加密的,
  2. http的默认端口是80,https的默认端口是443
  3. http连接较为简单,是无状态的,https是SSL+http构建的可进行加密传输,身份认证的网络协议,更为安全 https解决的问题
  4. 信任主机问题,采用https的服务端需从CA申请一个用于证明服务端用途类型的证书,该证书只有用于对应的服务端的时候,客户端才会信任该主机
  5. 防止通信过程中数据的泄密和被篡改
  • g.http的连接过程-》客户端会打开一条到服务端端口80(默认)的连接,并向其发送http请求
  • h.https的连接过程-》客户端会打开一条到服务端端口443(默认)的链接,然后与服务端握手,交换一些ssl安全参数,再附上加密的http请求
  • i.https握手过程中做了什么?-》交换协议版本号,选择一个两端都了解的密码,对两端的身份进行认证,生成临时的会话密钥,以便加密信道

2. http1.1和http1.0的区别

  • a.缓存处理-》在1.0中采用的是header中的if-Modified-Since,Expires来作为缓存标准,1.1则引入了更多的缓存控制策略,多的就不说了,
  • b.带宽优化和网络连接的使用-》1.0中只能传送整个对象,而且不支持断点续传,1.1中加入了range头域,允许值请求资源的某个部分,这样就充分利用了带宽
  • c.错误通知管理-》1.1中新增了24个错误状态响应码,比如409表示请求资源发生冲突
  • d.Host头处理-》1.0中认为每台主机都绑定唯一的一个ip,因此消息的url中没有传递主机名,但随着虚拟主机的发展,一台物理服务器上可以存在多个虚拟主机,并且共享一个ip,这时候就需要传递主机名了,而且在1.1中没有host头域会报错400(Bad Request)
  • e.长连接-》 1.1中支持长连接和请求流水线处理,在一个TCP连接上可以传递多个http请求和响应,减少了开关闭连接的消耗,在1.1中默认开启Connection:keep-alive

3. Http2.0和HTTP1.X相比的新特性

  • a.新的二进制格式-》1.X的解析是基于文本的,文本的表现具有多样性,要做到健壮性考虑的场景有很多,天然存在缺陷,二进制只认0和1,实现方便而且健壮
  • b.多路复用-》即连接共享,每个request都是用作连接共享机制的,一个request对应一个id,一个链接上可以有多个request,多个request混杂在一起,接受方可以根据request的id将request再归属到各自的请求里面
  • c.header压缩,http1.X的header中带着大量信息,而且每次重复发送,2.0中压缩了header的大小,而且通信双方各缓存一份header的参数表,这样既避免了header的重复传输,又减小了需要传输的大小
  • d.服务端推送,服务端可以向客户端推送了

4.https请求慢的解决办法

  • a.不通过dns解析,直接访问IP
  • b.解决连接无法复用-》
  1. 移动端自己建立一个基于tcp的长连接通道,可减轻服务端的压力(避免频繁创建销毁连接),但是基于tcp的socket编程相对复杂。
  2. long-pulling -》客户端发送一个pulling请求到服务器,但是服务器不会立马返回业务数据,等待有新的业务数据产生的时候再返回,所以连接会一直保持,一旦结束当前连接,马上再发送一个新的pulling请求,但是这样会增大服务端压力,而且稳定性不好
  3. http streaming-》类似pulling,告诉服务端客户端还有数据要到达,让连接保持
  4. web socket-》基于tcp协议,提供双向的数据通道,使用起来比基于字节流的tcp socket更简单

5.http的request和response协议组成 a.request组成-》 (1)请求行-》说明请求类型和http版本 (2)请求头-》说明服务器要使用的附加信息 (3)请求空行-》必须的,用于区分请求头和数据 (4)请求数据-》可以添加任意数据,可以为空 GET /562f25980001b1b106000338.jpg HTTP/1.1 Host img.mukewang.com User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 Accept image/webp,image/,/*;q=0.8 Referer www.imooc.com/ Accept-Encoding gzip, deflate, sdch Accept-Language zh-CN,zh;q=0.8

  • b.response组成-》
  1. 状态行-》由http协议版本号,状态码,状态消息三部分组成
  2. 消息报头-》用来说明客户端要使用的一些附加信息
  3. 空行-》必须的
  4. 响应正文-》数据信息

6.对http缓存的理解-》

http的缓存机制也是依赖请求和响应中header里的参数类来实现的,决定了响应是从缓存中取,还是从服务端重新拉取

7.http长连接-》

a.http1.0是短连接,1.1默认是长连接,但是长连接的实质指的是tcp连接,tcl是一个可以保持一段时间不关闭的双向通道,所以tcl连接才有真正的长连接短连接这一说 b.1.1为什么要使用tcp长连接?-》长连接指的是tcp连接,也就是在长连接情况下,多个http请求可以复用同一个tcp连接,这样可以节省很多的tcp连接建立和断开的消耗 c.长连接并不是永久连接,一段时间内(可在header中设置)没有http请求发出的话,这个长连接会被断掉

8.https加密原理

  • a.加密算法的类型基本上分为以下两种
  1. 对称加密-》加密和解密用的密钥是同一个,比如AES加密
  2. 非对称加密-》加密用的密钥是公钥,解密用的叫私钥,比如RSA加密
  • b.https = http+ssl-》https的加密是在ssl中完成的
  • c.那么到底是怎么加密的?-》这就要从ca证书说起了,ca证书内一般包含以下内容
  1. 证书的颁发机构和版本
  2. 证书的使用者
  3. 证书的公钥
  4. 证书的有效时间
  5. 证书的数字签名,hash值签名hash算法
  6. 等等 CA证书中的hash值,其实是用证书的私钥进行加密后的值(证书的私钥不在CA证书中)。客户端得到证书后,利用证书中的公钥去解析这个hash值,得到hash-a,然后用证书内的hash算法生成一个hash-b,比较hash-a和hash-b是否相等,相等就说明ca证书是对的,除此之外,还会校验ca证书的有效时间和域名匹配等
  • d.https中的ssl握手建立过程-》假设有客户端a和服务端b
  1. a访问b,这时a会生成一个随机数1,将这个随机数,自己支持的ssl版本号,加密算法等这些信息告诉b
  2. 首先b收到后先确认双方加密算法,然后服务端生成一个随机数2,将2和ca证书一起发送给客户端a
  3. 客户端收到ca证书后,会去校验ca证书的有效性,校验通过后,会再生成一个随机数3,然后用ca证书中的公钥将这个随机数加密并传输给服务端b
  4. 服务端得到随机数3后,用私钥进行解密解密,得到真正的3,这时候ab都有随机数1.2.3
  5. 然后双方利用随机数1,2,3生成一个对话密钥,之后传输内容就用这个密钥进行对称加密传输,一般使用AES
  6. 客户端a通知服务端b,指明后面的会话用密钥加密来完成,同时通知服务端b握手过程结束
  7. 服务端b通知客户端a,指明后面的对话用对话密钥来完成,同时通知客户端,服务端的握手过程结束
  8. ssl的握手部分结束后,ssl安全同到的数据通讯开始,客户端a和服务端b开始使用相同的密钥开始通信

9.https如何防范中间人攻击

  • a.什么是中间人攻击?-》当数据传输发生在设备和服务器之间时,攻击者将自己置于两端之间并截获数据,尽管交谈的双方认为他们在与对方交谈,实际上他们在与中间人交谈,这就是中间人攻击。
  • b.如何防范中间人攻击-》
  1. 假设a向服务器b发送hello,这时候hello没有直接到b,而是先到了中间人c,c再把hello发送给b,表面上是a发送消息给b,实际上经过了c这个中间人。然后b把公钥和随机数发送给a,然后a再生成一个随机数,用公钥加密后传给b,这时c截获这个消息,因为没有私钥所以根本无法解密,也就不能获取到完整的随机数1,2,3,也就无法获知ab之间进行加密传输的真实内容
  2. 假设a向服务端发送hello,这时候没有直接到b,而是先到了中间人c,c手里也有一个合法证书,他冒充服务端把自己的证书发送给a,然后再冒充客户端把hello传给b,这时就完成了中间人攻击,解决办法是,客户端自己保存一个公钥,来验证服务端回传的证书,保证这个证书是你想访问的那个网站的证书