TCP_三次握手

第一次握手:建立连接时,客户端发送syn(syn=1,Seq=X)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的包,同时自己也发送一个SYN包syn=1,Seq=Y,ack=X+1),即SYN+ACK包;此时服务器进入SYN_RECV状态(半打开状态);
   第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=Y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
      
(补充:ACK置为1,确认序列号才有效,一旦连接建立起来,ACK位总是置1。序号是针对字节的,每一个字节都有一个序号,比如:A发送一个包,序号为1,数据部分100字节,那么B确认包中的ack为101,下一次A发包时,序号为101。)
 
在上述过程中,还有一些重要的概念:
    未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=1)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
 
    Backlog参数:表示未连接队列的最大容纳数目。
 
TCP连接的攻击:SYN flood
服务器收到大量SYN置位的包,进入SYN_RECV状态,并建立大量的连接队列,而且由于没有收到ACK一直维护着这些队列,造成了资源的大量消耗而不能向正常请求提供服务。
解决方案:1.设置半打开连接上限(如果队列达到上限,将会拒绝正常服务)
          2.缩短SYN timeout
          3.设置SYN cookie
          4.使用SYN proxy
          n
 
 

你可能感兴趣的:(职场,休闲)