socket 通信
2012-06-08 10:06:10|分类: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 开发的。
Socket 实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有 Socket
接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个 Socket 接口来实现。在应
用开发中就像使用文件句柄一样,可以对Socket 句柄进行读、写操作。套接字是网络的基本构
件。它是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。
套接字存在通信区域(通信区域又称地址簇)中。套接字只与同一区域中的套接字交换数据(跨
区域时,需要执行某和转换进程才能实现)。WINDOWS'中的套接字只支持一个域——网际域。
套接字具有类型。我们将Socket 翻译为套接字,套接字分为以下三种类型:
字节流套接字(Stream Socket) 是最常用的套接字类型,TCP/IP 协议族中的TCP'协议使
用此类接口。字节流套接口提供面向连接的(建立虚电路)、无差错的、发送先后顺序一致的、无
记录边界和非重复的网络信包传输。
''''数据报套接字(Datagram Socket) TCP/IP 协议族中的 UDP 协议使用此类接口,它是无连
接的服务,它以独立的信包进行网络传输,信包最大长度为 32KB,传输不保证顺序性、可靠性
和无重复性,它通常用于单个报文传输或可靠性不重要的场合。数据报套接口的一个重要特点是
它保留了记录边界。对于这一特点。数据报套接口采用了与现在许多包交换网络(例如以太网)非
常类似的模型。
原始数据报套接字(Raw Socket) 提供对网络下层通讯协议(如 IP 协议)的直接访问,它一
般不是提供给普通用户的,主要用于开发新的协议或用于提取协议较隐蔽的功能。
'
2、socket 通信概念
端口
''''网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。
''''按照 OSI 七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。
从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种
标识符。为此,TCP/IP 协议提出了协议端口(protocol port,简称端口)的概念,用于标识
通信的进程。