跳转到内容

网络套接字

本页使用了标题或全文手工转换
维基百科,自由的百科全书
(重定向自套接字
“网络套接字”的各地常用名称
中国大陆套接字
台湾插座、接套
港澳socket

网络套接字(英语:Network socket;又译网络套接字网络接口网络插槽)在计算机科学中是电脑网络中进程间资料流的端点。使用以网际协议Internet Protocol)为通信基础的网络套接字,称为网际套接字Internet socket)。因为网际协议的流行,现代绝大多数的网络套接字,都是属于网际套接字。

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

操作系统中,通常会为应用程序提供一组应用程序接口(API),称为套接字接口(英语:socket API)。应用程序可以通过套接字接口,来使用网络套接字,以进行资料交换。最早的套接字接口来自于4.2 BSD,因此现代常见的套接字接口大多源自Berkeley套接字(Berkeley sockets)标准。在套接字接口中,以IP地址端口组成套接字地址socket address)。远程的套接字地址,以及本地的套接字地址完成连线后,再加上使用的协议(protocol),这个五元组(five-element tuple),作为套接字对(socket pairs),之后就可以彼此交换资料。例如,在同一台计算机上,TCP协议与UDP协议可以同时使用相同的port而互不干扰。 操作系统根据套接字地址,可以决定应该将资料送达特定的行程线程。这就像是电话系统中,以电话号码加上分机号码,来决定通话对象一般。

中文名

[编辑]

中国大陆名

[编辑]

socket最初被翻译为把socket译为“介质(字)”[2]。不久,ARPANET的socket就被翻译为“套接字”,其理由是:[3]

由于每个主机系统都有各自命名进程的方法,而且常常是不兼容的,因此,要在全网范围内硬把进程名字统一起来是不现实的。所以,每个计算机网络中都要引入一种起介质作用的、全网一致的标准命名空间。这种标准名字,在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数据包并且不需要任何传输层协议格式。原始套接字主要用于一些协议的开发,可以进行比较底层的操作。

注释

[编辑]
  1. ^ 1983年发布的4.2BSD就是如此定义socket (PDF). [2017-03-07]. (原始内容存档 (PDF)于2017-03-08). 
  2. ^ (中科院)计算所计算机网组. 计算机网词汇译名讨论. 电子计算机动态: 75–79. 
  3. ^ 计算机网络软件简介. 电子计算机参考资料: 57–107. 

相关条目

[编辑]

外部链接

[编辑]