首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
一条tcp连接,主动关闭的一方不可能出现的连接状态是()
[单选题]
一条tcp连接,主动关闭的一方不可能出现的连接状态是()
CLOSE_WAIT
FIN_WAIT2
TIME_WAIT
FIN_WAIT1
查看正确选项
添加笔记
求解答(15)
邀请回答
收藏(697)
分享
7个回答
添加回答
44
JustYoung
发表于 2016-02-29 11:49:17
回复(1)
8
翼之薰
1)当客户端没有主动close的时候就断开连接,即客户端发送的fin丢失或者失败:
1:这时候若客户端断开的时候发送了FIN包,则服务端将会处于CLOSE_WAIT状态;2:
这时候若客户端断开的时候未发送FIN包,则服务端处还是显示ESTABLISHED状态
2) 当client想要关闭它与server之间的连接。client(某个应用进程)首先调用
close
主动关闭连接,这时TCP发送一个FIN M;client端处于
FIN_WAIT1
状态。
3) 当server端接收到FIN M之后,执行被动关闭。对这个FIN进行确认,返回给client ACK。当server端返回给client ACK后,client处于
FIN_WAIT2
状态,server处于
CLOSE_WAIT
状态。它的接收也作为文件结束符传递给应用进程,因为FIN的接收 意味着应用进程在相应的连接上再也接收不到额外数据;
4) 一段时间之后,当server端检测到client端的关闭操作(read返回为0)。接收到文件结束符的server端调用
close
关闭它的socket。这导致server端的TCP也发送一个FIN N;此时server的状态为last——ack
.
5)当client收到来自server的FIN后 。 client端的套接字处于
TIME_WAIT
状态,它会向server端再发送一个ack确认,此时server端收到ack确认后,此套接字处于CLOSED状态。
发表于 2015-10-26 16:34:01
回复(4)
1
弹指江山
Close_wait是被动关闭的状态
发表于 2016-08-26 10:54:50
回复(0)
12
Doooo
介绍一下
TCP
连接建立与关闭过程中的状态。
TCP
连接过程是状态的转换,促使状态发生转换的因素包括用户调用、特定数据包以及超时等,具体状态如下所示:
CLOSED
:初始状态,表示没有任何连接。
LISTEN
:
Server
端的某个
Socket
正在监听来自远方的
TCP
端口的连接请求。
SYN_SENT
:发送连接请求后等待确认信息。当客户端
Socket
进行
Connect
连接时,会首先发送
SYN
包,随即进入
SYN_SENT
状态,然后等待
Server
端发送三次握手中的第
2
个包。
SYN_RECEIVED
:收到一个连接请求后回送确认信息和对等的连接请求,然后等待确认信息。通常是建立
TCP
连接的三次握手过程中的一个中间状态,表示
Server
端的
Socket
接收到来自
Client
的
SYN
包,并作出回应。
ESTABLISHED
:表示连接已经建立,可以进行数据传输。
FIN_WAIT_1
:主动关闭连接的一方等待对方返回
ACK
包。若
Socket
在
ESTABLISHED
状态下主动关闭连接并向对方发送
FIN
包(表示己方不再有数据需要发送),则进入
FIN_WAIT_1
状态,等待对方返回
ACK
包,此后还能读取数据,但不能发送数据。在正常情况下,无论对方处于何种状态,都应该马上返回
ACK
包,所以
FIN_WAIT_1
状态一般很难见到。
FIN_WAIT_2
:主动关闭连接的一方收到对方返回的
ACK
包后,等待对方发送
FIN
包。处于
FIN_WAIT_1
状态下的
Socket
收到了对方返回的
ACK
包后,便进入
FIN_WAIT_2
状态。由于
FIN_WAIT_2
状态下的
Socket
需要等待对方发送的
FIN
包,所有常常可以看到。若在
FIN_WAIT_1
状态下收到对方发送的同时带有
FIN
和
ACK
的包时,则直接进入
TIME_WAIT
状态,无须经过
FIN_WAIT_2
状态。
TIME_WAIT
:主动关闭连接的一方收到对方发送的
FIN
包后返回
ACK
包(表示对方也不再有数据需要发送,此后不能再读取或发送数据),然后等待足够长的时间(
2MSL
)以确保对方接收到
ACK
包(考虑到丢失
ACK
包的可能和迷路重复数据包的影响),最后回到
CLOSED
状态,释放网络资源。
CLOSE_WAIT
:表示被动关闭连接的一方在等待关闭连接。当收到对方发送的
FIN
包后(表示对方不再有数据需要发送),相应的返回
ACK
包,然后进入
CLOSE_WAIT
状态。在该状态下,若己方还有数据未发送,则可以继续向对方进行发送,但不能再读取数据,直到数据发送完毕。
LAST_ACK
:被动关闭连接的一方在
CLOSE_WAIT
状态下完成数据的发送后便可向对方发送
FIN
包(表示己方不再有数据需要发送),然后等待对方返回
ACK
包。收到
ACK
包后便回到
CLOSED
状态,释放网络资源。
CLOSING
:比较罕见的例外状态。正常情况下,发送
FIN
包后应该先收到(或同时收到)对方的
ACK
包,再收到对方的
FIN
包,而
CLOSING
状态表示发送
FIN
包后并没有收到对方的
ACK
包,却已收到了对方的
FIN
包。有两种情况可能导致这种状态:其一,如果双方几乎在同时关闭连接,那么就可能出现双方同时发送
FIN
包的情况;其二,如果
ACK
包丢失而对方的
FIN
包很快发出,也会出现
FIN
先于
ACK
到达。
编辑于 2016-03-16 17:04:08
回复(2)
2
xxxxxxxxxxxxxxxa
大杀器,每次看TCP状态转换都要重新看看此图,主动close的状态可能不经过FIN_WAIT_2
发表于 2018-07-02 20:44:55
回复(1)
0
俞鱼鱼鱼鱼鱼
可以看印象笔记,我记录了
发表于 2017-02-19 20:11:17
回复(0)
0
天真的德鲁伊
TCP建立连接过程中出现的状态: LISTEN、SYN-SENT、SYN_RCVD、ESTABSHED
TCP断开连接过程中出现的状态: ESTABLISHED、FIN-WAIT-1、CLOSE-WAIT、FIN-WAIT-2,、LAST-ACK、TIME-WAIT
发表于 2016-08-09 15:39:42
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
前端开发
数据
运维/技术支持
测试
后端开发
客户端开发
网络基础
来自:
网易笔试练习卷
难度:
7条回答
697收藏
23767浏览
热门推荐
相关试题
有三个关系R,S和T如下图所示,则...
数据库
SQL+MySQL
测试
后端开发
客户端开发
前端开发
人工智能/算法
数据
运维/技术支持
评论
(12)
以下是java concurren...
Java
评论
(157)
来自
网易笔试练习卷
下列关于链接描述,错误的是 。
Linux
Linux
评论
(19)
来自
网易笔试练习卷
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题