【计算机网络】三运输层--TCP连接与解除

1、TCP三次握手

TCP三次握手
客户TCP一开始属于关闭状态,当收到客户应用程序的请求之后,就开启自己和服务器端TCP的连接过程:

  • 1)客户端TCP发送一个特殊的TCP报文段,其中没有任何应用层数据,但是将首部SYN置为1,并且随机选取了自己的初始序号client_isn,一起打包发送过去。(这个报文段也称为SYN报文段)
  • 2)服务器端收到了这个报文段,获取到里面的数据之后,会给出一个SYNACK确认,那么服务器端也会给客户端发送一个特殊的TCP报文段,允许连接,里面同样没有任何应用层数据。但是在头部,SYN置1,确认号是客户端发过来的序号+1,也就是client_isn+1,同时也会选择自己的初始序号server_isn,一起打包发给客户端。(这个报文段也称为SYNACK报文段)
  • 3)客户端收到SYNACK报文段之后,就知道连接已经成功了,接着就可以对SYNACK报文段进行确认,这个时候的报文段里面的SYN置0,同时确认号是iserver_isn+1,序号也变成了client_isn+1,在这个时候,里面是可以负载要发送的数据的。

2、TCP四次拆除

TCP四次拆除
在完成数据发送之后,不需要连接的时候,就要考虑将连接释放。这个时候就会涉及到头部里的FIN字段:

  • 1)客户端因为客户应用程序要发送一个关闭连接命令而发送一个报文段。这个报文段里面的FIN置1
  • 2)服务器接收到之后,就会对这个报文段进行确认。
  • 3)服务器发送自己的终止报文段,其中的FIN置1
  • 4)客户端对这个报文段进行ACK确认

客户和服务器TCP的状态序列

3.1客户TCP的状态序列

客户TCP的状态序列

  • 一开始客户TCO是出于关闭CLOSED状态的,当收到客户应用程序的TCP连接请求之后,就会对服务器TCP发送一个SYN报文段,然后进入SYN_SENT状态。在这个过程中,会等待服务器TCP的SYNACK报文段,收到之后对其进行ACK回应,同时表明连接已经成功建立了,这个时候就会进入ESTABLISHED状态,下面就可以进行数据的发送了。
  • 在发送完数据之后,由应用程序发起的关闭连接请求来引起发送一个FIN报文段,然后进入FIN_WAIT_1状态,在这里等待服务器TCP的ACK。收到之后就会进入FIN_WAIT_2状态,在这里等待服务器TCP发来的FIN报文段,并进行ACK回应。收到之后,就可以进入TIME_WAIT进行最后的等待时间。如果客户TCP的ACK丢失了,那么就需要重传一份。当等待时间到了,连接就已经关闭了,就会又回到关闭CLOSED状态。

3.2服务器TCP的状态序列

服务器TCP的状态序列

  • 服务器TCP一开始也是关闭CLOSED状态,,当服务器应用程序创建了一个监听套接字之后就会进入LISTEN状态,监听客户发送SYN报文段的端口。当收到客户端发来的SYN报文段之后,对其进行ACK确认,并且发送给客户端,这样就可以进入SYN_RCVD状态。在这里等待客户端的ACK确认报文段。收到之后就代表连接已经建立了,就可以进行数据传输了。
  • 当要关闭连接的时候,服务器端是在已连接状态进行等待的,当收到客户端的FIN报文段之后,对其进行ACK回应,进入CLOSE_WAIT状态。此时表明客户端已经没有数据要发送了,当自己的数据发送完之后,就会对客户端发送FIN报文段,进入LAST_ACK状态,等待客户端的ACK。客户端进行确认之后,服务器端正确收到之后,连接就已经关闭了(因为在最后这个过程中,可能无法正确收到ACK,所以可能需要进行重传,这也是客户端TIME_WAIT状态存在的意义之一),就会重新进入CLOSED状态。

猜你喜欢

转载自blog.csdn.net/RuRu_Bai/article/details/121877080