美文网首页网络协议
2.4 从服务器断开并删除套接字

2.4 从服务器断开并删除套接字

作者: ShutLove | 来源:发表于2017-10-06 16:28 被阅读22次

    2.4.1 数据发送完毕后断开连接

    1. 协议栈在设计上允许任何一方先发起断开过程。
    2. 以服务器断开为例:
      首先,服务器一方的应用程序会调用Socket库的close程序。
      然后,服务器的协议栈会生成包含断开信息的TCP头部,就是将控制位的FIN比特设置为1。
      当收到服务器发来的FIN为1的TCP头部时,客户端协议栈会将自己的套接字标记为进入断开操作状态,然后为了告知服务器已收到FIN为1的包,客户端向服务器返回一个ACK号。
      当客户端应用程序把全部返回数据都读取完毕后,客户端应用程序会调用close来结束收据收发操作,这时客户端会向服务器发送FIN为1的包,然后服务器返回ACK号确认断开。

    2.4.2 删除套接字

    1. 通信结束之后不会立刻删除套接字而是会等待一段时间,这是为了防止误操作。
      比如客户端主动发起断开连接发送FIN,服务器返回ACK,服务器发送FIN,客户端返回ACK。如果最后客户端返回的ACK丢失了,服务器会重发FIN,而此时客户端把套接字删除了,并且这个端口被另外新启动的应用程序占用了,那么这个FIN就会错误的跑道新套接字里面,新套接字就开始执行断开操作了。
    2. 等待时间和包重传的操作方式有关。

    相关文章

      网友评论

        本文标题:2.4 从服务器断开并删除套接字

        本文链接:https://www.haomeiwen.com/subject/kdqryxtx.html