您的位置:首页 > 理论基础 > 计算机网络

TCP三次握手和漏洞解决

2016-04-11 19:40 393 查看
tcp三次握手

一:TCP建立过程

1.服务器先创建TCB(传输控制块),准备接受客户端的连接请求,然后服务器处于listen状态

2.客户端创建TCB,准备发送请求连接报文段,此时首部的同步位syn=1(syn不携带数据,所以要消耗一个序列号),选择一个初始序号seq=x,然后这时候,客户端从closed状态->syn-sent(同步已发送)状态。

3.服务器接收请求报文,同意连接之后,则向客户端发送确认报文,此时确认报文同部位syn=1,ACK=1,

确认号ack=x+1,但是syn=1,会消耗一个序号,所以要设置seq=y。此时服务器的状态是syn-rcvd(同步已接收)。

4.客户端接收确认报文,还要向服务器发送确认报文,确认报文ACK=1,确认号为ack=y+1,因为ACK可以携带数据,不需要消耗序号。发送完之后,这时候客户端处于established状态

5.服务器收到确认报文,这时候也处于了established状态。

PS:同步位syn=1,不携带数据段,所以需要消耗一个序列号,而ACK可以携带数据段。

二:为什么客户端最后一次还需要发送一次确认。

这主要为了防止已失效的连接请求报文段突然传到服务端,因而产生错误。

三:TCP三次握手的缺陷

    

    1.SYN FLOOD攻击

    SYN-FLOOD是一种常见的DDos攻击,拒绝服务攻击。通过网络服务所在的端口发送大量伪造原地址的攻击报文,发送到服务端,造成服务端上的半开连接队列被占满,从而阻止其他用户进行访问。

    它的数据报特征是大量syn包,并且缺少最后一步的ACK回复。

    原理:攻击者首先伪造地址,对服务器发起syn请求,服务器回应syn+ACK,而真实的IP会认为我没有发送请求,不做回应,而服务端没有收到回应,服务器就不知道是否发送成功,默认情况下重试5次 syn_retries,这样的话,对于服务器内存和带宽有很大的消耗。

    2.解决SYN FLOOD方法

    (1).无效连接监控

    不停监视半开连接和不活动连接,当半开连接数和不活动连接数到达一定值时候,就释放系统资源。

    伤敌1000,自损8000

    (2).延缓TCB方法

    SYN FLOOD的关键是利用了,syn数据报一到,系统就分配TCB资源。

    那么我们有两种方法资源问题

    Syn cache

    这种技术在收到Syn时不急着分配TCB,而是先回应一个ACK报文,并在一个专用的HASH表中保存这种连接,直到收到正确的ACK,才分配TCB。

    (3).Syn Cookie

    用一种特殊的算法生成sequence number,算法考虑到对方的信息和己方信息,收到对方的ACK报文后,验证之后才决定是否生成TCB
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: