TCP三次握手与四次分手

三次握手

解释:客户端A和服务器B刚开始处于CLOSED状态,两者之间没有任何联系,A主动打开,B被动打开由
          CLOSED进入LISTEN状态,这是A发送一个SYN=1的标志位的数据包,并且数据的序列为seq=x,
          A也由CLOSED进入SYN-SENT状态,B接收到A的请求,也主动 发送SYN=1的建立连接的请求的
         数据,在B这里数据包的排序为seq=y并且发送一个确认号ack=x+1用来表示已经收到A发送的数据,
         ACK用来确认ack是有效的,B也有LISTEN转入SYN-RCVD状态,A收到B的数据,发送一个序列号
        为x+1,确认号为y+1的数据,同样ACK用来表示ack的有效性,此时A由SYN-SENT状态转入
        ESTAB-LISTEND状态,B收到A的回复,状态也转入ESTAB-LISTEND状态。 到此三次握手建立完成。

知识点:

URG :表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer )只有当
             URG=1 时才有效。

ACK :表示是否前面的确认号字段是否有效。ACK=1 ,表示有效。只有当ACK=1时 时,前面的确认号
           字段才有效。TCP 规定,连接建立后, ACK 必须为1, 带ACK 标志的TCP 报文段称为确认报文段

PSH :提示接收端应用程序应该立即从TCP 接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1 ,
           则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,
           就会一直停留在TCP 接收缓冲区中。

RST :如果收到一个RST=1 的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,
           然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST 标志的TCP
           报文段称为复位报文段

SYN :在建立连接时使用,用来同步序号。当SYN=1 ,ACK=0 时,表示这是一个请求建立连接的报文段;
           当SYN=1 ,ACK=1 时,表示对方同意 建立连接。SYN=1,说明这是一个请求建立连接或同意建立
           连接的报文。只有在前两次握手中SYN才 才置为1 ,带SYN 标志的TCP 报文段 称为同步报文段。

FIN :表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1 ,即告诉对方:“我的数据
          已经发送完毕,你可以释放连接了”,带FIN 标志的TCP报 报文段称为结束报文段。

有限状态机:

CLOSED  没有任何连接状态
LISTEN  侦听状态,等待来自远方TCP 端口的连接请求
SYN-SENT  在发送连接请求后,等待对方确认

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

ESTABLISHED:建立连接

涉及攻击:黑客制造出大量主机和服务器建立连接,在建立三次握手的时候,不给服务器发送第三次确认,
                 这样就会增大服务器的缓存压力,导致服务器无法对外提供服务。

四次挥手

解释:刚开始客户端A和服务器B都处于ESTAB-LISHED状态,是可以进行数据传输的,这是A主动关闭,
          并发送一个FIN=1,seq=u的数据,A随机进入FIN-WAIT-1状态,B收到数据后,发送一个seq=v,
          ack=u+1(表示接收到A发送的数据),ACK=1表示ack的有效性,B随机进入CLOSE-WAIT状态,
         A也进入FIN-WAIT-2状态,B此时再发送一个FIN=1,ACK=1,seq=w,ack=u+1的数据,随机进入
         LAST-ACK状态,A收到后,发送一个seq=u+1,ack=w+1,ACK=1的数据,B收到后进入CLOSE
        状态,A进入TIME-WAIT状态,2倍的MSL值后进入CLOSED状态。

知识点:

有限状态机

FIN-WAIT-1 主动关闭, 主机已发送关闭连接请求,等待对方确认

FIN-WAIT-2  主动关闭, 主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求

TIME-WAIT  完成双向传输连接关闭,等待所有分组消失

CLOSE-WAIT  被动关闭, 收到对方发来的关闭连接请求,并已确认。

LAST-ACK 被动关闭, 等待最后一个关闭传输连接确认,并等待所。

CLOSING:双方同时尝试关闭传输连接,等待对方确认。

注意:

当客户端执行主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1 状态。
若此时客户端收到服务器专门用于确认目的的确认报文段,则连接转移至FIN_WAIT_2 状态。
当客户端处于FIN_WAIT_2 状态时,服务器处于CLOSE_WAIT 状态,这一对状态是可能发生
半关闭的状态。此时如果服务器也关闭连接(发送结束报文段)则客户端将给予确认并进入
TIME_WAIT 状态。

 

posted @ 2017-09-01 18:11  JieYing  阅读(150)  评论(0编辑  收藏  举报