第八章 进程间通信

简介:

8.1 OSI参考模型


8.1.1 OSI参考模型简介

  OSI(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型。

  OSI参考模型是ISO(国际标准化组织)组织在1985年研究的网络互联模型。该体系统结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即ISO开放系统互连参考模型。在这一框架下进一步详细规定了每一层的功能,以实现开放系统环境中的互连性、互操作性和应用的可移植性。


  1-7层数据单位分别为:比特--帧--报文--TPDU--SPDU--PPDU--APDU

    帧中保存的最主要的信息是网卡的硬件MAC地址,MAC地址负责局域网通信

    报文中保存的主要有IP地址,IP地址负责互联网通信

    传输层的数据单位是段,TPDU是传输协议数据单元

    SPDU是会话协议数据单元

    PPDU是表示层协议数据单元

    APDU是应用协议数据单元


  分层的目的:

    a) 方便管理数据

    b) 方便定位故障

    c) 某一层出现问题不会影响其它层

  5-7层是用来对用户提供服务,1-4层对实际的数据传递提供服务。数据的发送是从上层(7)传到下层(1),然后通过物理层传递到对方,接收的时候从下层传递到上层


8.1.2 OSI参考模型的作用

  物理层:设备之间的比特流的传输、物理接口、电气特性等(8根网线,1326四根线负责传输数据)

 数据链路层:成帧、用MAC地址访问媒介、错误检测与修正,提供物理地址(mac地址)寻址功能

  网络层:提供逻辑地址(IP地址)寻址功能

  传输层:可靠与不可靠的传输(TCP/UDP)、传输前的错误检测以及流控

  会话层:对应用会话的管理、同步

  表示层:数据的表现形式、特定功能的实现,如加密等

  应用层:提供用户接口,方便编程


8.2 TCP/IP四层模型


8.2.1 TCP/IP四层模型简介

  TCP/IP参考模型是计算机网络的祖父ARPANET和其后继的因特网使用的参考模型。ARPANET是由美国国防部DoD(U.S.Department of Defense)赞助的研究网络。逐渐地它通过租用的电话线连结了数百所大学和政府部门。当无线网络和卫星出现以后,现有的协议在和它们相连的时候出现了问题,所以需要一种新的参考体系结构。这个体系结构在它的两个主要协议出现以后,被称为TCP/IP参考模型(TCP/IP reference model)。

  TCP/IP是一组用于实现网络互连的通信协议。Internet网络体系结构以TCP/IP为核心。基于TCP/IP的参考模型将协议分成四个层次,分别是:网络访问层、网际互联层、传输层(主机到主机)和应用层。

  网络接入层(即主机-网络层):网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。

    事实上,TCP/IP本身并未定义该层的协议,而由参与互连的各网络使用自己的物理层和数据链路层协议,然后与TCP/IP的网络接入层进行连接。地址解析协议(ARP)工作在此层,即OSI参考模型的数据链路层。

  网际互连层:网际互连层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。

    它所包含的协议设计数据包在整个网络上的逻辑传输。注重重新赋予主机一个IP地址来完成对主机的寻址,它还负责数据包在多种网络中的路由。

    该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。

    IP协议是网际互联层最重要的协议,它提供的是一个可靠、无连接的数据报传递服务。

  传输层:传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。

    该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP)

    TCP协议提供的是一种可靠的、通过“三次握手”来连接的数据传输服务

    UDP协议提供的则是不保证可靠的(并不是不可靠)、无连接的数据传输服务

  应用层:应用层对应于OSI参考模型的高层,为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等

  此段落摘自百度百科


8.2.2 模型比较

  OSI参考模型与TCP/IP四层模型的共同点:

    a) OSI参考模型和TCP/IP参考模型都采用了层次结构的概念

    b) 都能够提供面向连接和无连接两种通信服务机制

  OSI参考模型与TCP/IP四层模型的不同点:

    a) OSI采用的七层模型,而TCP/IP是四层结构

    b) TCP/IP参考模型的网络接口层实际上并没有真正的定义,只是一些概念性的描述。而OSI参考模型不仅分了两层,而且每一层的功能都很详尽,甚至在数据链路层又分出一个介质访问子层,专门解决局域网的共享介质问题

    c) OSI模型是在协议开发前设计的,具有通用性。TCP/IP是先有协议集然后建立模型,不适用于非TCP/IP网络

    d) OSI参考模型与TCP/IP参考模型的传输层功能基本相似,都是负责为用户提供真正的端对端的通信服务,也对高层屏蔽了底层网络的实现细节。所不同的是TCP/IP四层模型的传输层是建立在网络互联层基础之上的,而网络互联层只提供无连接的网络服务,所以面向连接的功能完全在TCP协议中实现,当然TCP/IP的传输层还提供无连接的服务,如UDP;相反OSI参考模型的传输层是建立在网络层基础之上的,网络层即提供面向连接的服务,又提供无连接的服务,但传输层只提供面向连接的服务

    e) OSI参考模型的抽象能力高,适合于描述各种网络;而TCP/IP是先有了协议,才制定TCP/IP模型的

    f) OSI参考模型的概念划分清晰,但过于复杂;而TCP/IP四层模型在服务、接口和协议的区别上不清楚,功能描述和实现细节混在一起

    g) TCP/IP四层模型的网络接口层并不是真正的一层;OSI参考模型的缺点是层次过多,划分意义不大但增加了复杂性


