socket的英文原义是“孔”或“插座”。在这里作为4BDS UNIX的进程通信机制,取后一种意义。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。
在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是透明的,这也与socket机制非常相似。socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。
至此,我们对socket进行了直观的描述。抽象出来,socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。在网间网内部,每一个socket用一个半相关描述:
(协议,本地地址,本地端口)
一个完整的socket有一个本地唯一的socket号,由操作系统分配。
最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的 socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。
socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器socket 半相关为全局所公认非常重要。读者不妨考虑一下,两个完全随机的用户进程之间如何建立通信?假如通信双方没有任何一方的socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。
-----
Socket 接口是访问 Internet 使用得最广泛的方法。 如果你有一台刚配好TCP/IP协议的主机,其IP地址是202.120.127.201, 此时在另一台主机或同一台主机上执行ftp 202.120.127.201,显然无法建立连接。因"202.120.127.201" 这台主机没有运行FTP服务软件。同样, 在另一台或同一台主机上运行浏览软件 如Netscape,输入"http://202.120.127.201",也无法建立连接。现在,如果在这台主机上运行一个FTP服务软件(该软件将打开一个Socket, 并将其绑定到21端口),再在这台主机上运行一个Web 服务软件(该软件将打开另一个Socket,并将其绑定到80端口)。这样,在另一台主机或同一台主机上执行ftp 202.120.127.201,FTP客户软件将通过21端口来呼叫主机上由FTP 服务软件提供的Socket,与其建立连接并对话。而在netscape中输入"http://202.120.127.201"时,将通过80端口来呼叫主机上由Web服务软件提供的Socket,与其建 立连接并对话。
在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
分享到:
相关推荐
在开始深入分析之前,我们首先要明确什么是Socket编程。Socket编程,也称为套接字编程,是一种允许不同主机上的程序进行数据通信的技术。这种通信可以是基于TCP的,也可以是基于UDP的。在进行Socket编程之前,理解...
`socket`被形象地比喻为网络中的插座,它允许不同计算机之间的应用程序进行数据交换。在这个项目"socket.rar_socket 交换机_streamokb_交换机"中,我们看到的是一个模拟交换机的实现,它涉及到了多台交换机和主机...
- **Socket**:Socket在英语中的意思是插座,计算机领域的Socket则形象地比喻为两台计算机之间的通信连接点。它是进程间通信(IPC)的一种方式,特别适用于网络通信。 - **TCP/IP协议栈**:Socket编程通常基于TCP/...
《Windows界面下的网络编程》是一本深入浅出的IT技术书籍,主要针对Windows平台上的网络应用程序开发,特别是基于WINSOCK(Windows Socket)的网络编程技术。WINSOCK是Microsoft为Windows操作系统提供的一个API,它...
【描述】中提到的“安卓协议源码”表明这是一套针对Android操作系统定制的通信协议实现,可能包括了数据传输、加密解密、状态同步、消息推送等关键功能的源代码。"想要的赶紧下"提示这份源码可能是时效性较强,可能...
作者通过电话通信的例子,形象地说明了socket的绑定地址、连接请求、通话建立等概念。 本书对于学习TCPIP协议和Linux内核网络源码的学习者来说,是一本难得的参考资料。它不仅系统地分析了TCPIP协议栈的实现,还...
2. **socket编程**:在C语言中,实现网络通信通常使用socket接口,这包括创建socket、绑定地址、监听连接请求、接受连接、读写数据等步骤。 3. **多线程编程**:为了同时处理多个客户端的连接请求,IPMSG可能采用了...
另外,Python拥有大量的功能库,可以轻松地完成网络编程、文件操作、数据库交互、文本处理等多种任务,这些库被形象地称为“内置电池”。因此,Python被广泛用于网站开发、游戏后台开发,以及像Instagram、Google、...
"套接字"这个中文翻译虽然在直观上可能难以理解,但其实它源自英文原词socket,意味着接口或插座,形象地描述了客户端和服务端建立连接进行通信的过程。 在Socket通信中,服务器端首先bind到特定端口并listen,等待...
在IT领域,TCP(Transmission Control Protocol)是一种广泛使用的网络传输协议,它为两台计算机之间的数据交换提供了可靠、有序和无损的服务。TCP扫描是网络安全和系统管理员常用的一种技术,用于发现网络上开放的...
8. **网络编程**: TCP/UDP协议、Socket通信、HTTP/HTTPS协议基础。 9. **Spring框架**: IOC、AOP、MVC架构、Spring Boot、Spring Cloud等。 10. **数据库**: SQL语言、事务管理、索引、存储过程、优化技巧。 11. **...
标题“hello-minnow”可能指的是一个基于Sails.js框架的示例或项目,而“桃花鱼”可能是项目名称或者是对项目特性的形象比喻。描述中提到的"Sails.js 0.10.0-rc7"是Sails.js的一个早期版本,这是一款基于Node.js的 ...
以下是一些从标题、描述和压缩包文件名中提炼出的Android开发相关知识点: 1. **Android+Socket编程**:在Android应用中,通过Socket编程可以实现与PC或其他设备的通信。这通常涉及到TCP或UDP协议,用于实时数据...
FTPS(File Transfer Protocol over Secure Socket Layer/Transport Layer Security)是通过SSL/TLS加密的FTP协议,提供安全的数据传输。FTP子文件名"ftps_24"可能是指FTP服务器上的一个目录或文件,可能包含与模板...
这个实验可能涵盖了一系列网络概念和技术,包括但不限于TCP/IP协议、Socket编程、网络通信以及数据包的封装和解封装等。"FullSail的最终网络分配(从高年级开始)"意味着这是高级课程的内容,可能涉及到更复杂的设计...
上面,我们得到了Osip的解析器开发库,下面再编译完整的Osip协议栈开发库,同样照上述方法,分别创建动态链接库工程和静态链接库工程,只是要拷的文件换成src下的osip目录下文件和include下的osip目录,...
描述提到"HYBBS是基于HYPHP框架开发的",这意味着这可能是一个论坛或讨论板系统,它利用了HYPHP框架的优势来构建。 1. **网络编程**:网络编程涉及通过网络在不同计算机之间交换数据。在PHP中,我们可以使用socket...
"昏昏欲睡的PowerOnRest" 可能是对项目功能的一种形象化表述,暗示该项目专注于在电脑进入低功耗模式后,通过特定的命令或触发器来唤醒它。"使用唤醒局域网打开电脑的休息端点"重申了这个功能是通过网络实现的,而且...