网络编程笔记一、Socket套接字
@(网络编程笔记)[socket起源|基础内容]
引言: 这篇笔记将简单介绍socket的起源、基础知识。
一、 Socket概述
由于每个主机系统都有各自命名进程的方法,而且常常是不兼容的,因此,要在全网范围内硬把进程名字统一起来是不现实的。所以,每个计算机网络中都要引入一种起媒介作用的、全网一致的标准名字空间。这种标准名字,在ARPA网中称作socket套接字。
在操作系统中,通常会为应用程序提供一组应用程序接口(API),称为套接字接口(英语:socket API)。应用程序可以通过套接字接口,来使用网络套接字,以进行数据交换。在套接字接口中,以IP地址及通信端口组成套接字地址(socket address)。远程的套接字地址,以及本地的套接字地址完成连接后,再加上使用的协议(protocol),这个五元组(five-element tuple),作为套接字对(socket pairs),之后就可以彼此交换数据。 —— 维基百科
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。 —— 百度百科
1.1、socket起源
在 80 年代早期,远景研究规划局(Advanced Research Projects Agency, ARPA)资助了佳利福尼亚大学伯克利分校的一个研究组,让他们将 TCP/IP 软件移植到 UNIX 操作系统中,并将结果提供给其他网点。作为项目的一部分,设计者们创建了一个接口,应用进程使用这个接口可以方便的进行通信。
他们决定,只要有可能,就使用以有的系统调用,对那些不能方便的容入已有的函数集的情况,就再增加新的系统调用以支持 TCP/IP 功能。这样做的结果就出现了插口接口(Berkeley Socket) ,这个系统被称为 Berkeley UNIX或 BSD UNIX 。后期许多计算机厂商,都采用了 Berkeley UNIX,于是许多