Skip to content

Latest commit

 

History

History
20 lines (16 loc) · 2.28 KB

190402.md

File metadata and controls

20 lines (16 loc) · 2.28 KB

TCP连接与关闭

为实现数据的可靠传输,TCP要在应用进程间建立传输连接。它是在两个传输用户之间建立一种逻辑联系,使得通信双方都确认对方为自己的传输连接端点。

建立连接

建立连接前,服务器端首先被动打开其熟知的端口,对端口进行侦听。当客户端要和服务器端建立连接时,发起一个主动打开端口的请求(该端口一般为临时端口);然后进入三次握手的过程。

TCP连接:三次握手

建立TCP连接的过程也就是我们熟悉的“三次握手”过程:

  1. 首先,请求端(客户端)发送一个包含SYN(synchronous建立联机)标志的TCP报文,表示客户端欲发起通信连接;
  2. 第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK(acknowledgement 确认)的报文,表示客户端的请求被接受;
  3. 第三步,客户端也返回一个确认报文ACK给服务器端,到此一个TCP连接完成。

TCP连接关闭:四次挥手

  1. 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
  2. 服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  3. 服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
  4. 客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

TCP连接过程会出现的问题

  1. 问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的,这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源,最终导致服务器端忙于处理攻击者伪造的 TCP 连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flooding攻击。