转载:http://blog.csdn.net/sandware/article/details/40923491

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则用于跨机器之间的通信。

最新文章

  1. 使用nwjs开发桌面应用之Hello,World!
  2. js-sort数组排序
  3. LeetCode Graph Valid Tree
  4. WebSocket桌面客户端工具
  5. Express创建并运行node项目(Jade和EJS模版引擎)
  6. poj1222 EXTENDED LIGHTS OUT
  7. 扩展duilib edit控件的提示功能和多种文字颜色(解决edit为password显示不正常的bug)
  8. [设计模式]<<设计模式之禅>>之关于单一职责原则
  9. shell curl
  10. poj3090--欧拉函数
  11. 虚拟机下克隆3个centos系统并配置IP访问网络(转载)
  12. MVC 伪静态路由、MVC路由配置,实现伪静态。
  13. Spring JPA 使用@CreatedDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy 自动生成时间和修改者
  14. C#程序以管理员权限运行(ZT)
  15. [Swift-2019力扣杯春季初赛]4. 从始点到终点的所有路径
  16. iproute2应用
  17. Git-Flow | How it’s used and why you should
  18. 一文搞懂Java环境,轻松实现Hello World!
  19. vs调试程序时发现变量、类等程序找不到混乱问题
  20. 170301、使用Spring AOP实现MySQL数据库读写分离案例分析

热门文章

  1. 利用AD采集获取外部温度传感器的值
  2. bower基本使用
  3. 广搜:codevs-3344(初步bfs)
  4. Node.js 入门简介
  5. Jmeter关联,正则表达式提取器使用
  6. 巧用tab组件实现APP的布局效果
  7. GitLab Development Kit 环境搭建
  8. Big Endian与Litter Endian
  9. [H5]range对象的createRange方法
  10. 23个适合Java开发者的大数据工具和框架