计算机网络
?
HTTP
HTTP各个版本之间的区别
-
HTTP1.0默认是短连接,每次于服务器交互,都需要新开一个连接 -
HTTP1.1版本最主要的是【默认持久连接】。只要客户端服务器没有断开TCP连接,就一直保持连接,可以发送多次HTTP请求;其次就是【断点传输】,利用HTTP消息头使用分块传输编码,将实体整体分块进行传输 -
HTTP/2不再以文本的方式传输,采用【二进制分帧层】,对头部进行了【压缩】,支持【流控】,最主要就是HTTP/2是支持【多路复用】的(通过单一的TCP连接【并行】发起多个的请求和响应消息) -
HTTP1.1提出的【管线化】只能【串行】(一个响应必须完全返回后,下一个请求才会开始传输) -
HTTP/2多路复用则是利用【分帧】数据流,把HTTP协议分解为【互不依赖】的帧(为每个帧【标序】发送,接收回来的时候按序重组),进而可以【乱序】发生避免【一定程度上】的队首阻塞问题
?
-
但是,无论是HTTP1.1还是HTTP/2,response想要的【处理顺序】总是需要跟request请求顺序保持一致。假如某个请求response响应慢了,还是会有阻塞的问题。这受限于HTTP底层的传输协议TCP,没有办法完全解决【线头阻塞】问题 -
HTTP/3跟前面版本最大的区别就是:HTTP1.x和HTTP/2底层都是TCP,而HTTP/3底层是UDP。使用HTTP/3能够减少RTT【往返时延】(TCP三次握手,TLS握手)
?
HTTPS
-
【安全】的HTTP协议(客户端和服务器传输链路中进行加密) -
客户端是需要知道服务器是不是【真实】的,所以在HTTPS中会有一个角色:CA(公信机构) -
服务端在使用HTTPS前,需要去认证的CA机构申请一份【数字证书】。数字证书里包含有证书持有者,证书有效期、【服务器公钥】等信息 -
CA机构也有自己的一份公私钥,在发布数字证书之前,会用自己的【私钥】对这份数字证书进行加密 -
等到客户端请求服务器的时候,服务器返回证书给客户端。客户端用CA的公钥对证书解密(因为CA是公信机构,会内置到浏览器或操作系统中,所以客户端会有公钥)。这个时候,客户端会判断这个【证书是否可信/有无被篡改】 -
公钥加密,私钥解密我们叫作【数字签名】(这种方式可以查看有无被篡改) -
解决了【认证】的问题,至少客户端能保证是在跟【真实的服务器】进行通信
?
TCP
三次握手
?
举个例子,把客户端比作男孩,服务器比作女孩。用他们的交往来说明“三次握手”过程:
-
男孩喜欢女孩,写信告诉女孩:我喜欢你,和我交往吧。写完信后,焦急的等待,因为不知道信能否顺利的传达到女孩。 -
女孩收到男孩的情书后,心花怒放,原来我们是两情相悦,于是给男孩回信:我收到了情书,我也喜欢你,愿意和你交往。 -
男孩收到回信很开心,因为发出的情书女孩收到了,并且从信中知道女孩也喜欢自己,愿意和自己交往。于是又写了一份信告诉女孩:你的心意和信,我都收到了,谢谢你,我爱你!
女孩收到男孩的回信后,也很开心,之后快乐的交流起来了。
这就是通俗版的“三次握手”,期间三封信代表着“三次握手”,用来确定两个方向上的数据传输通道是否正常。
四次挥手
举个例子,把客户端比作男孩,服务器比作女孩。通过他们的分手来表达“四次挥手”过程:
-
男孩发现女孩变成了自己讨厌的样子,决定分手,发了一封信告诉女孩。 -
女孩收到信,知道了男孩要分手,怒火中烧,立马给男孩回信,分手就分手,给我点时间,我把你的东西收拾好,还给你。男孩收到女孩的回信,知道女孩要和自己分手。等待女孩把自己的东西收拾好。 -
过了几天,女孩收拾好了东西,于是再次写信给男孩,你的东西收拾好了,快拿走,从此恩断义绝。 -
男孩收到女孩第二份回信,知道女孩收拾好了东西,可以正式分手了,于是再次写信给女孩:我知道了,这就去拿。
为什么握手是三次,挥手却要四次?
因为SYN代表连接标志,ACK代表确认报文。建立连接时,服务端结束CLOSED阶段并不需要任何准备,直接返回SYN和ACK报文,开始连接。
释放连接,被动房服务器,收到服务端释放连接的请求时并不能立即释放,因为有必要的数据处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放之后,才会返回FIN释放报文。
为什么客户端要在TIME-WAIT阶段要等2MSL?
因为客户端发出最后的ACK确认报文的时候,不能确定服务器端是否正常收到。所以服务端在发送完ACK确认报文后,会设置一个2MSL的计时器。
UDP
五层协议
?
浏览器访问url地址过程
-
DNS解析 -
TCP连接 -
发送HTTP请求 -
服务器处理请求并返回HTTP报文 -
浏览器解析渲染页面 -
连接结束
|