TCP的连接(三次握手,SYN泛洪)与终止(三次握手和四次挥手,time_wait)

TCP的的重要性我想可想而知,虽然时间较UDP慢,但他是支持全双工的面向连接的可靠传输协议,他提供的额外服务包括,流量控制(滑动窗口),差错控制,拥塞控制(慢启动曲线)等等。

以下图片来自《数据通信与网络》第四版

而对于TCP的连接和终止时其中的基础:
1、TCP的连接
三次握手
TCP的连接(三次握手,SYN泛洪)与终止(三次握手和四次挥手,time_wait)_第1张图片

这个比较简单,客户端发送SYN字段,主动打开,该字段不含数据,但是占用一个序列号,称为伪字节。服务器端发送SYN和ACK,分别是请求建立和确认字段,最后客户端发送ACK确认字段。

说点相关的其他内容:有些黑客会利用该协议进行SYN泛洪攻击,攻击者利用大量伪造的IP向服务器发送SYN字段,而服务器端发送的SYN+ACK一直到不了目的端,在这段时间内,大量的资源被占用而没有被使用,服务器耗尽资源而崩溃。我所了解到的解决方法大致有:限制半连接的数目上限,缩短无法建立连接到释放连接的时间,过滤来自不需要的源地址的数据包,或者使用cookie推迟资源分配知道完整的连接建立(STCP)。感兴趣的可以再去详细了解下。

2、TCP的终止连接
三次握手
TCP的连接(三次握手,SYN泛洪)与终止(三次握手和四次挥手,time_wait)_第2张图片

我想这种方式的终止大家见得可能比较少,但是确实存在,称为三次握手终止。和四次挥手不同,这种方式在终止的过程中不是半关闭状态(一端可以继续发送,一端可以继续接收)。
主动关闭端发送关闭请求FIN和前面数据的ACK,以及可能包含的最后需要发送出去的数据。被动端发送FIN和确认的ACK,也能能包含最后需要发送的数据段。最后主动端发送确认ACK。

四次挥手
TCP的连接(三次握手,SYN泛洪)与终止(三次握手和四次挥手,time_wait)_第3张图片

大家可能对这种方式比较熟悉,半关闭状态。可以看到在主动端发送FIN,被动端发送ACK后,被动端任然可以继续发送数据段,主动端任然可以继续接收数据,直到被动端没有需要发送的数据在发送FIN和主动端断开连接。

TCP中存在time_wait状态,就在终止连接里面而言,其存在的目的是为了防止主动关闭端的ACK的丢失,主动端在发送ACK后有time_wait状态,一般持续2MSL,一个MSL为一个数据包在通信中可能存在的最长时间。如果在这个时间内,主动端未接收到相关数据包则进入close。若ACK丢失了,则被动端重发FIN,2MSL内能保证接收到。

当然wait_time还有其他的作用,比如防止上个连接的残留数据包对该连接的影响等等,time_wait状态过多也会存在问题。具体的感兴趣可以自己去看看,知识无穷无尽呀。

你可能感兴趣的:(tcp-ip,tcp,服务器,通信)