先放个链接,万一有人关注呢
优质文章推荐
↓ ↓ ↓ ↓ ↓
TCP(Transmission Control Protocol)协议,即传输控制协议,是一种可靠的传输层通信协议,基于字节流。在TCP/IP协议传输中的数据都被分段打包之后,再进行传输,所以这一层传输的数据被称为包,也叫数据包。在传输过程中,TCP协议会将每个数据包都编号,这样即使数据包丢失也能及时发现并重新传输。而一些不可靠的连接很容易发生数据包丢失,这一现象被称为丢包。

TCP是面向连接的,首先要创建连接,在创建连接的过程中客户端与服务端要进行三次交互,而这三次交互被生动形象地叫做三次握手。
第一次握手
首先,服务端创建传输控制块(TCB),并进入到监听(LISTEN)状态,随时可以与客户端进行连接。
客户端也需要创建传输控制块,接着向服务端发送请求连接的报文,这是第一次握手。其中,报文包括:头部SYN=1与序列号seq=x 。由于这是一个SYN报文,所以不会传输数据,但要消耗掉一个序列号,发送之后客户端进入同步已发送(SYN-SENT)状态。
第二次握手
服务端收到请求连接的报文后,再向客户端发送确认报文,这是第二次握手。其中,报文中内容为ACK=1,SYN=1,返回序列号是ack=x+1,以及报文序列号 seq=y,之后服务端进入同步收到(SYN-RCVD)状态。由于这个报文中也含有SYN,所以同样不能传输数据,但仍要消耗序列号。
第三次握手
客户端收到确认报文后,同样要给服务端发送确认报文,这是第三次握手。其中,报文头部是ACK=1,返回序列号是ack=y+1,并加入该报文的序列号seq=x+1,之后客户端进入已建立连接(ESTABLISHED)状态。这次的报文中不含有SYN,所以可以传输数据,如果不传输数据就不需要消耗序列号了。
在服务端收到来自客户端的确认报文后,也进入已建立连接(ESTABLISHED)状态,此时,TPC连接就建立好了

通俗的讲
简而言之,客户端发送请求信号给服务端,服务端收到请求信号后,再给客户端发送一个可以建立连接的信号。客户端接收信号后,再向服务端发起连接请求,完成这三次交互之后连接建立。例如甲去乙家做客时,先跟乙打招呼询问“能到你家坐坐吗”,接着乙会说“可以”,然后再去乙家。
之所以使用三次握手而不使用二次握手,是为了防止无效的请求报文引发错误。例如,客户端第一次发送的请求报文在网络节点中发生了阻塞,没有及时到达服务端,于是又发送了一次创建TCP连接请求,这次很快就建立了连接。这时,第一次发送的请求报文到达了服务端,于是又创建了一次连接,浪费了资源。如果使用三次握手,当客户端已经与服务端建立了连接,就算处理了过期的请求报文,并给客户端发送了响应报文,客户端也不会再发送确认报文。
来不及解释了,快上车!(进群看公告)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。
↓↓↓ 点个在看,你最好看!
给作者加鸡腿