網路插座

網路插座（；又譯網絡套接字、網絡接口、網路插槽）在計算機科學中是電腦網路中行程間資料串流的端點。使用以網際協議（）為通訊基礎的網路插座，稱為網際插座（）。因為網際協議的流行，現代絕大多數的網路插座，都是屬於網際插座。

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

在作業系統中，通常會為應用程式提供一組應用程式介面（API），稱為插座介面（）。應用程式可以通過插座介面，來使用網路插座，以進行資料交換。最早的插座介面來自於4.2 BSD，因此現代常見的插座介面大多源自Berkeley套接字（Berkeley sockets）標準。在插座介面中，以IP地址及通訊埠組成插座位址（）。遠端的插座位址，以及本地的插座位址完成連線後，再加上使用的协议（protocol），这个五元组（five-element tuple），作为插座對（socket pairs），之後就可以彼此交換資料。例如，在同一台计算机上，TCP协议与UDP协议可以同时使用相同的port而互不干扰。 作業系統根據插座地址，可以決定應該將資料送達特定的行程或執行緒。這就像是電話系統中，以電話號碼加上分機號碼，來決定通話對象一般。

中文名
中国大陆名
socket最初被翻译为“媒介(字)”。不久，ARPANET的socket就被翻译为“套-{}-接-{}-字”，其理由是：
由于每个主机系统都有各自命名进程的方法，而且常常是不兼容的，因此，要在全网范围内硬把进程名字统一起来是不现实的。所以，每个计算机网络中都要引入一种起媒介作用的、全网一致的标准名字空间。这种标准名字，在ARPA网中称作套-{}-接-{}-字，而在很多其他计算机网中称作信口。更确切地说，进程之间的连接是通过套-{}-接-{}-字或信口构成的

定义
系统内部接口（内部网络），接口描述符（抽象接口描述符）和接口地址之间的差别其实很细微，日常编程用的时候几乎不做区别。并且详细的网络接口有下面几种特征：
 本地接口地址，由本地ip地址和（包括TCP，UDP）端口号
 传输协议，例如TCP、UDP、raw IP协议

一个已经建立连接的接口双方都有整数形式的接口描述符，用来唯一表示该接口。操作系统根据对方接口发过来的IP以及传输协议头信息来提取接口的地址信息，并且将应用数据去除头信息之后提交给相应的应用程序。
在很多网络协议、教科书以及本文中，接口指的是有一个独一无二的接口号的实体。在一些其他的文章当中，接口被叫做本地接口地址，比如..."ip和端口的结合"。在一RFC147标准中，这个定义与1971的ARPA网有关，接口指的是一个32位数字，其中偶数的是接收接口，奇数的是发送接口，但是今天通信已经可以实现双向传输，在一个接口中，可以发送的同时还可以接收。

在类UNIX系统和Windows系统，命令行工具netstat和ss可用以查看当前系统的接口情况。

例子
这个例子是模拟Berkeley套接字接口，我们通过80端口发送`hello,world`到1.2.3.4的主机上。下方代码演示了创建接口、连接远程主机、发送数据和关闭接口的过程。
Socket socket = getSocket(type = "TCP")
connect(socket, address = "1.2.3.4", port = "80")
send(socket, "Hello, world!")
close(socket)

类型
数据报套接字（SOCK_DGRAM）
数据报套接字是一种无连接套接字，使用用户数据报协议（UDP）传输数据。每一个数据包都单独寻址和路由。这导致了接收端接收到的数据可能是乱序的，有一些数据甚至可能会在传输过程中丢失。不过得益于数据报套接字并不需要建立并维护一个稳定的连接，数据报套接字所占用的计算机和系统资源较小。
流套接字（SOCK_STREAM）
连接导向式通信套接字，使用传输控制协议（TCP）、流控制传输协议（SCTP）或者数据拥塞控制协议（DCCP）传输数据。流套接字提供可靠并且有序的数据传输服务。在互联网上，流套接字通常使用TCP实现，以便应用可以在任何使用TCP/IP协议的网络上运行。
原始套接字
原始套接字是一种网络套接字。允许直接发送和接受IP数据包并且不需要任何传输层协议格式。原始套接字主要用于一些协议的开发，可以进行比较底层的操作。

註釋

相關條目
 Berkeley套接字
 Winsock

外部連結
 How sockets work - IBM information center

Category:網路插座