tcp协议的两种关闭方式

tcp协议的两种关闭方式
从TCP协议的角度来看,有两种方法可以关闭构建的TCP连接。一种是正常关闭,即四次关闭连接,另一个是关闭重置。我们通常称之为连接重置。

首先,让我们讨论一下正常关机时四波状态的变化。状态变化的主动方关闭连接是fin_wait_1 -> fin_wait_2 -> time_wait,而状态改变被动方紧密连接close_wait -> last_ack -> time_wait.during四波过程中,ACK包的协议栈自动完成,而必须用鳍包closesocket或关闭应用层发送。在正常关闭连接,recv会返回0值,并将会得到错误代码10058。

此外,在我们的日常应用中,我们的日常应用中有很多异常关闭,例如,应用程序被迫关闭,本地网络突然中断(丢弃网卡、网络电缆退出)、程序处理不合适等,都将导致连接重置。当连接重置时,将生成RST包。同时,在没有收到网络缓冲区的数据将丢失。连接后复位,发送或接收的党将得到错误代码10053(closesocket是10038),对方收到会得到错误代码10054,并将会得到错误代码10053(closesocket 10054)。

操作系统为我们提供了两个函数关闭一个TCP连接,分别closesocket和关机。通常情况下,closesocket发送一个FIN报文给对方,但也有例外。比如,一个工作线程调用recv接收数据。同时,外部closesocket被调用,从而导致连接复位和发送一个RST包的另一面。第一个包由该方自身生成。

关机可用于关闭连接在指定的方向。这个函数接受两个参数,一个是插座,另一是封闭的方向,可利用价值sd_send,sd_receive和sd_both.when方向值sd_send,无论什么样的插座是国家(recv阻塞或空闲状态),它将发送一个FIN报文给对方,并注意到这一点和closesocket之间的区别。在晚会进入fin_wait_2状态的这段时间,在close_wait状态,各方仍可以调用recv接收数据;方向值sd_receive,双连接状态没有改变,仍然在既定的状态,各方仍可以发送数据,但是,如果人调用Send方法,连接将被立即复位,并发送一个RST PAckage彼此,RST包是被动的注意和closesocket之间的差异。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部