family参数代表地址家族,比较常用的为AF_INET或AF_UNIX。AF_UNIX用于同一台机器上的进程间通信,AF_INET对于IPV4协议的TCP和UDP 。

type参数代表套接字类型,SOCK_STREAM(流套接字)或者SOCK_DGRAM(数据报文套接字)。

其中AF_INET类型有关的例子非常多,但AF_UNIX的少见,所以给出一个AF_UNIX简单的例子,并通过select实现非阻塞socket。

Server端:

<pre class="python" name="code">import os
import socket
import select
import sys  sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
path = './tt.d'
if os.path.exists(path):  os.unlink(path)
sock.bind(path)
sock.listen(5)  infds, outfds, errfds = select.select([sock,],[],[],5)
if len(infds) != 0:  con,addr = sock.accept()  print con.recv(1024)  con.close()  sock.close()
print '5 seconds later no data coming'  

Server

Client端:

</pre><pre class="python" name="code">import socket    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect('./tt.d')
sock.send('Hello Socket')
sock.close()  

Client

1.  AF_INET域socket通信过程

典型的TCP/IP四层模型的通信过程。

发送方、接收方依赖IP:Port来标识,即将本地的socket绑定到对应的IP端口上,发送数据时,指定对方的IP端口,经过Internet,可以根据此IP端口最终找到接收方;接收数据时,可以从数据包中获取到发送方的IP端口。

发送方通过系统调用send()将原始数据发送到操作系统内核缓冲区中。内核缓冲区从上到下依次经过TCP层、IP层、链路层的编码,分别添加对应的头部信息,经过网卡将一个数据包发送到网络中。经过网络路由到接收方的网卡。网卡通过系统中断将数据包通知到接收方的操作系统,再沿着发送方编码的反方向进行解码,即依次经过链路层、IP层、TCP层去除头部、检查校验等,最终将原始数据上报到接收方进程。

2.  AF_UNIX域socket通信过程

典型的本地IPC,类似于管道,依赖路径名标识发送方和接收方。即发送数据时,指定接收方绑定的路径名,操作系统根据该路径名可以直接找到对应的接收方,并将原始数据直接拷贝到接收方的内核缓冲区中,并上报给接收方进程进行处理。同样的接收方可以从收到的数据包中获取到发送方的路径名,并通过此路径名向其发送数据。

3.  相同点

操作系统提供的接口socket(),bind(),connect(),accept(),send(),recv(),以及用来对其进行多路复用事件检测的select(),poll(),epoll()都是完全相同的。收发数据的过程中,上层应用感知不到底层的差别。

4.  不同点

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

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

5.  使用场景

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

转载于:https://www.cnblogs.com/shangerzhong/p/9153737.html

AF_UNIX和AF_INET相关推荐

  1. socket PF_INET AF_INET 区别

    在写网络程序的时候,建立TCP socket: sock = socket(PF_INET, SOCK_STREAM, 0); 然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构, ...

  2. 【转】PF_INET 和 AF_INET 的区别

    转自:PF_INET 和 AF_INET 的区别 - 52php - 博客园 在写网络程序的时候,建立TCP socket: 1 sock = socket(PF_INET, SOCK_STREAM, ...

  3. 关于PF_INET和AF_INET的区别

    在写网络程序的时候,建立TCP socket: sock = socket(PF_INET, SOCK_STREAM, 0); 然后在绑定本地地址或连接远程地址时需要初始化sockaddr_in结构, ...

  4. PF_INET 和 AF_INET的区别

    AF 表示ADDRESS FAMILY 地址族  PF 表示PROTOCL FAMILY 协议族 Winsock2.h中 #define AF_INET 0 #define PF_INET AF_IN ...

  5. PF_INET 和 AF_INET的说明!

    本文转自 http://blog.sina.com.cn/s/blog_3e28c8a50100abci.html AF 表示ADDRESS FAMILY 地址族 PF 表示PROTOCL FAMIL ...

  6. python socket编程

    python 编写server的步骤: 1.第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参数 ...

  7. Python3 网络编程(转载)

    1.Socket编程介绍 socket是基于C/S架构的,也就是说进行socket网络编程时,通常需要两个文件,一个是服务端,一个客户端 首先导入socket模块:import socket pyth ...

  8. python网络编程

    python学习记录--网络编程 1.套接字介绍 一台机器上的不同进程之间进行通信可以利用队列,管道等,但是不同机器之间的进程进行通信用队列是不行的,解决这个问题就是网络套接字. 套接字是计算机网络数 ...

  9. Python网络编程1--笔记

    网络编程 一.客户端与服务器架构 硬件的客户端与服务器架构:打印机服务器,文件服务器 硬件服务器有关门的设备,打印机服务器有打印机,文件服务器NFS有磁盘. 软件的客户端与服务器架构:web服务器,数 ...

最新文章

  1. Microbiome:浙大马忠华团队-生防细菌抑制病原真菌新机制
  2. 二极管的反向恢复过程
  3. android layout background,Android LinearLayout Gradient Background
  4. mac电脑下Tomcat和Apach配置流程(超详细)
  5. [react] 什么时候使用状态管理器?
  6. [dts]DTS实例分析
  7. 使用 VSCode 开发 uniapp
  8. Linux看硬盘同步,从磁盘同步看linux的机制和策略
  9. 支持中文编程、汉语编程的国产C语言编程工具 - 习语言4717版发布
  10. 《团队作业第二周》五小福团队作业——UNO
  11. pmon 源码分析之start.S
  12. 我他妈的是什么!!!!
  13. 病毒式传播2.0时代的社交游戏开发5要素
  14. 内核tcp协议栈SACK的处理
  15. 中文版扩散模型课程:第一单元
  16. 手机的九宫格图案解锁总共能绘出多少种图案?LeetCode 351. Android Unlock Patterns
  17. maven 配置多个仓库
  18. 辛苦整理SBM模型Matlab工具包资料
  19. 机器人瓦力材质库下载_机器人总动员/瓦力[BD中英双字1024/1280高清版]
  20. animators vs animations

热门文章

  1. 深入浅出之正则表达式(一)
  2. 使用nodejs实现OData的batch操作在Marketing Cloud里读取contact信息
  3. matplotlib 雷达图2
  4. 《Arduino奇妙之旅:智能车趣味制作天龙八步》一2.4 准备好了吗?
  5. 微软职位内部推荐-Senior PM
  6. oracle查找外键表
  7. SharePoint 2010 同步用户Services 一直Starting 终极解决方案
  8. DataColor的SnowLeopard支持
  9. MONGODB 集群 配置及 客户端PHP 连接
  10. 【Linux入门基础知识】Linux 脚本编写基础