`
xylong
  • 浏览: 189864 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

socket编程中主动关闭VS被动关闭

阅读更多

 

 tcp中server,client都可能是主动关闭方或者被动关闭方,现阐述下两者之间的关系:

 

客户端(client)                                                服务器(server)

close()                          Fin x  ->                   读通道关闭(close_wait)

写通道关闭                     <- Ack x+1    

 

读通道关闭(time_wait)    <- Fin y                   close()

                                     ack y+1 ->              写通道关闭      

2x msl                                                          closed

closed

 

1、 客户端是调用函数close(),这时,客户端会发送一个FIN给服务器。

2、 服务器收到FIN,关闭套接字读通道,并将自己状态设置为CLOSE_WAIT(表示被动关闭),

       并返回一个ACK给客户端。

3、 客户端收到ACK,关闭套接字写通道

 

      接下来,服务器会调用close():

 

1、 服务器close(),发送一个FIN到客户端。

2、 客户端收到FIN,关闭读通道,并将自己状态设置成TIME_WAIT,发送一个ACK给服务器。

3、 服务器收到ACK,关闭写通道,并将自己状态设置为CLOSE。

4、 客户端等待两个最大数据传输时间,然后将自己状态设置成CLOSED。

 

有了上面的背景知识,对于我们系统线上一个case分析就很简单了!

首先是主动关闭日志很多,后来是被动关闭的日志

由于server端发现了大量闲置的没有Io的socket连接,有监听器在监听是否存在闲置的socket连接,就释放并关闭这些连接,time_wait就出现了,这个时候应用方客户端重启应用,释放了资源包括一些客户端连接,这个时候close_wait出现了,正好是以上日志所反映的

 

同时time_wait状态的连接是不会释放内核资源,所以服务端不要轻易close!

 

 


分享到:
评论

相关推荐

    C语言SOCKET编程FTP

    在IT行业中,C语言SOCKET编程是网络通信的基础,而FTP(File Transfer Protocol)则是互联网上广泛使用的文件传输协议。本项目是利用C语言实现的一个FTP客户端,涵盖了FTP的基本操作,如创建和删除目录、查看目录...

    Java Socket网络编程.pdf

    在这个模型中,服务器端通常处于被动等待状态,监听特定端口的连接请求,而客户端则主动发起连接。 在Java中,Socket编程主要涉及两个关键类:`ServerSocket`和`Socket`。`ServerSocket`类用于服务器端,它监听指定...

    C语言Socket简单编程指南.pdf

    3. 结构体: Socket编程中涉及多种结构体,如sockaddr用于保存套接字地址信息,addrinfo用于辅助socket函数的选择和地址转换。 4. 本机转换:程序运行时可能会遇到字节序问题,即数据在网络中的传输与在特定硬件...

    Linux Socket编程(附实例)

    在Linux Socket编程中,主要涉及以下几个关键函数: - **socket()**:创建Socket。此函数需要指定协议域(如AF_INET表示IPv4,AF_INET6表示IPv6)、Socket类型(如SOCK_STREAM代表TCP,SOCK_DGRAM代表UDP)和协议...

    c语言socket编程指南

    本文档介绍了C语言中Socket编程的基础知识,包括Socket的基本概念、Socket的结构体和常用函数等。这些知识对于理解网络编程的核心原理至关重要。虽然文档中的大部分代码已经在Linux平台和HPUX平台上使用GCC编译器...

    Linux Socket编程

    - 第三次挥手:被动关闭方发送FIN包,告知主动关闭方自己也将停止发送数据。 - 第四次挥手:主动关闭方收到FIN包后,再次发送ACK包,确认收到关闭请求,连接正式关闭。 6、实践示例 通常,一个简单的Socket通信程序...

    利用DELPHI中SOCKET实现通讯编程

    在IT行业中,网络通信是软件开发的一个重要领域,特别是在分布式系统和...而提供的"Client"和"Server"两个文件可能就是实现这一过程的具体代码示例,通过分析和学习,开发者可以更深入地了解DELPHI中的SOCKET编程实践。

    UNIX-SOCKET编程简介.doc

    然后被动关闭的一方发送FIN,主动关闭方回应ACK,最后被动关闭方等待一段时间确保所有数据传输完毕后关闭连接。 在UNIX域套接字编程中,创建Socket、绑定地址、监听连接请求、接受连接和读写数据等步骤与TCP/IP套接...

    java 网络编程-socket

    在TCP Socket编程中,开发者有一定的自由度来设置一些TCP参数,例如最大缓冲区和最大分段大小。服务器端通常有两类Socket: 1. 欢迎Socket(Welcoming socket):监听客户端的初始联系,一旦有连接请求,就会创建一...

    Linux环境下socket编程,实现简单的FTP上传下载功能

    在Linux环境下,Socket编程是构建网络应用程序的基础,它允许程序之间通过网络进行通信。FTP(File Transfer Protocol)是一种用于在互联网上进行文件传输的标准协议。本教程将介绍如何使用Linux的socket API来实现...

    FTP协议的实现 (TCP/IP 的 Socket 编程实现)

    在本项目中,我们将使用Microsoft Visual C++ 6.0作为开发环境,通过Socket编程来实现FTP协议的客户端功能,即实现FTP下载工具。 首先,理解FTP协议的基础知识至关重要。FTP协议定义了两台计算机之间的交互过程,...

    使用linux socket的基本的FTP协议实现

    在Linux系统中,利用socket编程接口可以实现FTP服务器的开发。本篇将深入讲解如何利用Linux socket来实现一个基本的FTP协议,特别是被动传输模式。 首先,我们需要了解FTP协议的基本工作流程。FTP协议主要包括两个...

    C++纯socket写的FTP服务器

    标题 "C++纯socket写的FTP服务器" 涉及到的是使用C++编程语言构建一个基于原始Socket接口的FTP(文件传输协议)...学习和分析这个程序可以帮助理解FTP服务器的实现细节,以及如何在实际项目中使用C++和Socket编程。

    C++ 纯SOCKET实现FTP客户端类

    同时,VS2008提供了C++标准库,如`&lt;winsock2.h&gt;`和`&lt;ws2tcpip.h&gt;`,用于SOCKET编程。 7. **性能优化**:虽然本项目是一个基础实现,但考虑性能优化也很重要。例如,使用异步I/O或多线程技术可以提高文件传输的效率...

    python进阶之socket模块详解.pdf

    在Python中,socket模块主要用于实现进程间的网络通信,它基于BSD UNIX的socket API,使得开发者可以方便地处理IP地址和端口号,实现不同计算机或同一计算机内不同进程间的通信。 首先,我们创建一个socket对象,...

    FTP_socket.rar_C Socket FTP_ftp socket_ftp 客户端_socket ftp

    标签中的“c___socket”指的是C语言中的Socket编程,“ftp_socket”和“ftp_客户端”指的是使用Socket实现的FTP功能,而“socket_ftp”则强调了Socket在FTP中的应用。 在“实验4 socket编程”这个文件中,可能包含...

    socket编程1

    TCP的状态转换图中,包括了如ESTABLISHED(已建立连接)、FIN_WAIT_1/2(主动关闭阶段)、CLOSE_WAIT(被动关闭阶段)和TIME_WAIT等多个状态。 套接字编程涉及几个关键函数: - `socket()`:创建一个新的套接字描述...

    FTP.rar_ftp socket_ftp wininet sock_scoket ftp_socket ftp

    在Socket编程中,可能需要使用被动模式(PASV)或主动模式(PORT)来处理数据通道的建立。 其次,FTP WinInet库是Windows API的一部分,提供了更高级别的FTP功能,简化了客户端的实现。使用WinInet,程序员不必关心...

    Linux Socket 编程简介和实现

    但在大多数客户端/服务器应用中,通常采用客户端主动发起请求,服务器被动响应的模式。具体过程如下: 1. **客户端发送请求**:客户端通过write()函数向服务器发送请求数据。 2. **服务器处理请求**:服务器通过...

    SOCKET实现FTP文件上传

    本主题将探讨如何利用SOCKET编程来实现FTP文件上传功能,这是一个基础且重要的技能,尤其对于网络编程和服务器管理的实践者。 FTP协议基于TCP/IP模型,提供了一种在不同主机间可靠地传输文件的方法。它定义了客户端...

Global site tag (gtag.js) - Google Analytics