关于HTTP连接和请求资源

HTTP

TLS,关于安全
三次握手和四次挥手

浏览器输入url到页面呈现,经过的过程,

DNS 解析IP地址
请求资源
HTTP三次握手
网页渲染

三次握手

SYN 客户端选择一个随机序列号 x,并发送一个 SYN 分组,其中可能还包括其他 TCP标志和选项。
SYN ACK 服务器给 x 加 1,并选择自己的一个随机序列号 y,追加自己的标志和选项,然后返回响应。
ACK 客户端给 x 和 y 加 1 并发送握手期间的最后一个 ACK 分组。

四次挥手

TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
服务器关闭客户端的连接,发送一个FIN给客户端。
客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

TLS

TLS协议提供三个基本的服务

加密 :通过非对称密钥加密

张三和李四分别生成自己的公钥和私钥;
张三和李四分别隐藏自己的私钥;
张三向李四公开自己的公钥,李四也向张三公开自己的公钥;
张三向李四发送一条新消息,并用自己的私钥签名;
李四使用张三的公钥验证收到的消息签名。

身份验证
数据完整性

三次握手

客户端向服务端发送一个请求SYN,请求中有随机序列号X,发送一个SYN分组
服务器收到请求,给随机序列号X加1,自己在发送一个随即序列Y和X给客户端
客户端收到X和Y,Y加上1,然后发送一个ACK分组给服务器

四次挥手

TCP 给服务器发送一个 FIN
服务器收到FIN后,返回一个ACK
服务器关闭客户端的连接,发送一个FIN给客户端
客户端发回ACK报文确认

为什么了连接需要三次,关闭却需要四次

对于建链接的3次握手,主要是要初始化Sequence Number 的初始值。通信的双方要互相通知对方自己的初始化的Sequence Number(缩写为ISN:Inital Sequence Number)——所以叫SYN,全称Synchronize Sequence Numbers。也就上图中的 x 和 y。这个号要作为以后的数据通信的序号,以保证应用层接收到的数据不会因为网络上的传输的问题而乱序(TCP会用这个序号来拼接数据)。

对于4次挥手,其实你仔细看是2次,因为TCP是全双工的,所以,发送方和接收方都需要Fin和Ack。只不过,有一方是被动的,所以看上去就成了所谓的4次挥手。如果两边同时断连接,那就会就进入到CLOSING状态,然后到达TIME_WAIT状态。

参考
TCP 的那些事儿(上)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理