TCP连接管理概述TCP是一个面向连接的协议。传输连接用于传输TCP数据包。TCP的连接和释放是每一个面向连接的通信中必不可少的过程。因此,传输连接分为三个阶段,即:连接建立、数据传输和连接释放。传输连接的管理是为了使传输连接的建立和释放能够正常进行。TCP连接的建立需要解决三个问题。1.让每一方都知道对方的存在。2、需要允许双方协商一些参数(比如窗口的最大值,是否使用窗口扩展选项,时间戳选项,服务质量等)。3.分配传输实体资源的能力(例如高速缓存大小、连接中的项目等)。TCP连接的建立采用客户端服务器方式。主动发起建立连接的应用程序称为客户端(Client),而被动等待连接建立的应用程序进程称为服务器(server)。建立TCP连接下图显示了建立TCP连接的过程。主机A运行TCP客户端程序,而B运行TCP服务器程序。最初,两个TCP进程都处于CLOSED状态。然后A主动打开连接,B被动打开连接。1、A发送一个SYN=1的TCP报文,序号seq为x。A的状态由CLOSED进入SYN-SENT。2、B收到后,发送一个SYN=1,ACK=1的TCP报文,同样为自己选择一个序号seq=y,确认号ack=x+1。B的状态从LISTEN进入到SYN-RCVD。3、A收到B的确认后,需要向B确认。ACK=1,seq=x+1,确认号ack为y+1。A的状态通过SYN-SENT进入ESTABLISH,B在收到A的确认后也通过SYN-RCVD进入ESTABLISH。以上过程就是3次握手。这里一个常见的问题是为什么A在发送建立连接的请求后还需要发送确认消息?这是因为主要是为了避免无效的连接请求段突然传给B失败而导致错误。无效消息主要是在网络不是很畅通的时候产生的,三次握手机制避免了这种情况带来的问题。TCP连接的释放传输结束后,通信双方都可以释放连接。A的应用进程首先向自己的TCP发送连接释放报文段,停止发送数据,主动关闭TCP连接。1、A将连接释放报文的终止控制位FIN置1,seq序号为u。此时A的状态从ESTABLISH进入FIN-WAIT-1。2.B收到此消息后,立即发送确认。ACK=1seq=vack=u+1。此时B从ESTABLISH进入CLOSE-WAIT状态。A收到B的确认后进入FIN-WAIT-2。这时B的TCP服务器进程就会通知高层应用进程。此时A到B的传输被释放,TCP连接处于半关闭状态。A没有数据发送给B,如果B还有数据,可以发送给A。3.B发送FIN=1ACK=1seq=wack=u+1(最后的确认号必须重复)。B从CLOSE-WAIT进入LAST-ACK状态。4、A收到B的连接释放报文后,发送确认ACK=1seq=u+1ack=w+1。此时A从FIN-WAIT-2进入TIME-WAIT。B在收到A的确认后通过LAST-ACK进入CLOSED状态。A在2MSL(约4分钟)后进入CLOSED状态。这里一个常见的问题是为什么A需要2MSL等待时间。一是保证A发送的最后一个ACK报文到达B。二是为了那个时候出现上面提到的无效报文段。因为2MSL会让这个连接产生的报文段从网络上消失。全文结束。
