Socket进程通信机制

Socket进程通信机制

 

  Socket通常称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通过套接字向网络发出请求或者应答网络请求。Socket既不是一个程序,也不是一种协议,其只是操作系统提供的通信层的抽象API。

 

进程通信相关概念

  进程通信的概念最初来源单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程提供了相应设施 ,如UNIX BSD的管道(Pipe)、命名管道(named pipe)和软中断信号 (signal),以及Unix System V的消息(message)、共享存储区(shared memory)和信号量(semaphore)等 ,但这些都仅限于用在本机进程之间的通信。网间进程通信要解决的是不同主机进程间的相互 通信问题(可把网机进程通信看作是其中的特例)。为此,首先要解决的是网间进程标识问题。同一主机上,不同进程可用唯一进程号(Process ID)标识。

  网络环境下,各主机独立分配的进程号不能唯一标识该进程。例如,主机A赋予某进程号5,在B机也可以存在5号进程,因此,“5号进程”就没有意义了。

  操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。因此,网间进程通信还要解决多重协议的识别问题。

  为了解决上述问题,TCP/IP协议引入了下列概念。

  1. 端口

  网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。

  按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程某种标识符。为此,TCP/IP协议 提供出协议端口(Protocol Port,简称端口)的概念,用于标识通信的进程。

  端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序(即进程)通过系统调用与某端口建立连接(binding)后。传输层传给该端口的数据都被相应进程所接收。相应进程发给传输层的数据都通过该端口输出。在TCP/IP协议的实现中,操作端口类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一I/O文件。可以用一般的读写原则访问。

  类似于文件描述符,每个端口都拥有一个端口,都是整数型标识符,用于区别不同端口。由于TCP/IP传输层的TCP协议和UDP协议时完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也有一个255端口,二者并不冲突。TCP与UDP端结构中端口的地址都是16比特,有0~65535端口号。

  2. 地址 

  网络通信中通信的两个进程分别处在不同的机器上。遵循以下原则:

  1. 某台主机可与多个网络相连,必须指定一个特定网络地址。

  2. 网络上每台主机应有其唯一的地址。

  3. 每台 主机上的每个进程应有该主机上的唯一标识符。

  3. 链接

  两个进程间的通信链路成为连接。连接表现为一些缓冲区和一组协议机制。

 

> Socket是一种服务,与其实现语言无关。基于这个性质,我们能实现不同服务之间、不同语言之间的互联互通。

> Socket从传统模式上又分为端对端和点对点的连接,流套接字和数据报套接字都属于端对端的连接,因此需要绑定端口号。而原始套接字是基于IP协议的,属于点对点的传输模式,是没有端口这个概念的。比如常用的监测网络连接ping命令,就是基于ICMP协议的,它不存在端口的概念。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章