面试官经常问我三次握手和四次挥手,现在终于知道怎么简简单单的叙述出来了

三次握手

三次握手发生在请求建立连接的阶段,

  • 第一次握手:客户端的应用进程主动打开,并客户端发送请求到服务器,表明想要建立连接(SYN)

    目的:

    使服务器知道:客户端发送信息的能力,和服务器接收信息的能力,二者都没有问题

  • 第二次握手:服务器应用进程被动打开,如果服务器同意客户端的请求,服务器则给客户端回应确认报文,表明收到了客户端的请求(SYN+ACK)

    目的:

    使客户端知道:客户端发送信息的能力,和服务器接收信息的能力,二者都没有问题
    但是,如果我没有发送确认报文去服务器端的话,服务器不会知道服务器的发送信息的能力有没有问题

  • 第三次握手:客户端收到确认报文之后,通知上层应用进程,连接已建立,客户端并再次向服务器发送确认报文,同时服务器在收到客户端的确认报文之后,也会通知上层应用进程连接已经建立(ACK)

    目的:

    使服务器知道:我们二者的发送和收信的能力都没有问题

面试官经常问我三次握手和四次挥手,现在终于知道怎么简简单单的叙述出来了_第1张图片

四次挥手

四次挥手发生在请求释放资源的阶段,目的就是断开连接

  • 第一次挥手:客户端向服务器发送断开连接请求(FIN)

    表明:我要关闭连接了

  • 第二次挥手:服务器收到请求后,向客户端回应报文(ACK)

    表明:服务器已收到请求,并且通知客户端自己可能还有一些数据需要处理

  • 第三次挥手:服务器发送完所有报文后,向客户端发送断开连接请求报文(FIN)

    表明:服务器要关闭连接了

  • 第四次挥手:客户端收到服务器要断开连接的请求报文后,想服务器发送确认报文(ACK)

    表明:客户端发送该报文时,也就将客户端的应用进程关闭了(CLOSED);当服务器收到确认报文后,服务器应用进程也关闭了(CLOSED)

面试官经常问我三次握手和四次挥手,现在终于知道怎么简简单单的叙述出来了_第2张图片

为什么要进行三次握手和四次挥手?

三次握手:为了防止无效的连接请求报文到达服务器而引起错误。

TCP发起建立连接的一方不会一直等待对方的回复,如果超时,他再次发起这个请求,上一个作废。

四次挥手:确保数据能够完整传输。

你可能感兴趣的