前置:https://blog.csdn.net/jaihk662/article/details/80539626
TCP连接的建立
采用三次握手建立连接
- 一方(server)被动地等待一个进来的连接请求
- 另一方(the client)通过发送连接请求,设置一些参数
- 服务器方回发确认应答
- 应答到达请求方,请求方最后确认,连接建立
详细过程:
- 第一次握手:Host1首先发送一个连接请求数据段,这个特殊的数据段叫SYN(请求同步),包含了一个初始序列号X,它是随机产生的,控制位SYN等于1,ACK等于0
- 第二次握手:Host2收到了Host1的SYN后会回发一个连接应答,也叫SYN,里面包含了一个初始序列号Y,这个初始序列号是Host2随机产生的,控制位SYN等于1,ACK也等于1,同时它的确认号等于X+1,表示对host1的X号字节的确认
- 第三次握手:当连接应答到达Host1,Host1发送最后的确认,序列号等于X+1,确认号等于Y+1,控制位SYN等于0,ACK等于1,这是第三次握手信息,当第三次握手信息到达对方的时候,这个连接就建立起来了
在这个过程中,双方交换了一个最重要的参数:初始序列号,这个可以用来跟踪后续交换的每一个字节,也就是说后续的字节的编号就是以这个初始序列号作为基础的
重复连接请求CR
重复CR与重复ACK
SYN泛洪导致DoS攻击(伪造源IP)
数据传输开始后可能有两个原因导致阻塞
- 快的机器向慢的机器发送数据
- 多台机器同时向一台机器发送数据
假设有个攻击者想攻击一台Web server,他的方法如下:
控制一些机器,并在上面安装一些agent,这个agent可以向被攻击的服务器不断地发送第一次握手信息,但是在这个SYN里面它使用了一个伪造的,并不存在的源IP地址
→这样当第一次握手信息到达被攻击服务器的时候,服务器会对它进行处理回发第二次握手信息,并且等待第三次握手信息的到来,然而因为第二次握手信息无法到达发送者,所以这个第三次握手信息服务器一辈子都等不来,这样被攻击者会挂起很多的进程在这里等待,最终因为资源耗尽而瘫痪,无法提供正常的服务