当终止协议的时候,tcp进行了4次握手,那这4次握手有是怎么回事呢?
由于Tcp连接是进行全双工工作的,因此每个方向都必须单独进行关闭,这个原则是当一方完成他的数据发送的时候就发送一个FIN来终止这个方向的连接,收到这个FIN意味着这个方向上没有数据的流动,一个TCP连接在收到这个FIN之后还能发送消息,首先执行关闭的一方进行主动的关闭,而另一方进行被动的关闭 。1:TCP发送一个FIN,用来关闭客户到服务端的连接 。2:服务端收到这个FIN,他发回一个ACK,确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号 。3:服务端发送一个FIN到客户端,服务端关闭客户端的连接 。4:客户端发送ACK报文确认,并将确认的序号+1,这样关闭完成 。
那么为什么是4次挥手呢?可能有人会有疑问,tcp我握手的时候为何ACK和SYN是一起发送 。挥手的时候为什么是分开的时候发送呢,原因是TCP的全双工模式,接收到FIN意味着没有数据发送过来了,但是还可以继承发送数据 。
3次握手过程的状态:listener:这个很好理解,就是服务端的某个socket处于监听状态,可以接收连接了 。
syn_send:当某个socket执行connect的时候,首先发送SYN报文,因此也进入了SYN_SEND状态,并等待服务端发送过来的报文,syn_send表示客户端已发送SYN报文 。syn_rcvd:这个状态与SYN_SEND状态差不多,表示接收了SYN报文,这个状态是服务器端的socket在建立tcp连接是的三次握手中的一个中间状态,很短暂,当客户端收到ACK报文的时候,表示连接确立,进入established状态 。
【可信网站验证 可信身份认证系统】4次挥手的状态:FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文 。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态 。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该立刻回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时经常可以用netstat看到 。(主动方)
FIN_WAIT_2:上面已经具体解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你(ACK信息),稍后再关闭连接 。(主动方)
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了 。假如FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态 。(主动方)
CLOSING(比较少见): 这种状态比较特别,实际情况中应该是很少见,属于一种比较罕见的例外状态 。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文 。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文 。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是假如双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接 。
CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭 。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态 。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,假如没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接 。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接 。(被动方)
- 想做个网站 怎样做一个网站平台
- 便宜的补水仪可信吗
- 最好的网上购物网站:网上购物哪个平台比较好?
- 樱花动漫进不去,哪个网站可以免费看动漫?
- 在线免费观看a:A站/B站大批电影被下架,还有什么好用的免费影视网站么?
- 顶级HIV约会网站 外国同性恋网站
- 买家电哪个网站好:要买电器,网上哪里最好?
- 买家电哪个网站好:为什么买家电都选京东和苏宁,选天猫的比前两者少很多?
- youtube官网为什么打不开,为什么国内没有像YouTube一样一家独大的视频网站?
- 虚拟短信,快速使用虚拟短信验证码接收平台接收验证码方法?