Socket历由来史

Socket
Socket的历史
1.Soket发展史以及它和 tcp/ip 的关系
        七十年代中,美国国防部高研署 (DARPA) TCP/IP 的软件提供给加利福尼亚大学 Berkeley 分校后, TCP/IP 很快被集成到 Unix 中,同时出现了许多成熟的 TCP/IP 应用程序接口 (API) 。这个 API 称为 Socket 接口。今天, SOCKET 接口是 TCP/IP 网络最为 通用的 API ,也是在 INTERNET 上进行应用开发最为通用的 API
        九十年代初,由 Microsoft 联合了其他几家公司共同制定了一套  WINDOWS 下的网络编程接口,即 Windows Sockets 规范。它是 Berkeley Sockets 的重要扩充,主要是增加了一些异步函数,并增加了符合  Windows  消息驱动特性的网络事件异步选择机制。  Windows Sockets 规范是一套开放的、支持多种协议的  Windows 下的网络编程接口。目前,在实际应用中的 Windows Sockets 规范主要有 1.1 版和 2.0 版。两者的最重要区别是 1.1 版只支持 TCP/IP 协议,而 2.0 版可以支持多协议, 2.0 版有良好的向后兼容 性,目前, Windows 下的 Internet 软件都是基于  WinSock 开发的。
 
  • 是一个编程接口
理解为和文件描述符一样用于标识一个通讯接口的对象。是在 TCP/IP 模型分层的应用层和传输层之间的一个编程接口。回想一下 TCP/IP 协议栈在计算机中实现的两条重要的分割线   P23的图
Socket我们称为套接字描述符。
  • 是一种特殊的文件描述符 (everything in Unix is a file)
    Socket的使用与 UNIX 文件或者设备非常类似,因而 socket 也遵循 UNIX 上文件的基本操作流程,包括打开 -> / -> 关闭。除了打开不同( socket 采用 socket() 获得 socket 的文件描述符),其他的已经介绍过的传统的文件 IO 操作如读 (read)/ (write)/ 关闭 (close) 都可以作用于 socket lseek 不行),当然对 socket 还增加了一些其他的 API - 参考后面的 socket API 部分。同时,为了可能对文件和 socket 都是用像读和写一样的原语,操作系统 Linux 从同一个整数集合中分配文件描述符合 socket 描述符,并确保如果某一个整数已经被分配为文件描述符,那么它就不能被分配为 socket 描述符。从 Linux 的实现上也可以看出 socket 描述符和一个文件描述符是绑定在一起的。参考: http://blog.csdn.net/ce123_zhouwei/article/details/8459730
  • 并不仅限于TCP/IP协议
    是一种 通用 的进程间通讯编程接口,所谓的通用,是说不仅支持异地进程的通信,也支持本地进程的通信,不仅支持 TCP/IP ,也支持其他通讯协议(可以认为是一种独立于具体协议的通讯编程接口)。只是在历史上由于 socket TCP/IP 网络互连上的广泛应用,他们几乎被等同起来了。后面主要讲解的也是在 TCP/IP 上的 socket ,但也会介绍一下 socket 用于本地进程间通信。
套接字分为以下三种类型:
  字节流套接字 (Stream Socket)  是最常用的套接字类型, TCP/IP 协议族中的  TCP  协议使用此类接口。字节流套接口提供面向连接的 ( 建立虚电路 ) 、无差错的、发送先后顺序一致的、无记录边界和非重复的网络信包传输。
     数据报套接字  (Datagram Socket)   TCP/IP 协议族中的 UDP 协议使用此类接口,它是无连接的服务,它以独立的信包进行网络传输,信包最大长度为 32KB ,传输不保证顺 序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。数据报套接口的一个重要特点是它保留了记录边界。对于这一特点。数据报套接口采用了与现在许多包交换网络 ( 例如以太网 ) 非常类似的模型。
  原始数据报套接字 (Raw Socket)  提供对网络下层通讯协议 ( IP 协议 ) 的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或用于提取协议较隐蔽的功能。

你可能感兴趣的:(网络)