第一次握手

     客户端发送同步序号为SYN=1,随机产生Seq number=x的数据包到服务器,服务端由SYN=1知道客户端要求建立连接。

第二次握手

    服务端收到请求后要确认联机信息,向客户端发送Ack number=X+1,SYN=1,ack=1随机产生Seq number=Y的包。

第三次握手 

    客户端收到后检查Ack是否正确,即第一次发送的X+1,以及码位Ack是否为1,若正确,再发送Ack=Y+1,ack=1。服务端收到后确认seq值与ack=1则建立连接成功,开始传送数据。 

简单来说就是这样:
        客户端:你在吗,服务器?
        服务端:我在,客户机,你要传输数据吗?
        客户端:哦,确实是你,是的,我要传输数据。

TCP/IP的三次握手与四次挥手

第三部为什么客户端还要进行一次确认?

        为了防止已经失效的连接请求突然又发回服务端而产生的错误。“失效的连接请求”:正常来说,客户端发出连接请求,但因为连接请求丢失而未收到确认,于是客户端又一次发出连接请求,后来收到了确认,建立了连接。第一次发送的连接请求就是失效的连接请求。
        如果假设,第一次的连接请求并没有丢失,而是因为网络原因在一个节点处滞留了一段时间,以至于延误至传输数据完成后才到达服务端。服务端会误认为这是一次新的连接请求,就会又像客户端发出请求,同意建立连接。如果没有三次握手中的第三次握手确认,在这个情况下,无效的连接就这样建立起来了。因为客户端不会像服务端发送数据,因此浪费了服务端的资源。所以采用三次握手,以防止这样的现象发生。

相关文章: