计算机网络之运输层( TCP 的运输连接管理)

TCP 是面向连接的协议,即是发送数据前会先建立连接。 TCP 的运输连接,分为连接建立、数据传送和连接释放。 TCP 的运输连接管理是让运输连接的建立和释放顺利进行。连接建立,即是三次握手。连接释放,是四次挥手

  • TCP 的连接建立:
      在连接建立过程,要解决三个过程:
      (1)要使每一方知道对方的存在;
      (2)双方需要协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项等);
      (3)能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
      TCP 连接的建立,使用客户-服务器方式,称主动发起建立请求的为客户(client),被动等待的称为服务器(server)。
    计算机网络之运输层( TCP 的运输连接管理)_第1张图片
      (1)client 发出连接建立请求报文段。主要内容是,首部的同步位 SYN = 1,且选择一个初始序号 seq = x,这表明下一个报文段的第一个数据字节序号是 x+1。
      (2)server 发送确认报文段,确认报文段中,同步位 SYN 和确认位 ACK 都需要为 1,确认号是 ack = x +1;同时为自己选择了一个初始序号 seq = y。
      (3)客户机发送确认段。主要内容是,确认位 ACK = 1,确认号 ack = y+1,而自己的初始序号是 seq = y+1。
      之后发送数据开始,发送方向接收方发送第一个数据时,序号为 x+1,因为前一个确认报文段并不消耗序号。
  • TCP 连接释放:
      发出释放请求的是客户,接收释放请求的是服务器。但是会比建立连接的时候复杂一点,因为这时已经建立连接了,所以需要考虑数据是否已经完全接收到了的问题。
    计算机网络之运输层( TCP 的运输连接管理)_第2张图片
       (1)client 发出释放连接报文段,主要内容是首部的终止位 FIN 为 1,序号 seq = u,等于前面发送的最后一个数据字节的序号 + 1。注意,不是最后一次发送的序号 +1,因为最后一次发送的序号是该分组的第一个字节的序号,而这个分组是多个字节,不是一个字节呀!!!
       (2)server 发送确认报文段,主要内容是确认位 ACK = 1,确认号 ack = u+1,而这个报文段自己的序号是 seq = v,是前面已发送的最后一个字节的序号 +1。整个 TCP 处于半关闭状态,即是,client 不再发送数据,但还可以接收 server 发送的数据(确认信号还可以发,具体的数据就不发了)。
      (3)server 发出连接释放报文段(这是当 server 不再向 client 发送数据时),主要内容是,终止位 FIN = 1,并且序号仍为 v(因为前面发送的确认报文段不消耗序号),确认位ACK = 1,确认号 ack = u +1。
       (4)client 发送确认报文段。主要内容是,确认位 ACK = 1,确认号 ack = v +1,自己的序号 seq = u+1(因为根据 TCP 标准,前面发送的 FIN 报文段,要消耗一个序号)。至此,整个连接全部释放。

你可能感兴趣的:(计算机网络)