TCP运输连接管理

TCP是面向连接的协议,运输连接是用来传送TCP报文段的。运输连接有三个阶段:连接建立、数据传送、连接释放。在TCP连接建立过程中要解决三个问题:

  1. 要使每一方知道对方的存在;

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

  3. 能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

TCP连接的建立是采用客户服务器方式。主动发起连接建立的应用进程叫做客户(client),而被动等待连接建立的应用进程叫做服务器(sever)。

1 TCP的连接建立

假定主机A运行的是TCP客户程序,而B运行的是TCP服务器程序。最初两端的TCP都是处于CLOSED状态。A主动打开连接,B被动打开连接。



B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程A的请求。然后服务器出于LISTEN状态,等待客户A的连接请求。

  1. A的客户端进程首先创建TCB,然后向B发送连接请求报文段。这时首部中的同不好SYN = 1,同时选择一个初始序号seq = x。TCP规定,SYN(SYN = 1)报文段不能携带数据,但是要消耗一个序号。这时客户机A进入同步已发送状态(SYN-SENT)。
  2. B收到连接请求的报文段后,如果同意建立连接,则向A发送确认。在确认报文段中应当把SYN和ACK的值都置为1,确认号是ack = x + 1,同时也为自己初始化一个序号seq = y。注意该报文也不能携带数据,但是需要消耗掉一个序号。此时TCP服务器进程进入同步收到状态(SYN-RCVD)。
  3. TCP客户进程收到服务器端的确认后,还要想B发送确认。报文段的ACK置为1,确认号ack = y + 1,而自己的序号为seq = x + 1。TCP的标准规定,ACK报文段可以携带数据,如果不携带数据则不消耗序号,在这种情况下,下一个报文段的序号仍是seq = x + 1.这时TCP连接已经建立,此时A已经进入ESTABLISHED状态。当B收到确认后,也进入ESTABLISHED状态。

至此,A与B已经建立连接,我们称作“三次握手”或者“三次联络”。

2 TCP的连接释放

当数据传输结束后,通信的上方都可以释放连接。现在A和B都处于ESTABLISHED状态。


  1. A的应用进程先向其TCP发出连接释放报文段,然后停止发送数据,主动关闭TCP连接。A的连接释放报文段把FIN置为1,其序号为seq = u,它等于前面已传送过的最后一个字节的序号加1。此时A进入FIN-WAIT-1状态,等待B的确认。TCP规定,FIN不携带数据,但是要消耗掉一个序号。
  2. B收到连接释放报文段后向A发出确认,确认号是ack = u + 1,这个报文段自己的序号是v,等于B前面已传送数据的最后一个字节的序号加1。然后B进入CLOSE-WAIT状态。TCP服务器进程这时通知高层应用进程,因而从A到B这个方向的连接就释放了,这时TCP的连接处于半关闭状态,即A已经没有数据向B发送了,但是若B仍要发送数据,A依旧要接受。也就是说从B到A这个方向的连接并未关闭。
  3. A收到来自B的报文段后进入FIN-WAIT-2状态,等待B的连续释放报文。
  4. 如果B已经没有数据向A发送了,其应用进程就会通知TCP释放连接。这时B发送连续确认报文段必须使FIN = 1,现在B的序号为w(在半关闭状态,B可能又发送了一段数据)B还必须重复已经发送过的确认号ack = u + 1。这时B进入了LAST-ACK状态,等待A的确认。
  5. A在收到B的报文段后进行确认,其确认号为w + 1(TCP规定,FIN报文段需要消耗一个序号),其自己的序号为seq = u + 1。然后进入到TIME-WAIT状态。这时需要注意的是TCP连接还没有释放掉,必须经过时间等待计时器(TIME-WAIT timer)设置的2MSL(Maximum Segment Lifetime),A才进入关闭状态。MSL叫做最大报文段寿命。

上述的TCP的释放过程我们称为四次握手。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值