TCP运输连接管理解析(三次握手过程解析)

TCP的运输连接过程,就是说两个进程之间的通信过程,而两个进程通信就是通过两个端口来进行的,他们之间采用的传输协议是TCP的,首先来了解一下TCP报文的格式:

TCP运输连接管理解析(三次握手过程解析)_第1张图片


对几个字段的意思解释一下(这个才是整个过程具体的细节):

1.确认号 是期望收到对方下一个报文段的第一个数据字节的序号;

2.确认ACK   当ACK=1是 确认号字段才有效,ACK=0,确认号无效,在连接建立后所有传送的报文段都必须把ACK置为1;

3.同步SYN  在连接建立时用来同步序号,当SYN=1而ACK=0时,表明这是一个连接请求报文段,对方若同意建立连接,则相应的报文段应该使得SYN=1和ACK=1;


一个传输过程分为:连接建立,数据传送和连接释放,

首先解释TCP的连接建立过程:

TCP运输连接管理解析(三次握手过程解析)_第2张图片


如图是一个TCP连接建立过程

1.最开始两端的TCP进程都是closed状态,然后要传输数据,A主动打开连接,B是被动打开的,(这个过程是由系统控制的,因为A是传送方);

2.然后A打开连接后,然后A的客户进程创建一个传输控制模块TCB,用来准备发送数据,B被打开之后B的服务器进程也创建了一个传输模块TCB,用来准备接受数据,此时的B处于listen状态,等待A的请求;

3.A的进程向B发送连接请求报文段,这个时候就要把SYN=1同时选择一个初始序号seq=x,因为一个连接请求报文必须把SYN=1,然后TCP规定,SYN报文段不能携带数据,但是要消耗掉一个序号(这个是不携带数据,TCP也有首部占字节),然后发送同步信号之后,A进入一个SYN-SENT(同步已发送)状态,如图:

TCP运输连接管理解析(三次握手过程解析)_第3张图片


4. B在收到请求报文之后,同意建立,向A发送确认,确认报文段中要把SYN和ACK位都置为1(这是两个位的规定),确认号是ack=x+1,同时也要为自己选择一个初始号seq=y(这个报文与上一个报文是不一样的,所以需要一个初始号),此时B的进程进入SYN-RCVD(同步请求收到)状态,如图:

TCP运输连接管理解析(三次握手过程解析)_第4张图片


5.A收到B的报文之后,还要给B给出确认,这个确认报文段ACK=1,确认号ack=y+1,而自己的序号seq=x+1,发送完之后,A进入ESTABLISHED(已经建立连接)状态,如图:

TCP运输连接管理解析(三次握手过程解析)_第5张图片

6.B收到A的确认报文之后,也进入ESTABLISHED的状态

7.开始传输数据,如图:

TCP运输连接管理解析(三次握手过程解析)_第6张图片



然后是数据传输过程:以字节为单位的滑动窗口;


最后解释TCP的连接释放:

首先解释名词:

1.终止FIN   用来释放一个连接,当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输链接;

2.MSL   叫做最长报文段寿命(Maximum Segment Lifetime),RFC793建议设为2分钟;


然后看一下整个过程:


TCP运输连接管理解析(三次握手过程解析)_第7张图片


1.A,B传输数据完毕后,没有关闭连接,此时它们都处于ESTABLISHED状态;

2.现在要释放连接,A的应用进程先向其TCP发出链接是放报文段,并停止再发送数据,主动关闭TCP连接,(这个是应用进程做的),然后A把连接释放报文发给B,其中

连接释放报文中FIN=1,seq=u,发送完之后,A进入FIN-WAIT-1状态,如图:

TCP运输连接管理解析(三次握手过程解析)_第8张图片

3.B收到报文之后,发出确认报文给A,其中确认豪ack=u+1,seq=v,ACK=1,然后B进入CLOSE-WAIT(关闭等待)状态,此时B这边的服务器进程通知高层应用进程,然后从A到

B的连接就释放了,然而这个时候TCP连接处于半关闭(half-close)状态,即A已经能够没有数据要发送,但B要是发送数据,A仍要接受,也就是说,从B到A这个方向的连接没有关闭,如图:

TCP运输连接管理解析(三次握手过程解析)_第9张图片

4.A收到B的确认报文之后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出连接释放报文段;(这个就是两边都要发送连接释放报文,A这边发送了,B这边也要发送,弄清楚这一点,整个释放过程就很好理解了);

5.B没有数据向A发送,其应用进程通知TCP释放连接,这是B向A发出连接释放报文段,其中FIN=1,ACK=1,seq=w,ack=u+1,发送完之后,B进入LATS-ACK(最后确认)状态,如图:

TCP运输连接管理解析(三次握手过程解析)_第10张图片

6.A收到连接释放报文之后,向B发出确认报文,然后进入TIME-WAIT(时间等待)状态,然后再经过2MSL之后才会进入CLOSED状态;

7.B收到确认报文之后,进入CLOSED状态,如图:

TCP运输连接管理解析(三次握手过程解析)_第11张图片

 


你可能感兴趣的:(计算机网络)