一、https协议的优势?算法
1)使用HTTPS协议可认证用户和服务器;浏览器
2)确保数据发送到正确的客户端和服务器;缓存
3) HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,安全
可防止数据在传输过程当中不被窃取、改变、确保数据的完整性。服务器
4)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增长了中间人攻击的成本。网络
5)谷歌曾在2014年8月调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”架构
二、https协议的缺点?大数据
https握手阶段比较费时,会使页面加载时间延长50%,增长10%~20%的耗电。网站
https缓存不如http高效,会增长数据开销。搜索引擎
SSL证书也须要钱,功能越强大的证书费用越高。
SSL证书须要绑定IP,不能在同一个IP上绑定多个域名,
ipv4资源支持不了这种消耗。
三、TCP三次握手,一句话归纳? 参考连接:http://www.javashuo.com/article/p-dxcbkhyu-hw.html
1)图的名词解释?
【1】SYN:同步序号,表示创建链接。TCP规定SYN=1时不能携带数据,但要消耗一个序号,所以随即选取一个序列号
seq=x数据包(该数据包里就是一个标记seq,并无任何有效的数据)。
【2】ACK:确认序号,表示响应(都能响应了,那上一步就链接成功了,因此说ACK=1表示确认链接成功)。所以SYN和
ACK同时为1,表示创建链接以后的响应。而只是单个的SYN=1,表示的只是创建链接。
【3】seq:序列号(sequence number),发送数据包的初始序列号。seq=x表示发送端数据包的初始序列号为x。
【4】ack:确认号(acknowledge number),此次收到数据包的确认,以及对下次收到数据包的期待。ack=x+1表示我方到x为止,全部的数据
都已正确收到,且我方告知对方:我期待你下次给我发送包的初始序号seq为x+1。
能够这么理解:SYN/ACK是TCP协议层面的标记,而seq/ack是数据层面的标记
2)过程解释
【1】首先client向server发起链接,SYN = 1, seq = x;
由于要创建链接,因此SYN=1;又由于TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此client随机选取一个初始序号
seq=x。(由于并无响应动做,因此认为ACk=0)。发送后client进入syn-sent状态,表示客户端等待服务器的回复。
【2】server收到请求后,再向client发送确认。SYN=1, ACK=1, seq=y, ack=x+1
由于server创建链接后作出了响应,因此SYN=1,ACK=1。由于TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此
server随机选取一个初始序号seq=y。又由于server到x为止的全部数据都已正确收到了,且server告诉client:我期待你下次给我发送
包的初始序号(seq)是x+1,因此ack=x+1。 发送后服务器进入syn_rcvd,表示服务器已经收到client的链接请求,等待clientde
确认。
【3】client收到确认后还需再次发送确认,同时携带要发送给server的数据:ACK=1, seq=x+1,ack=y+1;链接创建
由于有响应动做,因此ACK=1(由于要携带发送的数据,因此这儿没SYN什么事)。由于【2】中Server已经告诉了此次它
想收到包的初始序号是x+1,因此初始序号为seq=x+1。又由于client到y为止的全部数据都已经正确收到了,准备接受序号为
y+1的包,因此ack=y+1。server收到后,这个TCP链接就进入Established状态,就能够发起http请求。
3)为何不能改为两次握手?
有人困惑为何要进行三次握手呢(两次确认)?这主要是为了防止已失效的请求链接报文突然又传送到了,从而产生错误。
假定A向B发送一个链接请求,因为一些缘由,致使A发出的链接请求在一个网络节点逗留了比较长的时间。此时A会将此
链接请求做为五效处理,又从新向B发起了一次新的链接请求,B正常收到此链接请求后创建了链接,数据传输完成后释放了
链接。若是此时A发出的第一次请求又到达了B,B会觉得A有发起了一次链接请求。若是是两次握手,此时链接就创建了,
b会一直等待A发送数据,从而白白浪费B的资源。若是是三次握手:因为A没有发起链接请求,也就不会理会B的链接相应,
B没有收到A的确认连接,就会关掉本次连接。
四、TCP和UDP的区别?
1)TCP是面向链接的,UDP是无链接的即发送数据前不须要创建链接。
2)TCP提供可靠的服务,也就是说,经过TCP链接传送的数据,无差错,不丢失,不重复,且按序到达。
UDP尽最大努力交付,即不保证可靠交付。而且由于TCP可靠,面向链接,不会丢失数据,所以适合大数据量的交换。
3)TCP是面向字节流,UDP面向报文。
4)TCP只能是1对1,UDP支持1对1,1对多。
5)TCP的首部较大为20字节,而UDP只有8字节。
6)TCP是面向链接的可靠性传输,而UDP是不可靠的。
5)什么是WebSocket?
WebSocket是HTML5中的协议,支持持久链接,http协议不支持持久性链接。
在WebSocket中,浏览器和服务器只须要完成一次握手,二者之间就直接能够建立持久性的链接,并进行双向数据传输。
HTTP1.0和HTTP1.1都不支持持久性链接,HTTP1.1中的keep-alive,能够将多个http请求合并为1个。