TCP三次握手及原理 zz[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

  确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

  PSH:推标志

  该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。

  RST:复位标志

  复位标志有效。用于复位相应的TCP连接。

  SYN:同步标志

  同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

  FIN:结束标志

  带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

  服务端处于监听状态,客户端用于建立连接请求的数据包(IP packet)按照TCP/IP协议堆栈组合成为TCP处理的分段(segment)。

  分析报头信息: TCP层接收到相应的TCP和IP报头,将这些信息存储到内存中。

  检查TCP校验和(checksum):标准的校验和位于分段之中(Figure:2)。如果检验失败,不返回确认,该分段丢弃,并等待客户端进行重传。

  查找协议控制块(PCB{}):TCP查找与该连接相关联的协议控制块。如果没有找到,TCP将该分段丢弃并返回RST。(这就是TCP处理没有端口监听情况下的机制) 如果该协议控制块存在,但状态为关闭,服务端不调用connect()或listen()。该分段丢弃,但不返回RST。客户端会尝试重新建立连接请求。

  建立新的socket:当处于监听状态的socket收到该分段时,会建立一个子socket,同时还有socket{},tcpcb{}和pub{}建立。这时如果有错误发生,会通过标志位来拆除相应的socket和释放内存,TCP连接失败。如果缓存队列处于填满状态,TCP认为有错误发生,所有的后续连接请求会被拒绝。这里可以看出SYN Flood攻击是如何起作用的。

  丢弃:如果该分段中的标志为RST或ACK,或者没有SYN标志,则该分段丢弃。并释放相应的内存。


  发送序列变量

  SND.UNA : 发送未确认

  SND.NXT : 发送下一个

  SND.WND : 发送窗口

  SND.UP : 发送优先指针

  SND.WL1 : 用于最后窗口更新的段序列号

  SND.WL2 : 用于最后窗口更新的段确认号

  ISS : 初始发送序列号

  接收序列号

  RCV.NXT : 接收下一个

  RCV.WND : 接收下一个

  RCV.UP : 接收优先指针

  IRS : 初始接收序列号

当前段变量

  SEG.SEQ : 段序列号

  SEG.ACK : 段确认标记

  SEG.LEN : 段长

  SEG.WND : 段窗口

  SEG.UP : 段紧急指针

  SEG.PRC : 段优先级


  CLOSED表示没有连接,各个状态的意义如下:

  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连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS。传送过来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST和FIN。还有超时,上面所说的都会时TCP状态发生变化。


  序列号

  请注意,我们在TCP连接中发送的字节都有一个序列号。因为编了号,所以可以确认它们的收到。对序列号的确认是累积性的。TCP必须进行的序列号比较操作种类包括以下几种:

  ①决定一些发送了的但未确认的序列号。

  ②决定所有的序列号都已经收到了。

  ③决定下一个段中应该包括的序列号。


本文关键:TCP三次握手及原理 zz
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top