首页 > 代码库 > linux概念之IPC
linux概念之IPC
man netstat所看到的
Active Internet connections (TCP, UDP, raw)
The protocol (tcp, udp, raw) used by the socket.
Active UNIX domain Sockets
The protocol (usually unix) used by the socket.
w/o server是什么意思
Active Internet connections (w/o servers)
Active UNIX domain sockets (w/o servers)
-p, --program
Show the PID and name of the program to which each socket belongs.
-l, --listening
Show only listening sockets. (These are omitted by default.)
-a, --all
Show both listening and non-listening sockets. With the --interfaces option, show interfaces that are not marked
Unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,它其实是IPC(InterProcess Communication)进程间通信中的一种,顺便提一下,
进程间通信可用如下方式:管道(半双工),FIFOS(命名管理),流管道(全双工),命令流管道,消息队列,信号量,共享内存,套接口,流
IPC是一种标准的Unix通信机制。分类LPC(本地)与RPC(网络)
前几种通常限于同一台主机的各个进程间通信,后两种可以是不同主机上的各进程间通信。与网络通信不同,网络中双方确认需要IP和端口号,而在同一台机器上的2个进程则不需要这么麻烦,
如果写过管道通信的例子,则这里类似于管道,需要定义是一个用于通信的文件(不能是系统中已有的文件)
Unix域提供两类套口:字节流套接口和数据报套接口。使用Unix域套接口的理由有三个:
1,在源自Berkeley的实现中,Unix域套接口往往比通信两端位于同一个主机的TCP套接口快出一倍。
2,Unix域套接口可用于同一个主机上的不同进程之间传递描述字。
3,Unix域套接口较新的实现把客户的凭证(用户ID和组ID)提供给服务器,从而能够提供额外的安全检查措施。
这两天之前在看UNIX socket中的实现,想着试试他的性能跟TCP/IP有什么区别,如果它的性能还不及TCP/IP的话,那么他也没有什么存在的意义。
写了一个简单的echo server,简单的测试了几组数据,然后发现其性能确实比TCP/IP性能要高,数值比较接近UNIX网络编程里提到的2倍。
socket的就是走网络,普通文件的就是走磁盘IO。
为了将不同的类型的I/O与对应的文件描述符绑定,则是需要不同的初始化函数的。文件i/o与网络i/o
普通文件就通过open函数,指定对应的文件路径,操作系统通过路径能够找到对应的文件系统类型,如ext4啊,fat啊等等。
网络就通过socket函数来初始化,socket函数就通过(domain, type, protocol)来找到对应的网络协议栈,比如TCP/IP,UNIX等等。
所以网络相关的调用,如listen,connect, bind等等,第一步基本上就是通过文件描述符找到对应的内核socket结构,然后在进行对应的操作。
在socket层内核完成的就是一个interface功能,或许也可以叫做桥接模式(bridge pattern)。