tcp三次握手

tcp三次握手

三次握手的过程主要是为了服务端和客户端创建安全可靠的链接。过程以下:web

  1. 客户端发送syn=1和seq=x(序列号)给服务端,请求创建链接。
  2. 服务端收到信号后 响应确认报文ack=x+1和syn=1,seq=y给客户端。
  3. 客户端接受到响应报文后 发送ack=y+1和seq=1给服务端,并进入链接状态。服务端收到以后进入链接状态。
    以上就是三次握手全过程。
    在这里插入图片描述

可是彷佛两次握手就能知足需求了,在服务端响应报文给客户端以后,客户端为何还要再一次发送报文给服务端呢?安全

为何不是两次握手?

这个问题也困扰了好久,知道看到这段文字。网络

client发出的第一个链接请求报文段并无丢失,而是在某个网络结点长时间的滞留了,以至延误到链接释放之后的某个时间才到达server。原本这是一个早已失效的报文段。但server收到此失效的链接请求报文段后,就误认为是client再次发出的一个新的链接请求。因而就向client发出确认报文段,赞成创建链接。假设不采用“三次握手”,那么只要server发出确认,新的链接就创建了。因为如今client并无发出创建链接的请求,所以不会理睬server的确认,也不会向server发送数据。但server却觉得新的运输链接已经创建,并一直等待client发来数据。这样,server的不少资源就白白浪费掉了。采用“三次握手”的办法能够防止上述现象发生。例如刚才那种状况,client不会向server的确认发出确认。server因为收不到确认,就知道client并无要求创建链接。”。 主要目的防止server端一直等待,浪费资源。tcp

意思是说若是第一次握手时由于总总缘由致使网络堵塞,报文没有及时给到服务端,时间一长此次链接就失效了。过了很长一段时间第一次握手的报文传给了服务端,服务端并不知道此报文已失效,就进入连接状态,但客户端并无发送任何东西给服务端,致使服务端一直等待,这样就形成资源浪费。svg

因此三次握手是创建安全可靠的连接的最安全,效率最高的方式。server