关于TCP关闭连接的问题
网上是这么介绍的:第一阶段客户机发送完数据之后,向服务器发送一个FIN数据段,序列号为i;1.服务器收到FIN(i)后,返回确认段ACK,序列号为i+1,关闭服务器读通道...
网上是这么介绍的:
第一阶段 客户机发送完数据之后,向服务器发送一个FIN数据段,序列号为i;
1.服务器收到FIN(i)后,返回确认段ACK,序列号为i+1,关闭服务器读通道;
2.客户机收到ACK(i+1)后,关闭客户机写通道;
(此时,客户机仍能通过读通道读取服务器的数据,服务器仍能通过写通道写数据)
第二阶段 服务器发送完数据之后,向客户机发送一个FIN数据段,序列号为j;
3.客户机收到FIN(j)后,返回确认段ACK,序列号为j+1,关闭客户机读通道;
4.服务器收到ACK(j+1)后,关闭服务器写通道。
问题一:第2步后客户机写通道已关闭,怎么在第3步发送ACK?
问题二:如果第3步的ACK在传播过程中丢失了,而服务器与客户机之间的连接已被斩断,超时后服务器再重复发送FIN,客户机也收不到了。那服务器岂不是永远不能关闭写通道? 展开
第一阶段 客户机发送完数据之后,向服务器发送一个FIN数据段,序列号为i;
1.服务器收到FIN(i)后,返回确认段ACK,序列号为i+1,关闭服务器读通道;
2.客户机收到ACK(i+1)后,关闭客户机写通道;
(此时,客户机仍能通过读通道读取服务器的数据,服务器仍能通过写通道写数据)
第二阶段 服务器发送完数据之后,向客户机发送一个FIN数据段,序列号为j;
3.客户机收到FIN(j)后,返回确认段ACK,序列号为j+1,关闭客户机读通道;
4.服务器收到ACK(j+1)后,关闭服务器写通道。
问题一:第2步后客户机写通道已关闭,怎么在第3步发送ACK?
问题二:如果第3步的ACK在传播过程中丢失了,而服务器与客户机之间的连接已被斩断,超时后服务器再重复发送FIN,客户机也收不到了。那服务器岂不是永远不能关闭写通道? 展开
1个回答
展开全部
客户端发送完数据 发送一个Fin 告诉服务器发送完了,等待关闭
服务器收到 Fin后知道客户端已经发送完数据 应答ACK
服务器数据发送完毕要关闭链接 发送Fin
客户端收到Fin 知道服务器发送完毕 回复ACK 客户端关闭
服务器收到ACK 服务器关闭
如果没有收到ACK命令或者其他数据 计时器超时会自动中断连接
追问
我这样理解是否正确:客户端收到服务器的ACK之后,没有关闭写通道,等收到服务器的FIN并发送ACK之后才关闭了写通道
在连接的任何时刻,假如计时器超时都会自动中断连接吗?比方说连接建立之后双方都没有发送数据也没有发送FIN,连接也会自动中断吗?
追答
对的
客户端就是在自己发送完结束命令 然后接受到服务器的结束命令 并且返回应答 才会关闭 读写通道应该是同时的 ,基础的TCP协议没有那么复杂,单独关闭读写的可能是一些特殊的应用
只要一定时间内没有发送数据包 或者要求保持连接 计数器超时就会直接关闭链接的
就好像你电脑突然断电了,服务器不会一直等待你的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询