网络

TCP三次握手 && 为什么是三次握手

2019-08-06  本文已影响0人  吕艳凯

三次握手在正式情况下都做了什么呢? 

第一次握手:

客户端发送一个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是一个双向通讯协议,也就是不单单客户端可以主动发送消息,服务端也可以主动发送消息,

这就需要做到一点,就是消息确认是双向的,不能只是单向的。

解释:

为什么不是二次或者四次握手

当只有两次握手时,客户端已经确认了消息可以发送到服务端,并且可以接收到了服务端的消息。但是对于服务端来说,它并不能确认,

自己主动发出的消息,能不能被客户端收到。因此不能两次握手,因为服务端主动发送消息,不可靠。

当是四次握手时,就会造成不必要的资源浪费,影响传输的效率,三次握手已经可以保证信息传输的可靠性了

上一篇 下一篇

猜你喜欢

热点阅读