美文网首页
587,TCP链接和HTTPs链接过程(面试点:TCP:第一次握

587,TCP链接和HTTPs链接过程(面试点:TCP:第一次握

作者: 枫叶1234 | 来源:发表于2021-03-23 09:29 被阅读0次

TCP连接

TCP基础知识

TCP标志位

    SYN  建立连接 
    ACK  表示响应 
    FIN  关闭连接

TCP连接传输数据

    seq 是随机生成的一个数。另一端收到后会返回ack(seq+1)数据让发出端进行验证
    ack ack就是收到的上一次另一端发送的seq+1的数据

TCP,可靠的数据传输协议。

一个TCP生命周期主要经历三个步骤
    1建立连接
        三次握手
            1,client->server. SYN=1,seq=x
            2,server->client. SYN=1,ACK=1,seq=y,ack=x+1
            3,client->server. ACK=1,seq=x+1,ack=y+1
    2传输数据
        数据通信
    3关闭连接
        四次挥手
            1,client->server. FIN=1,seq=x
            2,server->client. ACK=1,ack=x+1,seq=y
            3,server->client. FIN=1,ACK=1,seq=z,ack=x+1
            4,client->server. ACK=1,seq=x+1,ack=z+1

第一次

第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。 [3]

第二次

第二次握手服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。 [3]

第三次

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。 [3]

image.png

syn 表示建立链接
ack 表示响应
seq 是随机生成的一个数。另一端收到后会返回ack(seq+1)数据让发出端进行验证
ack ack就是收到的上一次另一端发送的seq+1的数据

SYN-SENT -在发送连接请求后等待匹配的连接请求;
SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认;
ESTABLISHED- 代表一个打开的连接,数据可以传送给用户;

第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

https的原理
image.png

HTTPS在传输的过程中会涉及到三个密钥:

服务器端的公钥和私钥,用来进行非对称加密

客户端生成的随机密钥,用来进行对称加密

一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口

2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。

3.服务器将自己的公钥发送给客户端。

4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

7.然后服务器将加密后的密文发送给客户端。

8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。

相关文章

网友评论

      本文标题:587,TCP链接和HTTPs链接过程(面试点:TCP:第一次握

      本文链接:https://www.haomeiwen.com/subject/deivcltx.html