socket - 套接字

A network socket is an internal endpoint for sending or receiving data within a node on a computer network. Concretely, it is a representation of this endpoint in networking software (protocol stack), such as an entry in a table (listing communication protocol, destination, status, etc.), and is a form of system resource.
网络套接字是用于在计算机网络上的节点内发送或接收数据的内部端点。具体地说,它是网络软件 (协议栈) 中端点的表示,例如表中的条目 (列出通信协议、目的地、状态等),并且是系统资源的一种形式。

concretely ['kɑnkrɪtli]:adv. 具体地
analogous [ə'næləgəs]:adj. 类似的,同功的,可比拟的
strain [streɪn]:n. 张力,拉紧,负担,扭伤,血缘 vi. 拉紧,尽力 vt. 拉紧,滥用,滤去,竭力

The term socket is analogous to physical female connectors, communication between two nodes through a channel being visualized as a cable with two male connectors plugging into sockets at each node. Similarly, the term port (another term for a female connector) is used for external endpoints at a node, and the term socket is also used for an internal endpoint of local inter-process communication (IPC) (not over a network). However, the analogy is strained, as network communication need not be one-to-one or have a dedicated communication channel.
术语套接字类似于物理母连接器,通过信道将两个节点之间的通信视为电缆,其中两个公连接器插入每个节点的插座。类似地,术语端口 (女性连接器的另一个术语) 用于节点处的外部端点,术语套接字也用于本地进程间通信 (IPC) 的内部端点 (不通过网络)。然而,类比是勉强的,因为网络通信不需要是一对一的或具有专用的通信信道。

在计算机科学中,网络套接字 (Network socket),亦称网络套接字、网络接口、网络插槽,是计算机网络中行程间数据流的端点。使用以网际协议 (Internet Protocol) 为通信基础的网络套接字,称为网际套接字 (Internet socket)。因为网际协议的流行,现代绝大多数的网络套接字,都是属于网际套接字。

socket 是一种操作系统提供的进程间通信机制。

在操作系统中,通常会为应用程序提供一组应用程序接口 (API),称为套接字接口 (socket API)。应用程序可以通过套接字接口,来使用网络套接字,以进行数据交换。远程的套接字地址,以及本地的套接字地址完成连线后,再加上使用的协议 (protocol),这个五元组 (five-element tuple),作为套接字对 (socket pairs),之后就可以彼此交换数据。在同一台计算机上,TCP 协议与 UDP 协议可以同时使用相同的 port 而互不干扰。操作系统根据套接字地址,可以决定应该将数据送达特定的行程或线程。

进程之间的连接是通过套接字或信口构成的。

网络上的两个程序通过一个双向的通信连接实现数据的交换,连接的一端称为一个 socket。

建立网络通信连接至少要一对端口号 (socket)。socket 本质是编程接口 (API),对 TCP/IP 的封装,TCP/IP 也要提供可供程序员做网络开发所用的接口,这就是 socket 编程接口。HTTP 是轿车,提供了封装或者显示数据的具体形式,Socket 是发动机,提供了网络通信的能力。

socket 原义是孔或插座。作为 UNIX 的进程通信机制,亦称作套接字,用于描述 IP 地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。

在 Internet 上的主机一般运行多个服务软件,同时提供多种服务。每种服务都打开一个 socket,并绑定到一个端口上,不同的端口对应于不同的服务。socket 正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供 220 伏交流电,有的提供 110 伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

socket 亦称套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。

1. introduction

一个完整的 socket 有一个本地唯一的 socket 号,由操作系统分配。

socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的 socket 系统调用。客户随机申请一个 socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个 socket 号。服务器拥有全局公认的 socket,任何客户都可以向它发出连接请求和信息请求 (相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。

socket 利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。假如通信双方没有任何一方的 socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。

socket 类似于电话插座,电话的通话双方相当于相互通信的 2 个进程,区号是它的网络地址。区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于 socket 号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个 socket。同时要知道对方的号码,相当于对方有一个固定的 socket。然后向对方拨号呼叫,相当于发出连接请求 (假如对方不在同一区内,要拨对方区号,相当于给出网络地址)。假如对方在场并空闲 (相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向 socket 发送数据和从 socket 接收数据。通话结束后,一方挂起电话机相当于关闭 socket,撤消连接。

在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是不透明的,这也与 socket 机制非常相似。socket 利用网间通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,就满足了。

socket 实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。

socket ['sɒkɪt]:n. 插座,窝,穴,牙槽 vt. 给...配插座

2. 连接过程

根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

  • 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
  • 客户端请求:指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
  • 连接确认:指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

3. Example

This example, modeled according to the Berkeley socket interface, sends the string “Hello, world!” via TCP to port 80 of the host with address 1.2.3.4. It illustrates the creation of a socket (getSocket), connecting it to the remote host, sending the string, and finally closing the socket:
这个例子是模拟 Berkeley 套接字接口,我们通过 80 端口发送 hello,world 到 1.2.3.4 的主机上。下方代码演示了创建接口、连接远程主机、发送数据和关闭接口的过程。

Socket mysocket = getSocket(type = "TCP")
connect(mysocket, address = "1.2.3.4", port = "80")
send(mysocket, "Hello, world!")
close(mysocket)

References

https://en.wikipedia.org/wiki/Network_socket

socket - 套接字相关推荐

  1. day7 面向对象进阶、socket套接字

    文章目录 1. 静态方法.类方法 1.1 静态方法 1.2 类方法 2. 属性方法 3. 类的一些成员方法 4. 反射 5. 异常处理 6. socket 套接字 1. 静态方法.类方法 1.1 静态 ...

  2. 三、初识Socket套接字结构体

    一.初识Socket套接字结构体 1.通用套接字结构体类型 struct sockaddr{sa_family_t sa_family; //协议簇char sa_data[14]; //协议簇数据} ...

  3. 基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程

    基于UDP协议 的socket套接字编程 1.UDP套接字简单示例 1.1服务端 import socketserver = socket.socket(socket.AF_INET,socket.S ...

  4. Python 技术篇-socket套接字实现两个窗口间消息传递实例演示,TCP实现

    上一篇:Python 技术篇-socket 套接字实现服务器客户端消息传递,UDP 实现 本篇介绍用 TCP 来实现. socket 实现客户端服务器的消息传递有 TCP 和 UDP 两种方式. TC ...

  5. Python 技术篇-socket套接字实现服务器客户端消息传递实例演示,UDP实现

    上一篇:Python 技术篇-socket 套接字实现两个窗口间消息传递,TCP 实现 本篇介绍用 UDP 来实现. socket 套接字实现服务器客户端消息传递有 UDP 和 TCP 两种形式.他们 ...

  6. java实现套接字网络编程_Java网络编程(一)Socket套接字

    一.基础知识 1.TCP:传输控制协议. 2.UDP:用户数据报协议. 二.IP地址封装 1.InetAddress类的常用方法 getLocalHost() 返回本地主机的InetAddress对象 ...

  7. C语言socket bind()函数(为socket套接字关联了一个相应的地址与端口号)

    #include <sys/socket.h>int bind(int socket, const struct sockaddr *address, socklen_t address_ ...

  8. Python开发基础----异常处理、socket套接字基础1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

  9. socket 套接字的基本概念

    什么是套接字: socket套接字:一套网络通信的接口 (API), 一套函数, 本质是伪文件. 在网络环境中唯一的标识一个进程需要 IP 和端口,这个进程就是 socket,因此 socket 需要 ...

  10. 网络编程(part11)--socket模块方法及socket套接字属性

    鄙人学习笔记 文章目录 socket模块方法及socket套接字属性 部分socket模块方法 举个例子 套接字属性 举个例子 写个案例 socket模块方法及socket套接字属性 部分socket ...

最新文章

  1. java的数组是对象吗_在Java中数组是原始类型还是对象?
  2. 汇编 int 10h
  3. bat文件注册为Windows服务与依赖关系设置
  4. Testing and Test-First Programming
  5. 获取当天0点数据scala实现
  6. 数据结构——图-有向带权图的邻接表
  7. java mock server_java – 使用MockRestServiceServer模拟REST调用
  8. mysql影响行数解析_详解MySQL的数据行和行溢出机制
  9. 学会查找问题的源头:《全屏游戏中自动切出到桌面的问题解决(二)》
  10. 【问链财经-区块链基础知识系列】 第十六课 区块链将变革教育产业,未来有六大应用方向
  11. LINUX摄像头驱动分析
  12. nar-gab投稿记录
  13. 通俗易懂的讲讲TCP的三次握手
  14. 2-44 JQuery
  15. HTML 语法规范及其基本结构标签
  16. maven到底是什么
  17. RFM分析模型——用户生命周期解析
  18. 用户标签有哪些类型,如何进行科学分类?
  19. nvidia orin简介
  20. linux 如何让.开头的文件不隐藏_如何在Mac上显示隐藏文件?苹果mac显示隐藏文件夹方法

热门文章

  1. STM32-驱动程序
  2. 【K70例程】001触摸按键,普通按键,LED驱动演示
  3. 2019最新在windows10下 安装docker 使用kitematic并且配置nginx+php环境
  4. 心血来潮之朋友的一道华为笔试题——德州扑克
  5. 分享一款Unity3d软件设计开发实例
  6. Freesurfer安装
  7. axios.post发送请求,axios发送post请求, 携带参数传递给接口
  8. 逻辑地址到物理地址的转换
  9. 禁用win10自动更新
  10. Kotlin可能带来的一个深坑,我先收藏为敬