地址系列规范 Unix domain sockets unix域套接字 AddressFamily Socket 编程
实践:
1、同台主机python程序在收到浏览器端的画图请求后给画图的golang程序发送消息
Go:Unix域套接字 - 知乎 https://zhuanlan.zhihu.com/p/423856852
unix domain socket in Go 详解+示例大集合 https://mp.weixin.qq.com/s/9Mwenob08Zx9zlxyd3eElQ
nl /usr/src/kernels/3.10.0-1160.95.1.el7.x86_64/include/linux/socket.h
114 /* Supported address families. */
115 #define AF_UNSPEC 0
116 #define AF_UNIX 1 /* Unix domain sockets */
117 #define AF_LOCAL 1 /* POSIX name for AF_UNIX */
118 #define AF_INET 2 /* Internet IP Protocol */
119 #define AF_AX25 3 /* Amateur Radio AX.25 */
120 #define AF_IPX 4 /* Novell IPX */
121 #define AF_APPLETALK 5 /* AppleTalk DDP */
122 #define AF_NETROM 6 /* Amateur Radio NET/ROM */
123 #define AF_BRIDGE 7 /* Multiprotocol bridge */
124 #define AF_ATMPVC 8 /* ATM PVCs */
125 #define AF_X25 9 /* Reserved for X.25 project */
126 #define AF_INET6 10 /* IP version 6 */
127 #define AF_ROSE 11 /* Amateur Radio X.25 PLP */
128 #define AF_DECnet 12 /* Reserved for DECnet project */
129 #define AF_NETBEUI 13 /* Reserved for 802.2LLC project*/
130 #define AF_SECURITY 14 /* Security callback pseudo AF */
131 #define AF_KEY 15 /* PF_KEY key management API */
132 #define AF_NETLINK 16
133 #define AF_ROUTE AF_NETLINK /* Alias to emulate 4.4BSD */
134 #define AF_PACKET 17 /* Packet family */
135 #define AF_ASH 18 /* Ash */
136 #define AF_ECONET 19 /* Acorn Econet */
137 #define AF_ATMSVC 20 /* ATM SVCs */
138 #define AF_RDS 21 /* RDS sockets */
139 #define AF_SNA 22 /* Linux SNA Project (nutters!) */
140 #define AF_IRDA 23 /* IRDA sockets */
141 #define AF_PPPOX 24 /* PPPoX sockets */
142 #define AF_WANPIPE 25 /* Wanpipe API Sockets */
143 #define AF_LLC 26 /* Linux LLC */
144 #define AF_IB 27 /* Native InfiniBand address */
145 #define AF_CAN 29 /* Controller Area Network */
146 #define AF_TIPC 30 /* TIPC sockets */
147 #define AF_BLUETOOTH 31 /* Bluetooth sockets */
148 #define AF_IUCV 32 /* IUCV sockets */
149 #define AF_RXRPC 33 /* RxRPC sockets */
150 #define AF_ISDN 34 /* mISDN sockets */
151 #define AF_PHONET 35 /* Phonet sockets */
152 #define AF_IEEE802154 36 /* IEEE802154 sockets */
153 #define AF_CAIF 37 /* CAIF sockets */
154 #define AF_ALG 38 /* Algorithm sockets */
155 #define AF_NFC 39 /* NFC sockets */
156 #define AF_VSOCK 40 /* vSockets */
157 #define AF_MAX 41 /* For now.. */
socket function (winsock2.h) - Win32 apps | Microsoft Learn https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket
The table below lists common values for address family although many other values are possible.
Af | Meaning |
---|---|
|
The address family is unspecified. |
|
The Internet Protocol version 4 (IPv4) address family. |
|
The IPX/SPX address family. This address family is only supported if the NWLink IPX/SPX NetBIOS Compatible Transport protocol is installed.
This address family is not supported on Windows Vista and later. |
|
The AppleTalk address family. This address family is only supported if the AppleTalk protocol is installed.
This address family is not supported on Windows Vista and later. |
|
The NetBIOS address family. This address family is only supported if the Windows Sockets provider for NetBIOS is installed.
The Windows Sockets provider for NetBIOS is supported on 32-bit versions of Windows. This provider is installed by default on 32-bit versions of Windows. The Windows Sockets provider for NetBIOS is not supported on 64-bit versions of windows including Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, or Windows XP. The Windows Sockets provider for NetBIOS only supports sockets where the type parameter is set to SOCK_DGRAM. The Windows Sockets provider for NetBIOS is not directly related to the NetBIOS programming interface. The NetBIOS programming interface is not supported on Windows Vista, Windows Server 2008, and later. |
|
The Internet Protocol version 6 (IPv6) address family. |
|
The Infrared Data Association (IrDA) address family.
This address family is only supported if the computer has an infrared port and driver installed. |
|
The Bluetooth address family.
This address family is supported on Windows XP with SP2 or later if the computer has a Bluetooth adapter and driver installed. |
The type specification for the new socket.
Possible values for the socket type are defined in the Winsock2.h header file.
The following table lists the possible values for the type parameter supported for Windows Sockets 2:
Type | Meaning |
---|---|
|
A socket type that provides sequenced, reliable, two-way, connection-based byte streams with an OOB data transmission mechanism. This socket type uses the Transmission Control Protocol (TCP) for the Internet address family (AF_INET or AF_INET6). |
|
A socket type that supports datagrams, which are connectionless, unreliable buffers of a fixed (typically small) maximum length. This socket type uses the User Datagram Protocol (UDP) for the Internet address family (AF_INET or AF_INET6). |
|
A socket type that provides a raw socket that allows an application to manipulate the next upper-layer protocol header. To manipulate the IPv4 header, the IP_HDRINCL socket option must be set on the socket. To manipulate the IPv6 header, the IPV6_HDRINCL socket option must be set on the socket. |
|
A socket type that provides a reliable message datagram. An example of this type is the Pragmatic General Multicast (PGM) multicast protocol implementation in Windows, often referred to as reliable multicast programming.
This type value is only supported if the Reliable Multicast Protocol is installed. |
|
A socket type that provides a pseudo-stream packet based on datagrams. |
In Windows Sockets 1.1, the only possible socket types are SOCK_DGRAM and SOCK_STREAM.
The table below lists common values for the protocol although many other values are possible.
地址系列规范。 地址系列的可能值在 Winsock2.h 头文件中定义。
在针对 Windows Vista 及更高版本发布的 Windows SDK 上,头文件的组织方式已更改,地址系列的可能值在 Ws2def.h 头文件中定义。 请注意, Ws2def.h 头文件会自动包含在 Winsock2.h 中,永远不应直接使用。
当前支持的值是 AF_INET 或 AF_INET6,它们是 IPv4 和 IPv6 的 Internet 地址系列格式。 用于 NetBIOS 的地址系列 (AF_NETBIOS 的其他选项,例如,如果安装了地址系列的 Windows 套接字服务提供商,则支持) 。 请注意,AF_地址系列和PF_协议系列常量的值 (相同,例如 ,AF_INET 和 PF_INET) ,因此可以使用任一常量。
下表列出了地址系列的常见值,尽管许多其他值是可能的。
Af | 含义 |
---|---|
|
地址系列未指定。 |
|
Internet 协议版本 4 (IPv4) 地址系列。 |
|
IPX/SPX 地址系列。 仅当安装了 NWLink IPX/SPX NetBIOS 兼容传输协议时,才支持此地址系列。
Windows Vista 及更高版本不支持此地址系列。 |
|
AppleTalk 地址系列。 仅当安装了 AppleTalk 协议时,才支持此地址系列。
Windows Vista 及更高版本不支持此地址系列。 |
|
NetBIOS 地址系列。 仅当安装了适用于 NetBIOS 的 Windows 套接字提供程序时,才支持此地址系列。
32 位版本的 Windows 支持 NetBIOS 的 Windows 套接字提供程序。 默认情况下,此提供程序安装在 32 位版本的 Windows 上。 64 位版本的 Windows 不支持 NetBIOS 的 Windows 套接字提供程序,包括 Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 或 Windows XP。 适用于 NetBIOS 的 Windows 套接字提供程序仅支持 类型 参数设置为 SOCK_DGRAM的套接字。 适用于 NetBIOS 的 Windows 套接字提供程序与 NetBIOS 编程接口不直接相关。 Windows Vista、Windows Server 2008 及更高版本不支持 NetBIOS 编程接口。 |
|
Internet 协议版本 6 (IPv6) 地址系列。 |
|
IrDA (IrDA) 地址系列。
仅当计算机安装了红外端口和驱动程序时,才支持此地址系列。 |
|
蓝牙地址系列。
如果计算机安装了蓝牙适配器和驱动程序,则 SP2 或更高版本的 Windows XP 支持此地址系列。 |
[in] type
新套接字的类型规范。
套接字类型的可能值在 Winsock2.h 头文件中定义。
下表列出了 Windows 套接字 2 支持 的类型 参数的可能值:
类型 | 含义 |
---|---|
|
一种套接字类型,它通过 OOB 数据传输机制提供排序的、可靠的双向、基于连接的字节流。 此套接字类型对 Internet 地址系列 (AF_INET 或AF_INET6) 使用传输控制协议 (TCP) 。 |
|
支持数据报的套接字类型,这些数据报是固定 (通常较小) 最大长度的无连接、不可靠的缓冲区。 此套接字类型对 Internet 地址系列 (AF_INET 或AF_INET6) 使用用户数据报协议 (UDP) 。 |
|
一种套接字类型,它提供允许应用程序操作下一层协议标头的原始套接字。 若要操作 IPv4 标头,必须在套接字上设置 IP_HDRINCL 套接字选项。 若要操作 IPv6 标头,必须在套接字上设置 IPV6_HDRINCL 套接字选项。 |
|
提供可靠消息数据报的套接字类型。 此类型的一个示例是 Windows 中的实用常规多播 (PGM) 多播协议实现,通常称为 可靠多播编程。
仅当安装了可靠多播协议时,才支持此 类型 值。 |
|
提供基于数据报的伪流数据包的套接字类型。 |
在 Windows 套接字 2 中,引入了新的套接字类型。 应用程序可以通过 WSAEnumProtocols 函数动态发现每个可用传输协议的属性。 因此,应用程序可以确定地址系列的可能的套接字类型和协议选项,并在指定此参数时使用此信息。 Winsock2.h 和 Ws2def.h 头文件中的套接字类型定义将随着新的套接字类型、地址系列和协议的定义而定期更新。
在 Windows 套接字 1.1 中,唯一可能的套接字类型是 SOCK_DGRAM 和 SOCK_STREAM。
[in] protocol
要使用的协议。 协议参数的可能选项特定于指定的地址系列和套接字类型。 协议的可能值在 Winsock2.h 和 Wsrm.h 头文件中定义。
在针对 Windows Vista 及更高版本发布的 Windows SDK 上,头文件的组织已更改,此参数可以是 Ws2def.h 头文件中定义的 IPPROTO 枚举类型的值之一。 请注意, Ws2def.h 头文件会自动包含在 Winsock2.h 中,永远不应直接使用。
如果指定值 0,则调用方不希望指定协议,服务提供商将选择要使用的 协议 。
当 af 参数AF_INET或AF_INET6且类型为SOCK_RAW时,为协议指定的值在 IPv6 或 IPv4 数据包标头的协议字段中设置。
下表列出了 协议 的常见值,尽管许多其他值是可能的。
网络通信的核心机制:Socket如何实现高效数据传输 - 知乎 https://zhuanlan.zhihu.com/p/651684767
Socket并不是一种协议,可以将Socket理解为方便直接使用更底层协议(传输层TCP或UDP)而存在的一个抽象层。Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议,Socket只是使得用TCP/IP协议栈更方便而已。所以Socket是对TCP/IP协议的封装,它是一组接口。这组接口当然可以由不同的语言去实现。它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。用套接字中的相关函数来完成通信过程。
1.1Socket定义
套接字的特性有三个属性确定,它们是:域(domain),类型(type),和协议(protocol)。套接字还用地址作为它的名字。地址的格式随域(又被称为协议族,protocol family)的不同而不同。每个协议族又可以使用一个或多个地址族定义地址格式。
套接字的域:域指定套接字通信中使用的网络介质。最常见的套接字域是AF_INET,它是指Internet网络,许多Linux局域网使用的都是该网络,当然,因特网自身用的也是它。其底层的协议——网际协议(IP)只有一个地址族,它使用一种特定的方式来指定网络中的计算机,即IP地址。在计算机系统内部,端口通过分配一个唯一的16位的整数来表示,在系统外部,则需要通过IP地址和端口号的组合来确定。
套接字类型:流套接字(在某些方面类似域标准的输入/输出流)提供的是一个有序,可靠,双向字节流的连接。
流套接字由类型SOCK_STREAM指定,它们是在AF_INET域中通过TCP/IP连接实现的。他们也是AF_UNIX域中常见的套接字类型。
数据包套接字:与流套接字相反,由类型SOCK_DGRAM指定的数据包套接字不建立和维持一个连接。它对可以发送的数据包的长度有限制。数据报作为一个单独的网络消息被传输,它可能会丢失,复制或乱序到达。
数据报套接字实在AF_INET域中通过UDP/IP连接实现,它提供的是一种无需的不可靠服务。
套接字协议:只要底层的传输机制允许不止一个协议来提供要求的套接字类型,我们就可以为套接字选择一个特定的协议。