TCP TIME_WAIT 详解

网友投稿 437 2022-10-16


TCP TIME_WAIT 详解

1.time_wait状态是什么简单来说:time_wait状态是四次挥手中server向client发送FIN终止连接后进入的状态。

上面图为tcp四次挥手过程 这里写图片描写叙述 能够看到time_wait状态存在于client收到serverFin并返回ack包时的状态 当处于time_wait状态时,我们无法创建新的连接,由于port被占用。

2.为什么会有time_wait状态time_wait存在的原因有两点 1.可靠的终止TCP连接。 2.保证让迟来的TCP报文段有足够的时间被识别并丢弃。

1.可靠的终止TCP连接,若处于time_wait的client发送给server确认报文段丢失的话,server将在此又一次发送FIN报文段,那么client必须处于一个可接收的状态就是time_wait而不是close状态。 2.保证迟来的TCP报文段有足够的时间被识别并丢弃,linux 中一个TCPport不能打开两次或两次以上。当client处于time_wait状态时我们将无法使用此port建立新连接,假设不存在time_wait状态,新连接可能会收到旧连接的数据。

time_wait持续的时间是2MSL,保证旧的数据能够丢弃。由于网络中的数据最大存在MSL(maxinum segment lifetime)

3.哪一方会有time_wait状态time_wait状态是一般有client的状态。

并且会占用port 有时产生在server端,由于server主动断开连接或者发生异常

4.怎样避免time_wait状态占用资源假设是client,我们一般不用操心,由于client一般选用暂时port。再次创建连接会新分配一个port。

除非指定client使用某port,只是一般不须要这么做。

假设是server主动关闭连接后异常终止。则由于它总是使用用一个知名serverport号,所以连接的time_wait状态将导致它不能重新启动。只是我们能够通过socket的选项SO_REUSEADDR来强制进程马上使用处于time_wait状态的连接占用的port。 通过socksetopt设置后,即使sock处于time_wait状态,与之绑定的socket地址也能够马上被重用。

此外也能够通过改动内核參数/proc/sys/net/ipv4/tcp_tw/recycle来高速回收被关闭的socket,从而是tcp连接根本不进入time_wait状态,进而同意应用程序马上重用本地的socket地址。TCP 状态迁移过程LISTEN:服务端已经启动一个socket,其状态处于监听状态,等待客户发起请求连接。ESTABLISHED:客户端和服务端经过三次握手建立,两个方向上连接状态都建立,状态置为ESTABLISHED客户端状态变迁:(主动端)FIN_WAIT_1: 发送FIN给服务端口。FIN_WAIT_2:收到服务端的ACK报文TIME_WAIT :收到服务端发过来的FIN报文,发送ACK报文给服务端口。主动关闭连接端,接收到服务(TIME_WAIT是主动端关闭)之后进入2MSL时间的等待CLOSE:2MSl过后,关闭进入初始化状态。服务端状态变迁:(服务端)CLOSE_WAIT:收到客户端FIN报文,给客户端发送ACK状态后,表示知道客户端要关闭连接请求,服务端可能数据还没有传送完,所以处于等待关闭状态。(CLOSE_WAIT是被动端关闭)LAST_ACK:服务端数据传输完毕,发送FIN报文给客户端,同时等待客户端发ACK报文状态CLOSE:收到客户端ACK报文后,进入初始化状态


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:为什么你的网络这么卡?什么是广域网专网
下一篇:DHCP 简析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~