8.3 进程间通信

wKiom1j_95biHrd8AADEtzGoZQQ785.jpg

 如上图所示,上三层所对应的属于用户进程,而下四层所对应的是属于内核的功能,是特权进程,在此之前我们曾经说过,特权进程只有内核才能执行,普通用户是无法执行的。下四层的主要作用就是封装、解封装以及在网络中传输数据到达目的地。

  在这里我们主要说下传输层,传输层通过SOCKET提供进程地址。在此之前我们先来说说端口号,因为SOCKET主要形式是IP+PORT。

  Port Number:

    tcp:传输控制协议,面向连接的协议。通信前需要建立虚拟链路,结束后拆除链路

      0-65535

    udp:User Datagram Protocol,无连接的协议

      0-65535

  IANA:Intelnet Address Name Allocation,互联网地址名称分配

    0-1023:众所周知,永久的分配给固定的应用使用,属于特权端口,只有root用户才能使用,如22/tcp(ssh),80/tcp(http),443/tcp(https)

    1024-41951:亦为注册端口,但要求并不是特别严格,分配给程序注册为某应用使用,普通用户可以使用,11211/tcp,11211/udp(memcached),3306/tcp(mysql)

    41952-65535:客户端程序随机使用的端口。动态端口,或私有端口,其范围的定义在/proc/sys/net/ipv4/ip_local_port_range

  Socket:是IPC(inter-process communication,内部过程通信)的一种实现,允许位于不同主机或同一主机上不同进程之间进行通信,实现数据交换。

  Socket分类(根据其使用的端口进行分类):

    SOCK_STREAM:tcp套接字

    SOCK_DGRAM:udp套接字

    SOCK_RAW:裸套接字(不借助TCP/UDP端口号而直接通过IP地址封装报文以后实现通信)

  Socket Domain(根据其所使用的地址进行分类):

    AF_INET:Address Family,IPv4套接字家族

    AF_INET6:IPv6套接字家族

    AF_UNIX:同一主机上不同进程间进行通信

    每类套接字都至少提供了两种socket机制:流(tcp)和数据报(udp)

     流:可靠地传递、面向连接、无报文边界

      数据报:不可靠地传递、有报文边界、无连接

  套接字相关的系统调用:

    socket():创建一个套接字

    bind():绑定套接字

    listen():监听套接字

    accept():接收请求

    connect():请求连接建立

    write():发送数据

    read():接收数据











本文转自 忘情OK  51CTO博客,原文链接:http://blog.51cto.com/itchentao/1919465,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
消息中间件 Linux API
linux系统编程 进程间通信
linux系统编程 进程间通信
78 0
|
8月前
|
消息中间件 安全 Linux
Linux系统编程3(进程间通信详解)
Linux系统编程3(进程间通信详解)
253 0
|
8月前
|
存储 Shell Linux
Linux系统编程1(进程概念详解)
Linux系统编程1(进程概念详解)
89 0
进程间通信——共享内存原理及详解(通俗易懂)
进程间通信——共享内存原理及详解(通俗易懂)
|
11月前
|
存储 Unix Shell
进程间通信——匿名管道原理及详解(附有案例代码)
进程间通信——匿名管道原理及详解(附有案例代码)
|
12月前
|
存储 消息中间件
学习系统编程No.21【进程间通信之共享内存】
学习系统编程No.21【进程间通信之共享内存】
|
12月前
|
存储
学习系统编程No.20【进程间通信之命名管道】
学习系统编程No.20【进程间通信之命名管道】
|
12月前
|
消息中间件 5G Linux
学习系统编程No.18【进程间通信之管道实战】
学习系统编程No.18【进程间通信之管道实战】
学习系统编程No.18【进程间通信之管道实战】
|
12月前
|
存储 编译器 Linux
学习系统编程No.16【进程间通信】
学习系统编程No.16【进程间通信】
|
12月前
|
Linux C语言 C++
学习系统编程No.19【进程间通信之控制进程】
学习系统编程No.19【进程间通信之控制进程】