TCP的传输连接管理

TCP传输连接管理概述

  • TCP传输连接有三个阶段,即:连接建立(三次握手)、数据传送和连接释放(四次挥手)。
  • TCP连接建立都是采用客户服务器方式。
  • 主动发起连接建立的应用进程叫做客户(client)。
  • 被动等待连接建立的应用进程叫做服务器(server)。

TCP的三次握手

  • TCP连接过程中常见符号意义如下:

    • SYN---同步标记,当SYN=1,ACK=0时,表明这是一个连接请求,对方若同意建立连接,则应在响应中使SYN=1,ACk=1;
    • ACK---确认号标志位,当ACK=1时,确认号ack有效,当ACK=0时,确认号ack无效;
    • seq---序号,代表TCP连接中传送的字节流中字节的编号;
    • ack---确认号,代表期望收到对方下一个数据包的第一个数据字节的序号。
  • TCP三次握手连接过程如下:

    • 第一次握手:客户A主动发起TCP连接建立请求,将SYN置1、ACK置0、seq置为随机值x,并发送该数据包给服务器B,接着,客户A进入SYN_SENT状态;
    • 第二次握手:服务器B确认上述数据包,由SYN=1,ACK=0知道客户A发起连接请求,然后将SYN置1,ACK置1,seq置为随机值y,ack置为x+1,并发送该数据包到客户A,接着,服务器B进入SYN_RCVD状态;
    • 第三次握手:客户A确认上述数据包,将ACK置1,seq置为x+1,ack置为y+1,接着,客户A进入ESTABLISHED状态,服务器B确认数据包后也进入ESTABLISHED状态,此时,客户A与服务器B即建立连接成功,可以进行数据传送。
  • TCP三次握手示意图如下:

  • TCP为什么要有第三次握手?

    • 假设如下情况:客户A发出去的第一个连接请求报文因为某些原因延迟了较长时间才到达服务器B。这是一个已失效的报文段,不应该产生连接建立,但是服务器B收到后会误认为A再次发出一个新的连接请求,接着,服务器B发送确认报文给客户A,表示同意连接。如果只有两次握手,那么这时连接就已经建立了,但是客户A实际上并没有发出建立请求从而也不会发送数据到服务器B,而服务器B会一直等待数据接收从而浪费服务器B很多资源。如果采用了第三次握手,当服务器B收到失效的报文段以及发送确认报文到客户A之后,由于客户A实际并没有发起连接请求,因此不会发送数据到服务器B,服务器B没有收到确认数据就能知道连接没有建立,从而也不会一直在等待接收数据而白白占用资源。

TCP的四次挥手

  • TCP释放过程中常见符号及意义如下:
    • FIN---终止标志位,用来释放一个连接;当FIN=1时,表明要求释放连接;
    • ACK---确认号标志位,当ACK=1时,确认号ack有效,当ACK=0时,确认号ack无效;
    • seq---序号,代表TCP连接中传送的字节流中字节的编号;
    • ack---确认号,代表期望收到对方下一个数据包的第一个数据字节的序号。
  • TCP四次挥手过程如下:
    • 第一次挥手:客户A将FIN置1,seq置为随机值x,发送释放报文段到服务器B,接着,客户A进入FIN_WAIT-1状态;
    • 第二次挥手:服务器B将ACK置1,seq置为随机值y,ack置为x+1,发送报文段到客户A,接着,服务器B进入CLOSE_WAIT状态,客户A收到报文段后进入FIN_WAIT-2状态;
    • 第三次挥手:服务器B将FIN置1,seq置为随机值z,ack置为x+1,发送报文段到客户A,接着,服务器B进入LASK_ACK状态;
    • 第四次挥手:客户A确认报文段,将ACK置1,seq置为x+1,ack置为x+1,发送报文段到服务器B,接着客户A进入TIME_WAIT状态,等待2MSl时间后进入CLOSED状态,服务器B确认无误后也进入CLOSED状态,此时客户A和服务器B释放连接成功。
  • TCP四次挥手示意图如下:
posted @ 2018-06-15 04:30  一路一沙  阅读(930)  评论(0编辑  收藏  举报