对sokect的工作过程一直很模糊,特别是看到一些库的网络实现,总难免有困惑。今天决定搞清楚。
网上看到的不少资料,会从各个层面跟我们解释socket:
概念:
我们知道,两个进程通信时,要先能确定信息接收的对象。在互联网中,我们通过ip确定了目标机器,通过端口号确定了机器上的某个进程。因此协议+ip+端口能唯一确定信息接收(连接)对象。
socket是操作系统提供的进程间通信的机制。
大部分应用层的协议如FTP、SMTP、POP3等都使用socket建立进程间的连接。 当两个进程要建立双向连接进行通信时,socket往往成对存在,一个在进程A(客户端),一个在进程B(服务器端)。因此也有人说:socket是进程间通信的一个端点。
实现:
简单理解Socket一文有段话:
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
这段话其实已经点出了socket的意义和本质。
类型: