几句话说清楚:TCP三次握手,四次挥手&&SSL四次握手

目录

        • TCP的三次握手
        • TCP四次挥手
        • SSL的四次握手

TCP的三次握手

几句话说清楚:TCP三次握手,四次挥手&&SSL四次握手_第1张图片

第一次:客户端发送建立连接请求。同步序号SYN,1表示连接请求,发送字节流的顺序号seq,假定为x。
第二次:服务端应答请求。同步序号依然设置为1,确认号ack为顺序号加1,ACK设置为1表示确认号有效。本次的字节流需要一个顺序号seq,假定为y。
第三次:客户端检查确认号是否正确,如果正确,发送确认信息到服务器,至此建立了TCP连接。 ack=y+1,ACK=1表示确认号有效,seq=x+1。

如果只有两次握手会发生什么?
如果只两次握手的话,那么服务器向客户端发送应答后会认为连接已经建立,开始向客户端发送数据。当服务器的应答丢失,客户端没有收到服务器的应答,会一直等待服务器的应答而抛弃客户端发送的数据。这样就导致了死锁,客户端一直等待,服务端一直再发送数据。

TCP四次挥手

几句话说清楚:TCP三次握手,四次挥手&&SSL四次握手_第2张图片

第一次:客户端关闭连接 FIN设置为1,表示关闭本方数据流。顺序号seq假定为u。此时客户端进入终止等待,等待应答。
第二次:服务器应答 ack = seq +1,ACK设置为1,表示确认号有效。此次的顺序号假定为v。客户端收到后进入终止等待的状态,等待服务器把剩下的数据传输完毕。(因此说挥手过程是半关闭,客户端关闭不发送数据,但服务器还要进行最后的传输)
第三次:服务器数据传输完毕,关闭连接,并通知客户端 关闭连接状态FIN=1,确认号ack = seq+1=u+1,此次seq假定为w,ACK=1,表示确认号有效。
第四次:客户端收到服务器关闭连接信息,发送确认信息给服务器 ack =w+1,seq = u+1,ACK=1。

TCP三次握手,为什么会有四次挥手
TCP建立连接的第二次握手,服务器将确认ACK和同步SYN同时发给了客户端。而关闭连接时,服务器在客户端关闭数据流后,可能需要继续传输剩下的数据,因此先后两次分开发送,确认信息和关闭数据流信息,因此为四次挥手。
为什么四次挥手结束后,客户端还要等待2MSL
最后一次挥手,客户端向服务器发送确认信息,为了确保最后一次挥手的确认信息发送成功,需要等待。如果最后一次挥手发送的信息丢失,服务器在一段时间内没有收到确认信息,会再次发送给客户端关闭数据流的信息,客户端也会再次发送确认信息。

SSL的四次握手

几句话说清楚:TCP三次握手,四次挥手&&SSL四次握手_第3张图片
第一次:客户端请求建立连接。向服务器发送随机码A,以及自己的支持的加密方式、压缩方式等。
第二次:服务器收到后,向客户端发送随机码B,以及确认客户端可用的加密方式、数字证书、非对称加密的公钥等信息。如果服务器与客户端加密方法不一致,那么关闭连接。
第三次:客户端收到以上信息,验证数字证书的正确性,并使用服务器返回的加密方式,使用公钥对生成对称密钥进行,发送到服务器。
第四次:服务端利用私钥进行解密,得到A,B以及对称加密的session key。服务器使用得到session key加密一段握手信息,发送给客户端。HTTP用此加密方式进行数据传输。

你可能感兴趣的:(TCP/IP)