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
一: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
相关文章推荐
- 加菲的iOS笔记(02):网络(待续)
- QT5在VS2013中找不到QtNetwork或QTcpSocket或QTcpSocket等头文件
- HDU 4407 12年金华网络赛H题(容斥原理)
- ionic入门教程第六课-从服务器请求数据的几种方式$http.get()、jsonp()分别和callback、$q的组合
- IOS开发之—— 在AFN基础上进行的网络请求的封装
- IIS架构与HTTP请求处理流程
- Android 如何用HttpClient 以Post方式提交数据并添加http头信息
- 3116 高精度练习之加法——http://codevs.cn/problem/3116/
- HttpClient中头部Header的使用
- Hyenae:网络数据包生成器!!!
- HttpClient配置
- POJ 2112 Optimal Milking 【网络流】【二分】【最短路】
- 基于R+Oracle的海洋浮标数据显示系统(二)——网络爬虫程序和自动导入
- http常用状态码说明
- iOS 使用ASIHTTPRequest 发送Webservice请求
- 如何计算UDP/TCP检验和checksum
- Android中的几种网络请求方式详解
- TCP连接关闭时不发FIN包的奇怪行为分析
- Android网络编程概述
- IHttpModule接口