TCP协议的三次握手与四次挥手(连接与释放)
- 一、前言
- 二、简单的知识准备
- 1. TCP协议的主要特点
- 2. TCP报文段
- 三、TCP连接的建立(三次握手)
- 四、TCP连接的释放(四次挥手)
- 五、TCP连接与释放的总结
- 六、结束语
一、前言
本篇文章主要是介绍TCP连接的建立以及连接的释放过程,也就是我们常说的“三次握手”和“四次挥手”。
二、简单的知识准备
1. TCP协议的主要特点
TCP是在不可靠的IP层之上实现的可靠的数据传输,它是面向连接的传输层协议,提供全双工通信,数据传输是面向字节流的。
2. TCP报文段
TCP传送的数据单元为报文段,一个TCP报文分为首部和数据两部分,其首部的前20B是固定的。TCP的全部功能体现在其首部的各个字段中,这里大家主要注意下面几个字段的意义即可:
- 序号(seq):指的是本报文段所发送的数据的第一个字节的序号。
- 确认号(ack):表示期待收到对方的下一个报文段的第一个数据字节的序号(seq)。如ack=n+1,那么序号seq=n及之前的数据已经收到,期待收到序号n+1及之后的数据。
- 确认位(ACK):仅当ACK=1时,确认位(ack)才有效,若ACK=0时,确认位(ack)无效。
- 同步位(SYN):SYN=1时有效,意义有两种:
①SYN=1,ACK=0,表示该报文为连接请求报文。
②SYN=1,ACK=1,表示该报文为连接同意报文。- 终止位(FIN):用于释放连接,当FIN=1时,表示数据已发送完毕,并要求释放连接。
三、TCP连接的建立(三次握手)
为了能够更好的了解TCP连接的建立过程,我特意画了一幅图:
在连接建立前,服务器处于LISTEN(监听)状态,等待连接:
第①次握手:客户机A发送请求连接报文,报文段首部中同步位SYN=1,第一个数据字节初始序号seq=x,客户机A进入SYN-SENT(同步已发送)状态。(注:SYN报文段不能携带数据,但消耗一个序号,下面第②次握手一样)
.
第②次握手:服务器B收到连接请求报文,同意连接,发送接受连接报文,报文段中SYN=1,ACK=1,ack=x+1(序号x的数据已收到,期待接收seq=x+1数据),seq=y,服务器B进入SYN-RCVD(同步收到)状态。(在这里分配了服务器的资源)
.
第③次握手:客户机收到连接接受报文后,还需向服务器发送确认报文,报文段首部中ACK=1,ack=y+1,seq=x+1,客户机A进入连接已建立状态,可以开始传送数据。(注:在第③次握手发出的报文可以携带数据了,这里很容易被忽视)
以上就是TCP三次握手的主要过程。
四、TCP连接的释放(四次挥手)
同样的,这里用一个例图来进行介绍,毕竟图文结合能够让我们更好的理解。
参与TCP连接的两个进程都能终止该连接,连接释放的过程通常也被称为四次挥手:
.
第①次挥手:客户机A数据发送完成,主动关闭TCP连接,发送连接释放报文,报文段首部终止位FIN=1,同样的该报文需要消耗一个序号,设序号seq=u,客户机A进入FIN-WAIT-1(终止等待1)状态。
.
第②次挥手:服务器B收到连接释放报文后随即发出确认报文,报文段首部字段中ACK=1,ack=u+1,序号seq=v(这里的v等于前面已传送数据的最后一个字节的序号加1),服务器进入CLOSE-WAIT(关闭等待)状态,就此,从客户机A到服务器B的连接就释放了(半关闭状态)。( 注:TCP是全双工的,可以看成TCP连接有两条通路,在客户机A成功发送FIN报文并确认后,A就不能发送数据了,但是服务器B还可以发送数据,这里对应图中中间的数据传送标志)
.
第③次挥手:若服务器没有数据发送了,就发出连接释放报文,报文首部字段中FIN=1,注意这里需要重复上次已发送的确认号ack=u+1,ACK=1,而由于在半关闭状态服务器B可能向客户机A发送了数据,所以序号需设为seq=w****而不是seq=v+1,然后服务器B进入LAST-ACK(最后确认)状态。
.
第④次挥手:客户机收到连接释放报文后,还需发出确认,因此确认报文中的ACK=1,确认号ack=w+1,序号seq=u+1。但此时TCP连接还需要等待2MSL(最长报文段寿命)后,客户机才进入最后的CLOSED(连接关闭)状态。
五、TCP连接与释放的总结
这里简单的对TCP三次握手与四次挥手的过程进行总结,主要记住每个阶段中的主要字段的状态即可:
(1)TCP连接的建立(三次握手):
① SYN=1,seq=x。
② SYN=1,ACK=1,seq=y,ack=x+1。
③ ACK=1,seq=x+1,ack=y+1。
.
(2)TCP连接的释放(四次挥手):
① FIN=1,seq=u。
② ACK=1,seq=v,ack=u+1。
③ FIN=1,ACK=1,ack=u+1,seq=w
④ ACK=1,seq=u+1,ack=w+1
六、结束语
好了,对于TCP的三次握手以及四次挥手的介绍就到这里了,我是风行男孩,咱们有缘再见!(码字不易,如本篇文章若有帮助,留个赞当痕迹就好)