TCP建立和关闭的过程

来源:互联网 发布:网络安全管理系统软件 编辑:程序博客网 时间:2024/06/12 23:59

 一、TCP协议简介

TCP,工作在OSI的传输层,提供面向连接的可靠传输服务。

TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。

TCP报头总长最小为20个字节,其报头结构如下图(图1)所示:

    

二、TCP连接建立

TCP的连接建立过程称为TCP三次握手。首先发送方主机向接收方主机发起一个建立连接的同步(SYN)请求;接收方主机在收到这个请求后向送方主机回复一个同步/确认(SYN/ACK)应答;发送方主机收到此包后再向接收方主机发送一个确认(ACK),此时TCP连接成功建立。

详细过程如下,以客户端发起建立连接为例:

  • 1.服务器端首先执行 LISTEN 原语进入被动打开状态( LISTEN ),等待客户端连接;

  • 2.当客户端的一个应用程序发出 CONNECT 命令后,本地的 TCP 实体为其创建一个连接记录并标记为 SYN SENT 状态,然后给服务器发送一个 SYN 报文段;

  • 3.服务器收到一个 SYN 报文段,其 TCP 实体给客户端发送确认 ACK 报文段同时发送一个 SYN 信号,进入 SYN RCVD 状态;

  • 4.客户端收到 SYN + ACK 报文段,其 TCP 实体给服务器端发送出三次握手的最后一个 ACK 报文段,并转换为 ESTABLISHED 状态;

  • 5.服务器端收到确认的 ACK 报文段,完成了三次握手,于是也进入 ESTABLISHED 状态。

 在此状态下,双方可以自由传输数据。当一个应用程序完成数据传输任务后,它需要关闭 TCP 连接。假设仍由客户端发起主动关闭连接。

三、TCP连接的关闭

TCP协议的连接是全双工连接,一个TCP连接存在双向的读写通道。 关闭过程简单说来是 “先关读,后关写”,一共需要四个阶段。以客户机发起关闭连接为例:
1.服务器读通道关闭
2.客户机写通道关闭
3.客户机读通道关闭
4.服务器写通道关闭
详细过程:
 第一阶段   

1.客户机发送完数据之后,客户端执行 CLOSE 原语,本地的 TCP 实体向服务器发送一个 FIN 报文段并等待响应的确认(进入状态 FIN WAIT 1 );
     2.服务器收到FIN报文段,它确认客户端的请求发回一个 ACK 报文段,关闭服务器读通道,进入 CLOSE WAIT 状态;
     2.客户机收到ACK 报文段后,关闭客户机写通道,就转移到 FIN WAIT 2 状态,此时连接在一个方向上就断开了;(此时,客户机仍能通过读通道读取服务器的数据,服务器仍能通过写通道写数据)
     第二阶段

4.服务器发送完数据之后,也执行 CLOSE 原语关闭另一个方向的连接,其本地 TCP 实体向客户端发送一个 FIN 报文段,并进入 LAST ACK 状态,等待最后一个 ACK 确认报文段;
    5.客户机收到FIN后,返回确认段ACK,关闭客户机读通道,进入 TIMED WAIT 状态,此时双方连接均已经断开,但 TCP 要等待一个 2 倍报文段最大生存时间 MSL ( Maximum Segment Lifetime ),确保该连接的所有分组全部消失,以防止出现确认丢失的情况。当定时器超时后, TCP 删除该连接记录,返回到初始状态( CLOSED );
     6.服务器收到最后一个确认 ACK 报文段,关闭服务器写通道,其 TCP 实体便释放该连接,并删除连接记录,返回到初始状态( CLOSED )。
这是标准的TCP关闭两个阶段,服务器和客户机都可以发起关闭,完全对称。
FIN标识是通过发送最后一块数据时设置的,标准的例子中,服务器还在发送数据,所以要等到发送完的时候,设置FIN(此时可称为TCP连接处于半关闭状态,因为数据仍可从被动关闭一方向主动关闭方传送)。如果在服务器收到FIN(i)时,已经没有数据需要发送,可以在返回ACK(i+1)的时候就设置FIN(j)标识,这样就相当于可以合并第二步和第三步。


四、其它

1.TCP重置:TCP允许在传输的过程中突然中断连接,这称为TCP重置; TCP 连接在 ESTABLISHED 状态时收到 RST 包后,直接清理队列并删除 TCB,连接进入 CLOSED 状态。

2.TCP数据排序和确认:TCP是一种可靠传输的协议,它在传输的过程中使用序列号和确认号来跟踪数据的接收情况;

3.TCP重传:在TCP的传输过程中,如果在重传超时时间内没有收到接收方主机对某数据包的确认回复,发送方主机就认为此数据包丢失,并再次发送这个数据包给接收方,这称为TCP重传;

4.TCP延迟确认:TCP并不总是在接收到数据后立即对其进行确认,它允许主机在接收数据的同时发送自己的确认信息给对方。

5.TCP数据保护(校验和):TCP是可靠传输的协议,它提供校验和计算来实现数据在传输过程中的完整性。