欲与服务器通信的客户则创建一个客户套接字,然后向服务器套接字发送连接请求。服务器套接字在收到连接请求后,将在服务器机器上创建一个客户套接字,与远方的客户机上的客户套接字形成点到点的通信通道。...而原本的服务器套接字serversocket则回到其原来的监听操作上。 套接字由于其功能强大而获得了很大发展,并出现了许多种类。不同的操作系统均支持或实现了某种套接字功能。...例如按照传输媒介是否为本地,套接字可以分为本地(UNIX域)套接字和网域套接字。...首先,使用共享内存机制通信的两个进程必须在同一台物理机器上;其次,共享内存的访问方式是随机的,而不是只能从一端写,另一端读。...共享内存的缺点是管理复杂,且两个进程必须在同一台物理机器上才能使用这种通信方式。共享内存的另外一个缺点是安全性脆弱。因为两个进程存在一片共享的内存,如果一个进程染有病毒,很容易就会传给另外一个进程。
——IP地址==>唯一标识internet上的一台主机 question:主机有了IP地址后,是否足以定位进程?...Socket API 最初设计 面向BSD UNIX-Berkeley 套接字API最初由berkeley在一个国防项目中设计开发的接口 面向TCP/IP协议栈接口...该项目最初为了在Berkeley的Unix中实现TCP/IP的协议簇 事实上,现今套接字API可面向多种协议栈 目前 事实上的工业标准 绝大多数操作系统都支持 Linux/Unix...//返回值为SOCK_ERROR==>执行失败 若有多个进程共享一个套接字时,调用closesocket/close会将套接字引用计数减1,直至0才关闭套接字 若一个进程中的多个线程对一个套接字无计数...; //将服务器端流套接字置于监听状态 //返回值为0==>执行成功 //返回值为SOCK_ERROR==>执行失败 仅服务器端调用,面向连接的流套接字 设置缓存连接请求队列大小(queuesize)
NGINX的整体架构的特点是由一组进程协同工作: 主进程:负责执行特权操作,如阅读配置文件、绑定套接字、创建/通知协调(Signalling)子进程。...进程间通过共享内存的方式,来共享缓存数据、会话持久性数据(session persistence data)和其他共享资源。...NGINX工作进程会监听套接字上的事件(accept_mutex和kernel socket sharding),来决定什么时候开始工作。事件是由新的连接初始化的。...1.web服务器进程(web server process)在监听套接字上,监听新的连接(客户端发起的新比赛)。...2.事件发生在套接字上,工作进程会处理这些事件。 ●监听套接字上的事件意味着:客户端开始了一局新的游戏。工作进程创建了一个新的连接套接字。 ●连接套接字上的事件意味着:客户端移动了棋子。
; -- 多播地址 : 用于当作一组接口的标识符, 发送到多播地址的数据包被交付给由地址标识的所有接口; -- 回送地址 : 分配给回送接口的地址, 发送到回送地址的任何内容, 都将当作本地主机的IP输入...是本地机器配置的; -- 反向名称解析 : 返回IP地址对应的主机名; InetAddress 缓存 : 存储 主机名解析, 不管成功还是失败; -- 默认缓存 : 正确解析的主机名 解析结果会永久保存...; -- 指定2部分 : d.d , 最后一部份是3个字节, 放在最右边的三个字节上; -- 指定1部分 : d , 直接存储在网络地址中, 字节不用重新排列; 多播地址范围 : IPv4 生存时间 (...Socket 类的全名称 : public class Socket extends Object -- 作用 : 客户端的套接字; 套接字工作原理 : 套接字的实际工作由 SocketImpl..., 根据客户端的各种请求做某些操作; 原理 : 服务器套接字的实际操作由 SocketImpl 对象执行; 创建适合本地防火墙的套接字 : 在应用程序中, 更改 创建 SocketImpl 的 SocketImplFactory
概述 客户端和服务端的连接过程 Tcp/ip 方式:重点为IP地址和端口 命名管道和共享内存:window独有的连接方式,但是没什么鸟用,不用理会 Unix域套接字文件:如果服务端修改套接字的默认监听文件...Unix域套接字文件 不是很重要的东西,同样简单了解即可,这种连接方式有点类似于本地的线程通信,因为现代操作系统多数都是从UNIX衍生出来的,所以这种连接方式需要操作系统底层的通信支持,既然是本地线程通信那么自然需要保证客户端和服务端在同一个机器上...套接字连接比较常用的场景比如我们平时使用localhost连接或者我们指定--protocol=socket的启动参数,MySQL 服务器程序默认监听的 Unix 域套接字文件路径为/tmp/mysql.sock...,同样客户端也会默认连接这个套接字,如果我们想要修改这种默认的连接方式,我们需要作出如下的调整: 服务端:服务端在启动的时候可以指定mysqld --socket=/tmp/a.txt,这样默认监听的套接字文件就改变了...另外连接管理部分通常也有诸多限制,比如需要用户名和密码进行认证,如果mysql不在同一台机器上也可以使用SSL的加密通信方式保证mysql连接的安全。
4.最后:就让我们从这些标准开始研究,开启我们的socket编程之旅 ? TCP/IP协议族包括运输层、网络层、链路层。现在你知道TCP/IP与UDP的关系了吧。...也有人将socket说成ip+port,ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序...而程序的pid是同一台机器上不同进程或者线程的标识 五 套接字发展史及分类 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。...基于文件类型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族...()函数的扩展版本,出错时返回出错码,而不是抛出异常 公共用途的套接字函数 s.recv() 接收TCP数据 s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间时
IP地址的Netlink套接字 netlink_selinux_socket 用于接收策略载入通知,强制模式切换和清空AVC缓存的Netlink套接字 netlink_tcpdiag_socket...套接字 node 代表一个 IP 地址或一段 IP 地址的主机 packet_socket 协议在用户空间执行的原始套接字 rawip_socket 既不是 TCP 也不是 UDP 的 IP 套接字...tcp_socket TCP 套接字 udp_socket UDP 套接字 unix_dgram_socket 本地机器上(unix 域)的 IPC 数据报套接字 unix_stream_socket...本地机器上(unix 域)的 IPC 流套接字 IPC有关的客体类别 ipc 已经没有使用了 msg 消息队列中的消息 msgq 消息队列 sem 信号量 shm 共享内存段 其它杂类客体类别...setrlimit 改变进程硬性资源限制 share 允许与克隆的或派生的进程共享状态 siginh 在 execve(2)上继承信号状态 sigkill 发送 sigkill 信号 sigchld
boolean isMCGlobal() 检查多播地址是否具有全局域的实用例行程序。 boolean isMCLinkLocal() 检查多播地址是否具有链接范围的实用例行程序。...boolean isMCNodeLocal() 检查多播地址是否具有节点范围的实用例行程序。 boolean isMCOrgLocal() 检查多播地址是否具有组织范围的实用例行程序。...每个在数据报套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。...套接字的实际工作由 SocketImpl 类的实例执行。应用程序通过更改创建套接字实现的套接字工厂可以配置它自身,以创建适合本地防火墙的套接字。...服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。 服务器套接字的实际工作由 SocketImpl 类的实例执行。
套接字socket历史: 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。...因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。...基于文件类型的套接字家族: 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信...)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。...# - 检查是否有某些指定关键字并回复消息,如果发送过来的消息中还有sb字符串,那么将sb替换成alexsb,然后和你要输入的内容组合起来发送给客户端。 # 2.
命名管道和共享内存 如果我们的服务器程序和客户端程序都运行在同一台操作系统为Windows的机器上的话,我们可以下边这两种方式来通信: 使用命名管道来进行线程间通信,不过需要在启动服务器程序的命令中加上...Unix域套接字 如果我们的服务器程序和客户端程序都运行在同一台操作系统为类Unix的机器上的话,我们可以使用Unix域套接字来进行线程间通信。...连接管理 客户端程序可以采用我们上边介绍的TCP/IP、命名管道和共享内存、Unix域套接字这几种方式之一来与服务器程序建立连接,服务器程序会缓存一些线程,每当有客户端连接进来的时候,会为这个客户端程序分配一个线程来处理它发过来的请求...另外,如果客户端程序和服务器程序不运行在一台计算机上,我们还可以采用使用了SSL(安全套接字)的网络连接进行通信,来保证数据传输的安全性。...存储引擎 截止到服务器程序完成了查询优化为止,还没有真正的去访问真实的数据表,MySQL把数据的存储和提取操作都封装到了一个叫存储引擎的模块里,我们知道表是由一行一行的记录组成的,但这只是一个逻辑上的概念
AF_UNIX 同一台机器进程间通信 Type 套接字类型 SOCK_DGRAM,数据套接字,主要用于UDP协议SOCK_STREAM,流式套接字,主要用于TCP协议。 ...(买手机)2、bind() 绑定IP和Port(插卡)3、listen() 使套接字由主动变为被动连接,即开启监听模式(设置一个响铃模式)4、accept() 等待客户端的连接5、recv/send 接收...1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务listen后的套接字是被动套接字,用来接收新的客户端的连接请求的,而accept返回的新套接字是标记这个新客户端的关闭listen后的套接字意味着被动套接字关闭了...地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP...局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。
译者 | 明知山 策划 | Tina 最新版本的 Docker Desktop 实现了套接字挂载权限以增强容器隔离性,更新了错误管理以提升效率和可靠性,集成了 Moby 26,并通过同步文件共享加快了文件操作速度...在最新的 4.29 版本中,ECI 通过阻止未经批准的尝试将其绑定到容器中来加固 Docker 引擎套接字。...Docker 引擎套接字是容器管理的一个关键组件,历来是潜在安全风险的载体。未经授权的访问可能会导致恶意活动,例如供应链攻击。...最后提一下,新版 Docker Desktop 还通过同步文件共享将文件操作速度提升了 2 至 10 倍。...同步文件共享只是保持与主机文件系统同步的文件缓存,使用 Mutagen 文件同步引擎实现双向传播,延迟极低。这种提高性能的代价是主机和虚拟机缓存都需要付出存储成本。
UNIX用户进程与网络协议的交互作用比用户进程与传统的I/O设备相互作用复杂得多。首先,进行网络操作的两个进程钥纪纪同机器上,如何建立它们之间的联系?...因此,每一个标准服务器都拥有一个全局公认的端口(即周知口,well-known port),即使钥纪纪同机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。...TCP和UDP均规定,小于256的端口号才能作保留端口。 地址 网络通信中通信的两个进程分别钥纪纪同的机器上。...addr 指向客户方套接字地址结构的指针,用来接收连接实体的地址。addr的确切格式由套接字创建时建立的地址族决定。addrlen 为客户方套接字地址的长度(字节数)。...= EINPROGRESS)) { /* 如果错误代码是EWOULDBLOCK和EINPROGRESS,则不用关闭套接字,因为系统将在之后继续为套接字建立连接,连接是否建立成功可用select()函数来检测套接字是否
UNIX用户进程与网络协议的交互作用比用户进程与传统的I/O设备相互作用复杂得多。首先,进行网络操作的两个进程在不同机器上,如何建立它们之间的联系?...因此,每一个标准服务器都拥有一个全局公认的端口(即周知口,well-known port),即使在不同的机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。...TCP和UDP均规定,小于256的端口号才能作保留端口。 2)地址 网络通信中通信的两个进程分别在不同的机器上。...select()函数来检测套接字是否“可写”来确定。...参数addr: 指向客户方套接字地址结构的指针,用来接收连接实体的地址。addr的确切格式由套接字创建时建立的地址族决定。 参数addrlen: 为客户方套接字地址的长度(字节数)。
每个NGINX工作者进程都使用NGINX配置进行初始化,并由主进程提供一组监听套接字。 NGINX工作者进程首先等待监听套接字上的事件(accept_mutex和内核socket分片)。...Web服务器进程监听套接字上的新连接(由客户端发起的新游戏)。 当它得到一个新游戏,它玩这个游戏,阻塞每次移动以等待客户的回应。...事件发生在套接字上,工作者进程处理它们: 监听器上的事件意味着客户端已经开始了一个新的象棋游戏。工作者进程创建一个新的连接套接字。...连接套接字上的事件意味着客户端已经进行了新的移动。工作者进程迅速回应。 一名工作者进程绝对不会阻塞网络流量,等待其“对手”(客户端)回应。...新的NGINX主进程与原始主进程并行运行,它们共享监听套接字。这两个进程都是活动的,它们各自的工作进程处理流量。然后,您可以向旧的主进程及其工作者进程通知其正常退出。
每个工作进程都以非阻塞方式处理多个连接,从而减少了上下文切换的数量。 每个工作进程都是单线程的,并且独立运行。这些进程使用共享内存进行通信,以存储共享缓存数据、会话持久性数据和其他共享资源。...NGINX 工作进程首先等待侦听套接字(accept_mutex和内核套接字分片)上的事件。事件(Event)一旦有新的传入连接活动就会启动。...image.png Web 服务器进程通过侦听套接字侦听新连接(新连接由客户端浏览器发起)。 当有客户端浏览器发起请求时,Web服务器就会进行响应并进入到阻塞状态。...一旦套接字上发生事件,worker进程就会这样进行处理: 监听套接字上的事件意味着客户端开始了新的请求。 连接套接字上的事件意味着客户端的连接发生了变化。...一个新的 NGINX 主进程与原来的主进程并行运行,它们共享监听套接字。两个进程都处于活动状态,它们各自的工作进程处理流量。最后旧的master 及其worker进程以优雅的方式退出。
若FIFO的最后一个写进程关闭该FIFO,则为FIFO的读进程产生文件结束标识 PIPE_BUF说明了可被原子写到FIFO的最大数据量 FIFO的用途 由shell命令使用,以便将数据从一条管道线传到另一条...表示根据套接字类型默认选择协议 关闭套接字:close shutdown:禁止套接字上的输入/输出,可只关闭一个方向 2....但是sendto允许在勿连接到套接字上指定一个目标地址 4.2 recv ?...套接字选项 5.1 套接字选项包括 通用选项,工作在所有套接字类型上 在套接字层次管理的选项,但是依赖底层协议的支持 特定与某种协议的选项,为某个协议独有 5.2 设置套接字的函数 ? 6....UNIX域套接字 用于在同一台机器上运行的进程之间通讯
由于线程开销相对进程来说小的多,而且线程共享进程的部分资源,因此线程比进程更轻量级,更高效。...epoll 虽然连接数有上限,但是很大,1G内存的机器上可以打开10万左右的连接,2G内存的机器可以打开20万左右的连接 2....NGINX工作进程会监听套接字上的事件(accept_mutex和kernel socketsharding),来决定什么时候开始工作。事件是由新的连接初始化的。...工作进程在监听套接字和连接套接字上等待事件。 2. 事件发生在套接字上,工作进程会处理这些事件。 监听套接字上的事件意味着:客户端开始了一局新的游戏。工作进程创建了一个新的连接套接字。...连接套接字上的事件意味着:客户端移动了棋子。工作进程会迅速响应。 工作进程从不会在网络上停止,它时时刻刻都在等待其“对手”(客户端)做出回应。
1.简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 -- 套接字通道。在展开说明之前,咱们先来聊聊套接字的由来。...套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为Berkeley sockets。...所以我们的 Java 语言对上面的步骤进行了封装,方便使用。比如我们今天要讲的套接字通道就比原生的接口好用的多。好了,关于 socket 的简介先说到这,接下进入正题吧。...本文将介绍 TCP 网络套接字通道的使用,并在最后实现一个简单的聊天功能。至于 UDP 类型的通道,大家可以自己看看。...但是 IO 是否已完成,则需要用户自己时不时的去检测,这样实际上还是会浪费 CPU 资源。 关于 IO 模型相关的知识,大家可以参考我之前的一篇文章I/O模型简述 ,这里不再赘述。
我们通过调用模块中已经实现的方法建立两个进程之间的连接和通信。 也有人将socket说成ip+port,因为ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序。...因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。...套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的 基于文件类型的套接字家族 套接字家族的名字:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器...udp协议 .TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。...UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。
领取专属 10元无门槛券
手把手带您无忧上云