TCP状态机、标志位、序列号学习(一)

来源:互联网 发布:java开发工程师部门 编辑:程序博客网 时间:2024/06/06 03:37

       最简单的TCP状态机演变,当然是大学时期,几乎人人都知道的TCP三次握手:
       SYN->SYN,ACK->ACK
       很显然,上面的说法过于简单了,如果对TCP的理解,仅仅局限于此的话,很难在协议分析中获取更多的线索。很有必要详细了解一下,看这幅图先:

       很复杂的状态转换,是吧?三次握手,呵呵,理解的过于肤浅了,握手确实只有三步,但是握手之后了,如何说话?通信结束时,如何分手?这都是需要了解的。

      在了解如上的过程前,我们需要理解上图出现的各个状态的意义。

标志位

URG:头部中的紧急指针部分应该被检查
     此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据。

ACK:确认号应该被检查
     此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1,为1的时候表示应答域有效,反之为0。

PSH:接受者应该尽快将数据交给下一层处理
     这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队。

RST:连接应该被重置
     这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包。

SYN:初始化一个连接
     表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK =0;连接被相应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来,就表明这台主机存在这个端口;但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功将导致被扫描的机器消耗资源,因此一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手。

FIN:发送方(应该是连接双方)完成数据传送
     表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志位的TCP 数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。当一个FIN标志的TCP数据包发送到一台计算机的特定端口,如果这台计算机响应了这个数据,并且反馈回来一个RST标志的TCP包,就表明这台计算机上没有打开这个端口,但是这台计算机是存在的;如果这台计算机没有反馈回来任何数据包,这就表明,这台被扫描的计算机存在这个端口。

PS:还有一种数据包,不包含任何标志位,可以称为Null数据包,计算机收到NULL的数据包(未试验),将回应一个FIN标志的TCP数据包。

状态机

LISTEN:侦听来自远方的TCP端口的连接请求

SYN-SENT:在发送连接请求后等待匹配的连接请求

SYN-RECEIVED:在收到和发送一个连接请求后等待对连接请求的确认

ESTABLISHED:代表一个打开的连接,数据可以传送给用户

FIN-WAIT-1:等待远程TCP的连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:从远程TCP等待连接中断请求

CLOSE-WAIT:等待从本地用户发来的连接中断请求

CLOSING:等待远程TCP对连接中断的确认

LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:没有任何连接状态

      好,现在我们可以对照上图来解释下TCP的状态演变过程了,分为三个阶段

阶段一:建立TCP连接
      TCP建立连接,也就是我们常说的三次握手,它需要三步完成。在 TCP 的三次握手中,发送第一个 SYN 的一端执行的是主动打开。而接收这个 SYN 并发回下一个 SYN 的另一端执行的是被动打开。
      结合最上面的TCP状态图,我们提取建立TCP连接的部分出来详细说明:

 

 

 

 

      详细步骤如下:
       第 1步:客户端向服务器发送一个同步数据包请求建立连接,该数据包中,初始序列号是客户端随机产生的一个值(假设为J),确认号是 0;参考报文:


      第 2步:服务器收到这个同步请求数据包后,会对客户端进行一个同步确认。这个数据包中,序列号是服务器随机产生的一个值(假设为K),确认号是客户端的初始序列号J+1;参考报文:


      第 3步:客户端收到这个同步确认数据包后,再对服务器进行一个确认。该数据包中,序列号是上一个同步请求数据包中的确认号值J+1,确认号是服务器的初始序列号K+1。参考报文:

阶段二:传输TCP数据

  百度文章有长度限制,担心出问题,见——TCP状态机、标志位、序列号学习(二)吧!

阶段三:关闭TCP连接

……

原创粉丝点击