当咱们讨论TCP的链接运输管理时,咱们在说什么

TCP链接管理概述

TCP是面向链接的协议。运输链接是用来传送TCP报文的。TCP的链接和释放是每一次面向链接的通讯中必不可少的过程。所以,运输链接就有三个阶段,即:链接创建,数据传输和链接释放。运输链接的管理就是使运输链接的创建和释放均可以正常的进行。缓存

在TCP链接的创建过程当中要解决一下三个问题。服务器

1.要使每一方可以确知对方的存在。网络

2.要容许双方协商一些参数(如窗口最大值、是否使用窗口扩大选项和时间戳选项以及服务质量等)。cdn

3.可以对运输实体资源(如缓存大小、链接中的项目等)进行分配。server

TCP链接的创建采用客户服务器方式。主动发起创建链接的应用叫作客户(Client),而被动等待链接创建的应用进程叫作服务器(server)。blog

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。it

以上的过程就是3次握手。这里一个常见的问题就是为何在A发送创建链接的请求后还须要发送一个确认报文?这是由于主要是为了不已经失效的链接请求报文段忽然又传到了B而产生错误。失效的报文主要是在出如今网络不是很通畅的时候会产生,而三次握手机制避免了这种状况会产生的问题。

TCP链接的释放

在传输结束以后,通讯双方均可以释放链接。A的应用进程先向其TCP发出链接释放报文段,并中止发送数据,主动关闭TCP链接。

图片描述

1.A将链接释放报文的终止控制位FIN设置为1,seq序列号为u。此时A的状态由ESTABLISH进入到FIN-WAIT-1。

2.B在收到这个报文以后,随即发出确认。ACK=1 seq=v ack=u+1。此时B由ESTABLISH进入到CLOSE-WAIT状态。A收到B的确认以后进入到FIN-WAIT-2。此时B的TCP服务器进程会通知高层应用进程。这个时候A到B的传输就释放了,TCP的链接处于半关闭状态。A没有数据发送到B,若B还有数据,能够发送到A。

3.B发送FIN=1 ACK=1 seq=w ack=u+1(必须重复上次的确认号)。B由CLOSE-WAIT进入到LAST-ACK状态。

4.A收到B的链接释放报文以后,发送确认ACK=1 seq=u+1 ack=w+1。此时A由FIN-WAIT-2进入到TIME-WAIT。B在收到A的确认以后由LAST-ACK进入CLOSED状态。A在2MSL(大约是4分钟)以后进入到CLOSED状态。

这里一个常见的问题就是A为何须要2MSL的等待时间。第一是为了保证A最后发送的ACK报文到达B。第二是为了当时出现上文提到的失效的报文段。由于2MSL会使本次链接产生的报文段都从网络中消失。

全文完。

相关文章
相关标签/搜索