首页 > 其他 > 详细

运输层的TCP协议

时间:2016-05-17 22:44:58      阅读:241      评论:0      收藏:0      [点我收藏+]

1.有关TCP

   TCP是工作在传输层的传输控制协议。特点:

     1>提供面向连接的服务

     2>TCP连接是点对点的

     3>提供可靠交互服务

     4>提供全双工通信

     5>面向字节流

2.TCP的运输连接管理

     TCP是面向连接的协议,运输连接是用来传送TCP报文的。运输连接有三个阶段:连接建立、数据传送和连接释放

   (1)TCP的连接建立(三次握手)

       建立连接的过程如图:

      技术分享

  假设主机A运行的是TCP客户程序,B运行的是TCP服务程序。最初两端的TCP进程都处于CLOSED状态。图中主机下面的方框分别是TCP进程所处的状态。A主动打开连接,B被动打开连接。

 1>B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求,然后服务器就处于LISTEN状态,等待客户的连接请求。如果有,立即作出响应。

   A的TCP客户进程也先创建传输控制块TCB,然后向B发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x,规定SYN报文段不能携带数据,但要消耗掉一个序号,这时TCP客户进程进入SYN-SENT(同步已发送)状态。

  2>B收到连接请求报文段之后,如果同意连接,就向A发送确认,确认时将SYN、ACK都置1,确认号ack=x+1,同时也为自己选一个序号seq=y,这个报文段也不携带数据,但同样也消耗掉一个序号。这时TCP服务器进程进入SYN-RCVD(同步收到)状态

  3> A的TCP客户进程收到B的确认之后,还要向B发送确认。将ACK置1,确认号ack=y+1,自己序号seq=x+1;x+1;ACK报文段可以携带数据,但如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍是seq=x+1,这时TCP连接已经建立。A进入ESTABLISHED(已建立连接)状态。

     B收到A的确认之后A,也进入ESTABLISHED状态。

(2)TCP的连接释放(四次挥手)

      技术分享

1> A应用进程先向其TCP发出连接释放报文段,并停止在发送数据,主动关闭TCP连接。A将报文首部的终止控制位FIN置为1,序号为seq=u,他等于前面已传送的数据的最后一个字节的序号加1,这时A进入FIN-WAIT-1状态,等待B的确认。规定FIN报文段不携带数据,但要消耗掉一个序号

2>B收到连接释放报文后即发出确认,确认号ack=u+1,自己的序号为v。等于前面已传送的数据的最后一个字节的序号加1。然后B就进入CLOSE-WAIT状态。TCP服务器进程应通知高层应用进程,因此从A到B这个方向的连接就释放了。这时的TCP连接处于半关闭状态,即A已经没有数据要发送给B了,但B若发送数据,A还接收。从B到A这个方向的连接并未关闭。这个状态可能会持续一段时间。

3>A收到来自B的确认后,就进入FIN-WAIT-2状态,等待B发出连接的释放报文段。

   B已经没有数据要发送给A了,其应用进程就通知TCP释放连接,这时B发出的报文段FIN=1,假定B序号为w,B重复上次的确认号ack=u+1,这时B就进入了LAST-ACK状态,等待A的确认。

4>A在收到B的连接释放报文段后,必须对此发出确认。将ACK置为1,ack=w+1,seq=u+1。然后进入到TIME-WAIT状态。现在TCP连接还没有释放掉,必须经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态

    B只要收到了A发出的确认,就进入CLOSED状态。

(3)TIME-WAIT--时间等待状态

    为什么要设置等待2MSL的时间?

    1>为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能丢失,因此使处在LAST-WAIT状态的B收不到已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的报文段。接着A重传一次确认,重新启动计时器,最后A和B都正常进入CLOSED状态。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段之后立即释放连接,就无法收到B重传来的FIN+ACK报文,不会再次发送确认,B就无法按正常状态进入CLOSED状态。

  2> 防止“已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK报文段之后,在经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个新的链接中不会出现这种旧的连接请求报文段。

    

 

本文出自 “输出菱形图案” 博客,请务必保留此出处http://10541571.blog.51cto.com/10531571/1774490

运输层的TCP协议

原文:http://10541571.blog.51cto.com/10531571/1774490

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!