三次握手在正式情况下都做了什么呢?
第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里
发送完成,客户端进入SYN_SENT状态,等待服务端确认;
第二次握手 :
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。
数据包发送给客户端A以确认连接请求,服务端B进入SYN_RCVD状态。
第三次握手:
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1
服务端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端A和服务端B进入ESTABLISHED状态,完成三次握手,随后客户端与服务端之间可以开始传输数据了。
为何三次握手,而不是二次或者四次哪
想明白这一点,必须首先明白,三次握手的分别意义是什么
首先第一次握手,客户端发送SYN(同步序列编号Synchronize Sequence Numbers),其实是一个随机的数字,其意义就在于确认
服务端是否可以接受到客户端发送的消息。
第二次握手,服务端发送SYN+ACK(确认字符Acknowledge character)数据到客户端,注意这个数据包的名字叫SYN/ACK,只所以叫这个名字,就是因为它包含了两个数据,
并且两个数据所起到的作用不同,SYN是作为同步序号请求确认,ACK则是回复客户端请求确认信息。
第三次握手,客户端发送ACK数据,在发送数据之前,客户端至少要做两件事,一件事是检查收到ACK数据是否正常,如果正常则回复服务端
的请求确认数据SYN一个ACK,这个数据值也就是SYN值+1,双方确认完毕,则表示已经建立起了可靠的连接,可以相互传送数据。
双向通信协议:
除了以上三次握手的意义,还需要了解一点,TCP是一个双向通讯协议,也就是不单单客户端可以主动发送消息,服务端也可以主动发送消息,
这就需要做到一点,就是消息确认是双向的,不能只是单向的。
解释:
为什么不是二次或者四次握手
当只有两次握手时,客户端已经确认了消息可以发送到服务端,并且可以接收到了服务端的消息。但是对于服务端来说,它并不能确认,
自己主动发出的消息,能不能被客户端收到。因此不能两次握手,因为服务端主动发送消息,不可靠。
当是四次握手时,就会造成不必要的资源浪费,影响传输的效率,三次握手已经可以保证信息传输的可靠性了