网络协议梳理(五)(http请求的构成、http请求的发送、http 2.0、对称加密和非对称加密、https的工作模式、流媒体协议、FTP文件传输协议、DNS协议,HTTPDNS协议)

http协议

 

http 1.1默认开启了keep-alive。建立的TCP连接可以在多次请求中复用。

 

http请求的构成

请求行

1、url——输入的网址

2、版本——http版本

3、方法

  • GET——从服务器获取资源。返回什么,由服务器决定。
  • POST——他需要主动告知服务器一些信息,而不是获取。告知服务器的信息一般会放在正文里。正文可以有各种形式,常见的是JSON。
  • PUT——向指定资源位置上传最新内容。与POST的区别之处在于,POST常用语创建资源,PU通常用于修改资源
  • DELETE——删除资源。

 

首部字段

请求行下面就是首部字段。首部是key value,通过冒号分隔。这里往往用于保存一些重要的字段。

Accept-Charset——客户端可接受的字符集——防止传过来其他的字符集导致乱码。

Content-type——正文格式

Cach-control——用来控制缓存。当客户端发送的请求中包含max-age指令时,如果判定缓存层中,资源的缓存时间数之比指定时间的数值小,那么客户端可以接受缓存资源。当指定max-age值为0,那么缓存层通常需要将请求转发给应用集群。

if-Modified-Since也是关于缓存的。如果服务器资源在某个时间更新了,那么客户端应该更新资源;如果没有更改,则会返回304 Not Modified的相应,那么客户端就不用下载了,也会节省带宽。

 

 

 

http请求的发送

Retry-After——告知客户端多长时间之后再次尝试一下。

503——服务暂时不再和这个值配合使用

 

 

http 2.0——通过头压缩、分帧、二进制编码、多路复用提升性能

 

http 1.1——在应用层以纯文本的形式进行通信。每次通信都有带完整的http头。

http2.0对http头进行了压缩,将原来每次都携带的大量key value 在两端建立一个索引表,对相同的头只发送索引表中的索引。对相同的头,只发送索引表中的索引

http 2.0将一个TCP连接中,切分成多个流,每个流都有自己的ID,而且流可以是客户端发送给服务端的,也可以是服务端发送给客户端的。

http 2.0还将所有的传输信息分割为更小的信息和帧,并对他采用二进制格式编码。常见的帧有header帧,用于传输header内容,而且会开启一个新的流。还有Data帧,用于传输正文实体。多个Data帧属于同一个流。

 

假设我们有三个http请求。在http 1.1中是串行的,但是http 2.0,可以同时回复多个请求,而且不用按照顺序一对一应。

http 2.0其实将三个请求变成三个流,将数据分成帧,乱序发送到TCP连接中:

http 2.0成功解决了http 1.1的队首阻塞问题。同时也不需要通过http 1.x的pipline机制用多条TCP连接实现并行请求和响应。

减少了TCP连接对数对服务器性能的影响,同时将页面中的多个数据通过一个数据链进行传输,加快页面组件的传输速度。

 

 

 


https协议

 

对称加密和非对称加密

 

  • 对称加密——加密和解密的密钥相同
  • 非对称加密——加密和解密的密钥不同。公钥加密的信息,只有私钥才能解密;私钥加密的信息,只有公钥才能解密。

 

对称加密

 

被密钥加密的信息在网上传递也不怕被黑客拦截,但是如何约定密钥,这成了关键。如果密钥在传输的过程中被拦截,那么加密就毫无用处了。

 

非对称加密

 

非对称加密的私钥不会在网上传输,但是公钥会在互联网上传播。

 

 

数字证书

 

非对称加密不能保证获取的公钥是正确的,如果收到了黑客发来的公钥,那么接下来消息的互通是看不出来问题的。

证书里面有什么?

  • 公钥
  • 发布机构
  • 有效期

 

 

https的工作模式

 

https的总体思路——数据使用对称加密传输,公钥通过非对称加密进行传输

 

客户端验证服务器的过程(单向验证,为了安全,也可以启用双向验证)

  1. 建立https时,客户端向服务器明文发送TLS版本信息、加密套件候选列表、压缩算法候选列表等信息。还会有一个随机数,在协商对称密钥的时候用。
  2. 服务端返回一个消息,通知客户端服务端使用的协议版本、加密套件、压缩算法,以及一个随机数,该随机数用于后续加密协商。
  3. 之后服务端还会返回给客户端一个证书,说明沟通完成了。此时客户端可以拿着这个证书去CA中,拿着CA证书里面的公钥去解密服务端的证书。如果解密成功,说明服务端可信
  4. 验证完毕之后,客户端随机产生一个Pre-Master随机数,用证书中的公钥加密,发给服务器,服务器通过私钥将该随机数解密。
  5. 此时,客户端和服务端分别都有三个随机数,分别是:自己产生的随机数、对方产生的随机送、刚刚生成的Pre-Master随机数。通过这三个随机数,可以在客户端和服务端产生相同的对称密钥.
  6. 有了对称密钥之后,客户端和服务端就可以通过对称加密的方式进行通信了。

 

 

 

 


 

流媒体协议

 

视频是一连串连续的图片,每张图片为一帧。如果每秒30帧,则帧率(FPS)为30.假设图片尺寸是1024*768像素,每个像素点由RGB组成,每个8位,共24位。则一秒钟的视频大小为:

因此一分钟是4G。

数据量太大了,人们相处的解决办法是——编码——尽量用少的bit数保存视频。编码是一个压缩的过程。

 

 

视频和图片进行压缩,因为视频图片有这样一些特点:

 

1、空间冗余:图像的相邻像素之间有较强的相关性,一张图片相邻像素往往是渐变的,不是突变的,没必要每个像素都完整地保存,可以隔几个保存一个,中间的用算法计算出来。

2、时间冗余:视频序列的相邻图像之间内容相似。一个视频中连续出现的图片也不是突变的,可以根据已有的图片进行预测和推断。

3、视频冗余:人的视觉系统对某些细节不敏感,因此不会每一个细节都注意到,可以允许丢失一些数据。

4、编码冗余:不同像素值出现的的概率不同,概率高的用的字节少,概率低的用的字节多,类似霍夫曼编码(huffman coding)的思路。

 

 

 


FTP——文件传输协议

 

FTP采用两种TCP链接传输一个文件

控制链接——服务器以被动的方式打开FTP的端口21,客户端主动发起链接。该连接将命令从客户方传给服务器,并传回服务器的应答。常用的命令:

list——获取文件目录
reter——取一个文件
store——存一个文件

数据连接——每当一个文件在客户端与服务器之间传输时,就创建一个数据连接

 

 

FTP的两种工作模式

 

每传输一个文件就建立一个新的数据连接。FTP有两种工作模式,主动模式和被动模式:

主动模式

  1. 客户端随即打开一个大于1024的端口N,向服务器的21端口发起连接
  2. 开放N+1端口进行监听,并向服务器发送“port N+1"命令
  3. 由服务器从自己的数据端口20主动连接到客户端指定的数据端口 N+1.

被动模式

  1. 当开启一个 FTP 连接时,客户端打开两个任意的本地端口 N 和 N+1。
  2. N端口与服务器的21端口进行连接,连接之后获取服务器返回的一个端口X,
  3. 客户端的N+1端口向服务器的端口X发起连接
  4. 服务器被动连接到客户端的端口N+1

 

 


DNS协议

 

DNS的两项功能

  • 根据域名查询IP地址
  • 针对多IP地址多负载均衡,可以实现使你访问在多地址中选择距离最近的IP进行访问

 

DNS服务器一定要设置成高可用、高并发、分布式的。

 

DNS解析过程

1、电脑客户端发出DNS请求,查询www.baidu.com的IP地址是什么,并发给本地域名服务器(本地DNS)。(本地域名服务器即本地DNS,是网络服务商自动分配的,该服务区通常在网络服务商的某个机房)。

2、本地DNS收到客户端请求之后,将请求的域名在本地缓存中进行查找,如果找到对应的IP地址,则返回给客户端;如果没有,则向根域名服务器发送请求,获取该域名的IP地址。根域名服务器是最高层次的,全球一共13套,他不直接用于域名解析,但是可以指路。

3、根DNS收到来自本地DNS的请求之后,先查看域名的末尾,发现是 .com  ,因此会返回给本地DNS域名为 .com 的顶级域名服务器地址

4、本地DNS转向顶级域名服务器,顶级域名服务器获取到域名之后,发现是baidu.com,于是将管理www.baidu.com的权威DNS服务器的地址返回给本地DNS。

5、本地DNS转向权威DNS服务器,权威DNS服务器是域名解析结果的原出处。权威DNS服务器查询之后会将域名对应的IP地址返回给本地DNS。

6、本地DNS将IP地址返回给客户端,客户端与目标建立连接

DNS可以做内部负载均衡

例如一个应用要访问一个数据库,就应该记录数据库的域名,因为如果该数据库移动到别的机器上,IP地址会变化。如果记录的是IP地址,那么修改的工作量就很大了;使应用记录域名,在修改数据库的位置之后,只需要在DNS服务器中将域名映射为新的IP地址即可,大大简化的运维。

 

更进一步,一个应用要访问另一个应用,如果配置另外一个应用的IP地址,那么这个访问就是一对一的。但是如果我们如果部署了多个被访问应用,如何实现负载均衡?只要配置一个域名即可。在域名解析时,配置策略,控制每次访问的IP地址即可实现负载均衡

 

DNS实现全局负载均衡

  • 将失效的应用的IP地址在DNS服务器中删除
  • 控制访问与客户端相近的服务器,可以加快访问速度。

 

 

DNS访问数据中心对象存储上的静态资源

对于简单的应用来讲,权威DNS服务器可以直接将域名对应的IP地址进行返回。客户端可以通过多个IP地址,进行简单的轮询,实现简单的负载均衡。

但是对于复杂应用,尤其是跨地域的大型应用,则需要更加复杂的全局负载均衡机制,因而需要专门的设备或者服务来做这件事,这就是全局负载均衡器(GSLB)。下图是全局负载均衡器的使用示例:

  

 

 


httpdns协议

 

传统DNS的局限性

 

1、域名缓存问题——因为时效性

 

1、DNS会进行本地缓存,缓存可能会因为时效性问题而反馈给客户端错误的IP地址。

2、DNS服务器还会对一些静态页面进行缓存,如此减少访问的距离,加快访问速度。在域名解析的时候,返回的IP地址就是这些用于缓存的服务器,而不是提供服务的服务器。这就会带来时效性问题——如果页面已经更新,用户访问的依然是老页面。

3、本地缓存往往使得全局负载均衡失效,因为上次进行缓存的时候,缓存中的地址不一定是这次访问距离客户最近的地方,如果依然把缓存中的地址返回给客户端,就会造成绕路。

 

2、域名转发问题

 

进行域名解析时会访问域名解析服务器,有的域名解析服务器会将任务委托给别的域名解析服务,这就会带来问题。

比如解析服务器A访问自己的DNS服务器,权威DNS服务器会返回给A一个地址,该地址对于A来说访问会比较快。但是如果A偷懒,将解析请求委托给B去做,返回的IP地址不一定对于A来说是最好的。

 

3、出口NAT问题

 

出口的时候,分舵机房都会配置NAT,即网络地址转换,使得从这个网关出去的包,都换成新的IP地址。当队前卫DNS进行请求的时候,权威DNS就无法通过IP地址来辨别发送请求的客户端来着哪一个运营商,因为极有可能导致跨运营商访问

 

 

 

httpsDNS的工作模式(简略版)

 

由于默认的域名解析都是走DNS的,想绕过DNS,就需要使用HTTPDNS客户端。一般是手机通过嵌入HTTPDNS客户端的SDK实现利用HTTPDNS进行域名解析。

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值