1. TCP传输是有序还是无序的?
TCP提供了最可靠的数据传输,它给发送的每个数据包做顺序化。如果TCP没有这样烦琐的操作,那么,可能会造成数据包的重传、顺序的颠倒甚至造成数据包的丢失。 那么,TCP具体是通过怎样的方式来保证数据的顺序化传输呢?- 主机每次发送数据时,TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认,
- 如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包。
- 接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等,
- 接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理。 也就是,tcp报文的数据部分包含http2.0定义的帧,帧是乱序的,但tcp报文是顺序的。
2. http2.0推广后,在前端开发层面,是否不需要资源打包?
在HTTP2的连接复用的新特性加持下,减少请求数量不再重要,加载大量JS文件已经接近打包文件的性能。 比如打包可以做到1s,那么加载50个JS文件可能就只有1.2s,可以当成差不多。那么,我们为什么要选择使用新特性呢? 其实可以看一下它给JS缓存带来的好处: 比如我们一个1MB的JS文件,只改了一行就需要重新缓存整个JS文件,而在HTTP2的协议下我们可以不打包资源文件,这样可以更高效的利用缓存机制。 最后,就当前浏览器对HTTP2.0支持还不够好的情况下,并且打包工具还有压缩文件等其他优势,所以打包还是有一定的意义的。
3.https三方(服务端,客户端,CA)的作用及流程
准备工作:
- 服务端通过openSSL工具生成私钥。
- 服务端通过openSSL创建证书申请(包含共钥等信息)发给CA认证中心。
- CA机构有一对公私钥,CA机构对申请证书通过MD5算法生生成数字签名,并用它的私钥对数字签名加密。
- CA机构将证书返回给服务器。
客户端和服务器建立连接:
- 客户端向服务器请求共钥。
- 服务器将证书返回给客户端。
- 客户端使用内置的CA的共钥对数字签名进行解密,根据签名的生成规则例如MD5进行本地签名的生成,两个签名对比成功,则服务器共钥是正确的。
- 客户端生成随机对称秘钥。
- 使用服务器共钥对对称秘钥加密。
- 发送加密后的对称秘钥。
- 服务端和客户端通过对称秘钥加密的密文通信。