【 Linux 】Linux套接字简要说明

Linux套接字
    源IP地址和目的IP地址以及源端口和目标端口号的组合称为套接字。其作用于标识客户端请求的服务器和服务。

    套接字,支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点 简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
    
    非常非常简单的举例说明下:Socket=Ip address+ TCP/UDP + port。

    套接字连接的过程如同客户拨打一个电话到一个大公司(系统),接线员(服务器进程)接听电话并把它转接到你要找的部门,然后再从那里转到你要找的人(服务器套接字),然后接线员(服务器进程)再继续转接其他(客户)的电话。

    套接字有本地套接字和网络套接字两种。本地套接字是linux文件系统中的文件名,一般放在/tmp或/usr/tmp目录中,网络套接字的名字是与客户连接的特定网络有关的服务标识符(端口号或访问点),这个标识符允许Linux将进入的针对特定端口号的连接转到正确的服务器进程。

套接字通信建立过程:
    服务器端:
        1. 服务器应用程序用系统调用socket创建一个套接字。它是系统分配给服务器进程的类似文件描述符的资源。
        2. 服务器进程用系统调用bind命名套接字。然后服务器进程就开始等待客户端连接到这个命名套接字。
        3. 系统调用listen创建一个队列用来存放来自客户的进入连接。
        4. 服务器通过系统调用accept来接受客户的连接。accept会创建一个不同于命名套接字的新套接字来与这个特定客户进行通信,而命名套接字则被保留下来继续处理其他客户的连接请求。

    客户端:
        1. 调用socket创建一个未命名套接字。
        2. 调用connect与服务器建立连接,将服务器的命名套接字作为一个地址。

    例子:
        nginx服务器:
            1. 启动nginx后,nginx创建一个socket套接字,监听在80端口,此时状态为listening
            2. 当有客户端连接80端口时,系统调用accept来接受客户的连接,并创建一个与listening不同的套接字来接受客户的请求。此时,一个客户端的请求就会占用一个 >1024的端口。

            ps: Linux系统最大端口数是65535。减去1024系统端口,再减去其他一些服务端口的开销。基本保持在60000端口。也就是单台服务器建立的套接字不可能超过60000连接的理论值,如果是代理服务器,这个值则要除以2,也就是30000



posted @ 2016-06-12 15:52  hukey  阅读(4895)  评论(0编辑  收藏  举报