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)。