AF_INET域与AF_UNIX域socket通信原理对比

self.tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

写socket的那段时间,出于好奇,查了一下这个参数的意思结论如下:

 

1  建立socket传递的地址域,及bind()的地址结构稍有区别: 

socket() 分别传递不同的域AF_INET和AF_UNIX

bind()的地址结构分别为sockaddr_in(制定IP端口)和sockaddr_un(指定路径名)

 

2  AF_INET需经过多个协议层的编解码,消耗系统cpu,并且数据传输需要经过网卡,受到网卡带宽的限制。AF_UNIX数据到达内核缓冲区后,由内核根据指定路径名找到接收方socket对应的内核缓冲区,直接将数据拷贝过去,不经过协议层编解码,节省系统cpu,并且不经过网卡,因此不受网卡带宽的限制。

 

3  AF_UNIX的传输速率远远大于AF_INET

 

4  AF_INET不仅可以用作本机的跨进程通信,同样的可以用于不同机器之间的通信,其就是为了在不同机器之间进行网络互联传递数据而生。而AF_UNIX则只能用于本机内进程之间的通信。

 

5  AF_UNIX由于其对系统cpu的较少消耗,不受限于网卡带宽,及高效的传递速率,本机通信则首选AF_UNIX域。

参考文档: https://blog.csdn.net/sandware/article/details/40923491

上一篇:FreeSwitch-中国电话号码编号规则


下一篇:linux编程udp组播