TCP面试题之三次握手过程

TCP简介:

  1、面向连接的、可靠的、基于字节流的传输层的通信协议;

  2、将应用层的数据流分割成报文段并发送给目标节点的TCP层;

  3、数据包都有序号,对方收到则发送ACK确认,未收到则重传;

  4、使用校验和来检验数据在传输过程中是否有误;

TCP标志位(Flags):

  1、URG:紧急指针标志;

  2、ACK:确认序号标志;

  3、PSH:push标志;

  4、RST:重置连接标志;

  5、SYN:同步序号,用于建立连接过程;

  6、FIN:finish标志,用于释放连接;

TCP三次握手过程:

  1、建立连接时,客户端发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认;

  2、服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态;

  3、客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入established状态,完成三次握手;

首次握手的隐患------SYN超时问题

问题起因和分析:

  1、服务器收到客户端的SYN,回复SYN和ACK的时候未收到ACK确认

  2、服务器不断重试直至超时,Linux默认等待63秒才断开连接;(重复5次【不包括第一次】,从1秒开始,每次重试都翻倍:1+2+4+8+16+32=63秒)

针对SYN Flood的防护措施:

  1、SYN队列满后,通过tcp_syncookies参数会发SYN cookie【源端口+目标端口+时间戳组成】;

  2、若为正常连接则Client会回发SYN Cookie,直接建立连接;

 建立连接后,Client出现故障怎么办:

保活机制:

  1、向对方发送保活探测报文,如果未收到相应则继续发送;

  2、尝试次数达到保活探测数仍未收到相应则中断连接;

posted @ 2019-03-04 20:28  胡金水  阅读(1285)  评论(0编辑  收藏  举报