中小型网络工程设计与实现
qq3421609946 最近接触了一个课程设计的实现,涉及到ACL的具体应用,相关要求和内容如下。
一、需求目标
(1)公司有1000台PC (2)公司共有7个部门,不同部门的相互访问要有限制,公司有三个跨省的分公司 (3)公司有自己的内部网页与外部网站,公司能够提供匿名的FTP、邮件、WWW服务,但FTP只对内部员工开放。 (4)公司有自己的OA系统 (5)公司的每台机能上互联网,每个部门的办公室联合构成一个VLAN。
二、设计内容
2.1.VLAN划分
根据本次课程实验背景,整个VLAN的划分如下: (1)行政楼120人,共5个部门。分成5个VLAN,每个Vlan内部可以互相通信,VLAN间不能相互通信。 (2)销售部门150人,共5个部门。分成5个VLAN,每个Vlan内部可以互相通信,VLAN间不能相互通信。 (3)生产中心180人,共3个部门。分成3个VLAN,每个Vlan内部可以互相通信,VLAN间不能相互通信。
2.2.网络服务软件及原理
本次企业网络设计中涉及WWW服务器,FTP服务器和Email服务器,这三类服务的原理如下: (1) www服务器 当你想进入网页,或者其他网络资源的时候,通常你要首先在你的浏览器上键入你想访问网页的统一资源定位符(Uniform Resource Locator),缩写URL,或者通过超链接方式链接到那个网页或网络资源。这之后的工作首先是URL的服务器名部分,被名为域名系统的分布于全球的因特网数据库解析,并根据解析结果决定进入哪一个IP地址(IPaddress)。 接下来的步骤是为所要访问的网页,向该IP的WWW服务器发送一个HTTP请求。在通常情况下,HTML文本、图片和构成该网页的一切其他文件很快会被逐一请求并发送回用户。 (2) FTP服务器 TP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器。 (3) Email服务器 Email服务器是一种用来负责电子邮件收发管理的设备。通常使用SMTP协议进行服务。SMTP在RFC 821中定义,它的作用是把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。
三、概要设计
3.1.网络拓扑
本次课程设计根据相关需求,网络拓扑如下所示:
3.2.网络划分
整个企业的网络拓扑如上图所示,根据实验要求,vlan划分和子网规划如下表:
(1)行政楼120人,共5个部门。分成5个VLAN,每个Vlan内部可以互相通信,VLAN间不能相互通信。VLAN 从31到35,每个VLAN分配IP数量30个,掩码为255.255.255.224. (2)销售部门150人,共5个部门。分成5个VLAN,每个Vlan内部可以互相通信,VLAN间不能相互通信。VLAN 从41到45,每个VLAN分配IP数量30个,掩码为255.255.255.224. (3)生产中心180人,共3个部门。分成3个VLAN,每个Vlan内部可以互相通信,VLAN间不能相互通信。VLAN 从51到53,每个VLAN分配IP数量60个,掩码为255.255.255.192. (4)WWW服务器链接路由器,对外网提供服务。 (5)Email服务器接入核心交换机VLAN1,对内对外均提供服务。 (6)FTP服务器接入核心交换机VLAN 11,对内提供服务。
四、详细设计
课程模拟采用软件CISCO PACKET TRACER,版本为5.3.3。模拟的拓扑图如下所示: 在本次的网络模拟中,由下向上为。首先针对每个VLAN,采用一台电脑作为VLAN内信息代表。接入交换机的每个端口划如对应的VLAN,接入核心交换机,核心交换机的核心端口也加入对应的VLAN。核心交换机接路由器和Email、FTP服务器。路由器接入外网和WWW服务器,外网用一台路由器做模拟。 关键设备配置清单如下: (1)核心交换机 hostname HXJH ip routing spanning-tree mode pvst interface FastEthernet0/1 switchport access vlan 31 switchport mode access interface FastEthernet0/2 switchport access vlan 32 interface FastEthernet0/3 switchport access vlan 33 interface FastEthernet0/4 switchport access vlan 34 interface FastEthernet0/5 switchport access vlan 35 interface FastEthernet0/6 switchport access vlan 41 interface FastEthernet0/7 switchport access vlan 42 interface FastEthernet0/8 switchport access vlan 43 interface FastEthernet0/9 switchport access vlan 44 interface FastEthernet0/10 switchport access vlan 45 interface FastEthernet0/11 switchport access vlan 51 interface FastEthernet0/12 switchport access vlan 52 interface FastEthernet0/13 switchport access vlan 53 interface FastEthernet0/14 description to email switchport mode access interface FastEthernet0/15 switchport access vlan 11 switchport mode access interface GigabitEthernet0/1 switchport trunk encapsulation dot1q switchport mode access interface GigabitEthernet0/2 interface Vlan1 ip address 192.168.1.254 255.255.255.0 interface Vlan11 mac-address 0090.2b76.1201 ip address 192.168.11.254 255.255.255.0 interface Vlan20 mac-address 0090.2b76.1202 ip address 192.168.20.254 255.255.255.0 interface Vlan31 mac-address 0090.2b76.1203 ip address 192.168.30.30 255.255.255.224 ip access-group 131 in interface Vlan32 mac-address 0090.2b76.1204 ip address 192.168.30.62 255.255.255.224 ip access-group 132 in interface Vlan33 mac-address 0090.2b76.1205 ip address 192.168.30.94 255.255.255.224 ip access-group 133 in interface Vlan34 mac-address 0090.2b76.1206 ip address 192.168.30.126 255.255.255.224 ip access-group 134 in interface Vlan35 mac-address 0090.2b76.1207 ip address 192.168.30.158 255.255.255.224 ip access-group 135 in interface Vlan41 mac-address 0090.2b76.1208 ip address 192.168.40.30 255.255.255.224 ip access-group 141 in interface Vlan42 mac-address 0090.2b76.1209 ip address 192.168.40.62 255.255.255.224 ip access-group 142 in interface Vlan43 mac-address 0090.2b76.120a ip address 192.168.40.94 255.255.255.224 ip access-group 143 in interface Vlan44 mac-address 0090.2b76.120b ip address 192.168.40.126 255.255.255.224 interface Vlan45 mac-address 0090.2b76.120c ip address 192.168.40.158 255.255.255.224 ip access-group 145 in interface Vlan51 mac-address 0090.2b76.120d ip address 192.168.50.62 255.255.255.192 ip access-group 151 in interface Vlan52 mac-address 0090.2b76.120e ip address 192.168.50.126 255.255.255.192 ip access-group 152 in interface Vlan53 mac-address 0090.2b76.120f ip address 192.168.50.190 255.255.255.192 ip access-group 153 in interface Vlan153 mac-address 0090.2b76.1210 no ip address ip access-group 153 in ip classless ip route 0.0.0.0 0.0.0.0 192.168.1.3 ip flow-export version 9 access-list 131 deny ip 192.168.30.0 0.0.0.31 192.168.30.32 0.0.0.31 access-list 131 deny ip 192.168.30.0 0.0.0.31 192.168.30.64 0.0.0.31 access-list 131 deny ip 192.168.30.0 0.0.0.31 192.168.30.96 0.0.0.31 access-list 131 deny ip 192.168.30.0 0.0.0.31 192.168.30.128 0.0.0.31 access-list 131 deny ip 192.168.30.0 0.0.0.31 192.168.40.0 0.0.0.255 access-list 131 deny ip 192.168.30.0 0.0.0.31 192.168.50.0 0.0.0.255 access-list 131 permit ip any any access-list 132 deny ip 192.168.30.32 0.0.0.31 192.168.30.0 0.0.0.31 access-list 132 deny ip 192.168.30.32 0.0.0.31 192.168.30.96 0.0.0.31 access-list 132 deny ip 192.168.30.32 0.0.0.31 192.168.30.128 0.0.0.31 access-list 132 deny ip 192.168.30.32 0.0.0.31 192.168.40.0 0.0.0.255 access-list 132 deny ip 192.168.30.32 0.0.0.31 192.168.50.0 0.0.0.255 access-list 132 permit ip any any access-list 133 deny ip 192.168.30.64 0.0.0.31 192.168.30.0 0.0.0.31 access-list 133 deny ip 192.168.30.64 0.0.0.31 192.168.30.32 0.0.0.31 access-list 133 deny ip 192.168.30.64 0.0.0.31 192.168.30.96 0.0.0.31 access-list 133 deny ip 192.168.30.64 0.0.0.31 192.168.30.128 0.0.0.31 access-list 133 deny ip 192.168.30.64 0.0.0.31 192.168.40.0 0.0.0.255 access-list 133 deny ip 192.168.30.64 0.0.0.31 192.168.50.0 0.0.0.255 access-list 133 permit ip any any access-list 134 deny ip 192.168.30.96 0.0.0.31 192.168.30.0 0.0.0.31 access-list 134 deny ip 192.168.30.96 0.0.0.31 192.168.30.32 0.0.0.31 access-list 134 deny ip 192.168.30.96 0.0.0.31 192.168.30.64 0.0.0.31 access-list 134 deny ip 192.168.30.96 0.0.0.31 192.168.30.128 0.0.0.31 access-list 134 deny ip 192.168.30.96 0.0.0.31 192.168.40.0 0.0.0.255 access-list 134 deny ip 192.168.30.96 0.0.0.31 192.168.50.0 0.0.0.255 access-list 134 permit ip any any access-list 135 deny ip 192.168.30.128 0.0.0.31 192.168.30.0 0.0.0.31 access-list 135 deny ip 192.168.30.128 0.0.0.31 192.168.30.32 0.0.0.31 access-list 135 deny ip 192.168.30.128 0.0.0.31 192.168.30.64 0.0.0.31 access-list 135 deny ip 192.168.30.128 0.0.0.31 192.168.30.96 0.0.0.31 access-list 135 deny ip 192.168.30.128 0.0.0.31 192.168.40.0 0.0.0.255 access-list 135 deny ip 192.168.30.128 0.0.0.31 192.168.50.0 0.0.0.255 access-list 135 permit ip any any access-list 141 deny ip 192.168.40.0 0.0.0.31 192.168.30.0 0.0.0.255 access-list 141 deny ip 192.168.40.0 0.0.0.31 192.168.50.0 0.0.0.255 access-list 141 deny ip 192.168.40.0 0.0.0.31 192.168.40.0 0.0.0.255 access-list 141 permit ip any any access-list 142 deny ip 192.168.40.32 0.0.0.31 192.168.40.0 0.0.0.31 access-list 142 deny ip 192.168.40.32 0.0.0.31 192.168.40.64 0.0.0.31 access-list 142 deny ip 192.168.40.32 0.0.0.31 192.168.40.96 0.0.0.31 access-list 142 deny ip 192.168.40.32 0.0.0.31 192.168.40.128 0.0.0.31 access-list 142 deny ip 192.168.40.32 0.0.0.31 192.168.50.0 0.0.0.255 access-list 142 deny ip 192.168.40.32 0.0.0.31 192.168.40.0 0.0.0.255 access-list 142 permit ip any any access-list 143 deny ip 192.168.40.64 0.0.0.31 192.168.40.0 0.0.0.31 access-list 143 deny ip 192.168.40.64 0.0.0.31 192.168.40.32 0.0.0.31 access-list 143 deny ip 192.168.40.64 0.0.0.31 192.168.40.96 0.0.0.31 access-list 143 deny ip 192.168.40.64 0.0.0.31 192.168.40.128 0.0.0.31 access-list 143 deny ip 192.168.40.64 0.0.0.31 192.168.30.0 0.0.0.255 access-list 143 deny ip 192.168.40.64 0.0.0.31 192.168.50.0 0.0.0.255 access-list 143 permit ip any any access-list 144 deny ip 192.168.40.96 0.0.0.31 192.168.40.0 0.0.0.31 access-list 144 deny ip 192.168.40.96 0.0.0.31 192.168.40.32 0.0.0.31 access-list 144 deny ip 192.168.40.96 0.0.0.31 192.168.40.64 0.0.0.31 access-list 144 deny ip 192.168.40.96 0.0.0.31 192.168.40.128 0.0.0.31 access-list 144 deny ip 192.168.40.96 0.0.0.31 192.168.30.0 0.0.0.255 access-list 144 deny ip 192.168.40.96 0.0.0.31 192.168.50.0 0.0.0.255 access-list 144 permit ip any any access-list 145 deny ip 192.168.40.128 0.0.0.31 192.168.40.0 0.0.0.31 access-list 145 deny ip 192.168.40.128 0.0.0.31 192.168.40.32 0.0.0.31 access-list 145 deny ip 192.168.40.128 0.0.0.31 192.168.40.64 0.0.0.31 access-list 145 deny ip 192.168.40.128 0.0.0.31 192.168.40.96 0.0.0.31 access-list 145 deny ip 192.168.40.128 0.0.0.31 192.168.30.0 0.0.0.255 access-list 145 deny ip 192.168.40.128 0.0.0.31 192.168.50.0 0.0.0.255 access-list 145 permit ip any any access-list 151 deny ip 192.168.50.0 0.0.0.63 192.168.50.64 0.0.0.63 access-list 151 deny ip 192.168.50.0 0.0.0.63 192.168.50.128 0.0.0.63 access-list 151 deny ip 192.168.50.0 0.0.0.63 192.168.30.0 0.0.0.255 access-list 151 deny ip 192.168.50.0 0.0.0.63 192.168.40.0 0.0.0.255 access-list 151 permit ip any any access-list 152 deny ip 192.168.50.64 0.0.0.63 192.168.50.0 0.0.0.63 access-list 152 deny ip 192.168.50.64 0.0.0.63 192.168.50.128 0.0.0.63 access-list 152 deny ip 192.168.50.64 0.0.0.63 192.168.30.0 0.0.0.255 access-list 152 deny ip 192.168.50.64 0.0.0.63 192.168.40.0 0.0.0.255 access-list 152 permit ip any any access-list 153 deny ip 192.168.50.128 0.0.0.63 192.168.50.0 0.0.0.63 access-list 153 deny ip 192.168.50.128 0.0.0.63 192.168.50.64 0.0.0.63 access-list 153 deny ip 192.168.50.128 0.0.0.63 192.168.30.0 0.0.0.255 access-list 153 deny ip 192.168.50.128 0.0.0.63 192.168.40.0 0.0.0.255 access-list 153 permit ip any any no cdp run line con 0 line aux 0 line vty 0 4 login end (2)路由器0 interface FastEthernet0/0 ip address 192.168.1.3 255.255.255.0 duplex auto speed auto interface FastEthernet0/1 ip address 192.10.10.254 255.255.255.0 duplex auto speed auto interface FastEthernet1/0 ip address 11.11.11.1 255.255.255.252 duplex auto speed auto router rip network 11.0.0.0 network 192.10.10.0 network 192.168.1.0 end (3)外网路由器 interface FastEthernet0/0 ip address 11.11.11.2 255.255.255.252 duplex auto speed auto interface FastEthernet0/1 no ip address duplex auto speed auto shutdown router rip network 11.0.0.0 end
五、调试分析
本次实验要求如下: (1)要求不同团队之间保持通信的独立性和隔离性。 (2)对外提供WWW服务、对内提供文件传输服务、内外均可访问的Email服务。 验证过程如下: (1)在VLAN31的电脑,即销售部门1电脑上模拟内网隔离及Emial、FTP服务。 访问Email服务成功。 访问FTP成功 VLAN隔离成功 (2)对外提供WWW服务、对内提供文件传输服务、内外均可访问的Email服务。 FTP服务验证已经成功,在外网路由器上验证WWW和Email服务。 WWW服务成功。 Email成功 外网FTP服务器不可达。 整个实验过程如上图所示,实验完成。
推荐阅读
-
Openstack 创建并操作实例,以实现与外部网络的通信
-
无人驾驶环境传感 | 01 车道线检测网络 LanNet 原理与实现
-
FCN 全卷积网络理解与代码实现(来自 pytorch 官方实现)
-
[姿势估计] 实践记录:使用 Dlib 和 mediapipe 进行人脸姿势估计 - 本文重点介绍方法 2):方法 1:基于深度学习的方法:。 基于深度学习的方法:基于深度学习的方法利用深度学习模型,如卷积神经网络(CNN)或递归神经网络(RNN),直接从人脸图像中学习姿势估计。这些方法能够学习更复杂的特征表征,并在大规模数据集上取得优异的性能。方法二:基于二维校准信息估计三维姿态信息(计算机视觉 PnP 问题)。 特征点定位:人脸姿态估计的第一步是通过特征点定位来检测和定位人脸的关键点,如眼睛、鼻子和嘴巴。这些关键点提供了人脸的局部结构信息,可用于后续的姿势估计。 旋转表示:常见的旋转表示方法包括欧拉角和旋转矩阵。欧拉角通过三个旋转角度(通常是俯仰、偏航和滚动)描述头部的旋转姿态。旋转矩阵是一个 3x3 矩阵,表示头部从一个坐标系到另一个坐标系的变换。 三维模型重建:根据特征点的定位结果,三维人脸模型可用于姿势估计。通过将人脸的二维图像映射到三维模型上,可以估算出人脸的旋转和平移信息。这就需要建立人脸的三维模型,然后通过优化方法将模型与特征点对齐,从而获得姿势估计结果。 特征点定位 特征点定位是用于检测人脸关键部位的五官基础部分,还有其他更多的特征点表示方法,大家可以参考我上一篇文章中介绍的特征点检测方案实践:人脸校正二次定位操作来解决人脸校正的问题,客户在检测关键点的代码上略有修改,坐标转换部分客户见上图 def get_face_info(image). img_copy = image.copy image.flags.writeable = False image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = face_detection.process(image) # 在图像上绘制人脸检测注释。 image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) box_info, facial = None, None if results.detections: for detection in results. for detection in results.detections: mp_drawing.Drawing.detection = 无 mp_drawing.draw_detection(image, detection) 面部 = detection.location_data.relative_keypoints 返回面部 在上述代码中,返回的数据是五官(6 个关键点的坐标),这是用 mediapipe 库实现的,下面我们可以尝试用另一个库:dlib 来实现。 使用 dlib 使用 Dlib 库在 Python 中实现人脸关键点检测的步骤如下: 确保已安装 Dlib 库,可使用以下命令: pip install dlib 导入必要的库: 加载 Dlib 的人脸检测器和关键点检测器模型: 读取图像并将其灰度化: 使用人脸检测器检测图像中的人脸: 对检测到的人脸进行遍历,并使用关键点检测器检测人脸关键点: 显示绘制了关键点的图像: 以下代码将参数 landmarks_part 添加到要返回的关键点坐标中。
-
R 语言︱贝叶斯网络语言的实现以及与普通贝叶斯的区别(注释)
-
基于 Python 循环神经网络的情感分类设计与实现
-
实时音频和视频技术的发展与应用-1.1 双重音频和视频 从架构上看,双人音视频系统相对简单明了。红点代表房间信令服务,房间信令服务的主要功能是管理房间信息,实现容量协商和上下行链路的质量调节,例如当下行信道发生拥塞时,上行线路的码率和分辨率会降低。 在传输信道层面,我们的策略是优先直连,在跨区域、跨运营商的情况下,我们会选择单中转或双中转信道,在策略上尽量保持直连和中转信道同时存在,当其中一个信道的质量不好时,系统会自动切断到另一个信道的流量。 1.2 多人音视频 多人视频通话的产品形态是整个房间不超过 50 人,大盘平均房间规模约为 4.x 人,房间内部最多满足一个大视频和三个小视频(四屏)。根据这一条件,我们在架构中采用了典型的 SFU 小房间设计。 上图中的红点代表房间信令服务,主要用于房间管理和状态信息同步。房间管理主要包括用户列表的管理,例如哪些用户打开了视频/音频,我看了谁,谁看了我,这些都是基于房间管理的信息,然后房间信令服务会将这些信息同步到媒体传输服务进行数据分发。 房间服务的另一个作用是房间级容量协商和质量控制,例如,房间里的每个人一开始都支持 H.265 编码,当某个时刻进来一个只支持 H.264 编码的用户时,房间里所有的上游主播就必须把 H.265 切成 H.264。还有一种情况是,房间里有一定比例的人下行链路信道质量较差,这会导致上行链路房间质量下降。 在传输层面,我们采用的是单层分布式媒体传输网络,大家都选择中转方式,不区分双人和多人,采用 Full-Mesh 传输机制将所有数据推送过去,比如一个节点上的人并不都看另外两个人的视频,但还是会将视频推送给他们。
-
基于机器学习的网络入侵检测与特征选择和随机森林分类器性能评估(NSL-KDD 数据集)--代码实现
-
澎湃新闻对话腾讯丁珂:从 "治已病 "到 "治未病",企业需快速构建 "安全免疫力"--丁珂指出,对企业而言,安全不是成本而是生命线 丁珂指出,对企业而言,安全不是成本而是生命线,也是商业 "硬币 "的另一面。在数字智能化的新阶段,发展驱动安全建设已成为普遍共识,企业需要转变安全思维,从被动建设到主动防御,构建一套新的安全范式和框架,以更加积极、主动的安全观来提升数字安全免疫力,以 "治未病 "的理念取代 "治已病",前置安全,快速构建 "安全免疫力"。对 "已病",前置预判,及时应对处置安全风险,才能维护品牌价值,保障健康发展。 与此同时,安全建设还普遍存在 "不知道往哪投、怎么投 "的痛点。对此,腾讯安全提出,企业可以按照数字安全免疫模型的框架进行安全全局部署,重点在业务安全、数据安全、安全运维管理、边界安全、终端安全、应用开发安全等薄弱环节的关键领域注入 "免疫增强针"。 今年进入公众视野的AIGC还在产业化、产品化的过程中,但大量攻击者已经利用它生成攻击脚本、钓鱼邮件,甚至伪造身份进行诈骗。"人工智能本身是否安全,会不会让网络更不安全? 腾讯安全研究认为,AIGC的风险主要集中在 "无法解释 "和 "无法追踪 "的特点上,但这在技术上是能够找到应对方法的。丁珂谈到,AIGC作为生产力的巨大提升,确实会带来更复杂的攻防态势和更大的防御难度。但任何新技术都要经历这样的周期。而法律法规也会随着技术的演进而不断更新,使新技术的发展更加规范和健全。 丁珂认为,随着我国网络安全法律法规体系的不断完善,合规性将给企业推进网络安全带来很大的推动力,并很直观地展现在需求端。未来,伴随着数据要素市场的建立或企业对数据价值的挖掘,也将带动数据安全市场的快速增长。 对于腾讯安全的商业逻辑和运营,丁珂表示,不谋求建立竞争壁垒,而是期望与生态共同发展,腾讯安全希望通过能力开放,实现安全与业务相伴的生态模式。 谈到未来,丁磊表示,安全领域已经进入加速发展期,在蓝海中会持续关注很多新的业务领域,希望孵化出新的商业模式,腾讯安全团队也会持续关注并抓住机会做好产品。 以下为采访实录(在不改变原意的基础上略有删减): 冲浪新闻:当前,以人工智能、大数据等新技术为驱动的第四次工业革命正向纵深推进,给人类生产生活带来深刻变革。而互联网作为新技术的载体,面临的安全挑战不仅数量越来越多,形式也越来越复杂。从互联网安全从业者的角度,腾讯观察到近年来国内外网络安全形势发生了哪些变化?这些变化呈现出怎样的趋势?
-
windows下进程间通信的(13种方法)-摘 要 本文讨论了进程间通信与应用程序间通信的含义及相应的实现技术,并对这些技术的原理、特性等进行了深入的分析和比较。 ---- 关键词 信号 管道 消息队列 共享存储段 信号灯 远程过程调用 Socket套接字 MQSeries 1 引言 ---- 进程间通信的主要目的是实现同一计算机系统内部的相互协作的进程之间的数据共享与信息交换,由于这些进程处于同一软件和硬件环境下,利用操作系统提供的的编程接口,用户可以方便地在程序中实现这种通信;应用程序间通信的主要目的是实现不同计算机系统中的相互协作的应用程序之间的数据共享与信息交换,由于应用程序分别运行在不同计算机系统中,它们之间要通过网络之间的协议才能实现数据共享与信息交换。进程间通信和应用程序间通信及相应的实现技术有许多相同之处,也各有自己的特色。即使是同一类型的通信也有多种的实现方法,以适应不同情况的需要。 ---- 为了充分认识和掌握这两种通信及相应的实现技术,本文将就以下几个方面对这两种通信进行深入的讨论:问题的由来、解决问题的策略和方法、每种方法的工作原理和实现、每种实现方法的特点和适用的范围等。 2 进程间的通信及其实现技术 ---- 用户提交给计算机的任务最终都是通过一个个的进程来完成的。在一组并发进程中的任何两个进程之间,如果都不存在公共变量,则称该组进程为不相交的。在不相交的进程组中,每个进程都独立于其它进程,它的运行环境与顺序程序一样,而且它的运行环境也不为别的进程所改变。运行的结果是确定的,不会发生与时间相关的错误。 ---- 但是,在实际中,并发进程的各个进程之间并不是完全互相独立的,它们之间往往存在着相互制约的关系。进程之间的相互制约关系表现为两种方式: ---- (1) 间接相互制约:共享CPU ---- (2) 直接相互制约:竞争和协作 ---- 竞争——进程对共享资源的竞争。为保证进程互斥地访问共享资源,各进程必须互斥地进入各自的临界段。 ---- 协作——进程之间交换数据。为完成一个共同任务而同时运行的一组进程称为同组进程,它们之间必须交换数据,以达到协作完成任务的目的,交换数据可以通知对方可以做某事或者委托对方做某事。 ---- 共享CPU问题由操作系统的进程调度来实现,进程间的竞争和协作由进程间的通信来完成。进程间的通信一般由操作系统提供编程接口,由程序员在程序中实现。UNIX在这个方面可以说最具特色,它提供了一整套进程间的数据共享与信息交换的处理方法——进程通信机制(IPC)。因此,我们就以UNIX为例来分析进程间通信的各种实现技术。 ---- 在UNIX中,文件(File)、信号(Signal)、无名管道(Unnamed Pipes)、有名管道(FIFOs)是传统IPC功能;新的IPC功能包括消息队列(Message queues)、共享存储段(Shared memory segment)和信号灯(Semapores)。 ---- (1) 信号 ---- 信号机制是UNIX为进程中断处理而设置的。它只是一组预定义的值,因此不能用于信息交换,仅用于进程中断控制。例如在发生浮点错、非法内存访问、执行无效指令、某些按键(如ctrl-c、del等)等都会产生一个信号,操作系统就会调用有关的系统调用或用户定义的处理过程来处理。 ---- 信号处理的系统调用是signal,调用形式是: ---- signal(signalno,action) ---- 其中,signalno是规定信号编号的值,action指明当特定的信号发生时所执行的动作。 ---- (2) 无名管道和有名管道 ---- 无名管道实际上是内存中的一个临时存储区,它由系统安全控制,并且独立于创建它的进程的内存区。管道对数据采用先进先出方式管理,并严格按顺序操作,例如不能对管道进行搜索,管道中的信息只能读一次。 ---- 无名管道只能用于两个相互协作的进程之间的通信,并且访问无名管道的进程必须有共同的祖先。 ---- 系统提供了许多标准管道库函数,如: pipe——打开一个可以读写的管道; close——关闭相应的管道; read——从管道中读取字符; write——向管道中写入字符; ---- 有名管道的操作和无名管道类似,不同的地方在于使用有名管道的进程不需要具有共同的祖先,其它进程,只要知道该管道的名字,就可以访问它。管道非常适合进程之间快速交换信息。 ---- (3) 消息队列(MQ) ---- 消息队列是内存中独立于生成它的进程的一段存储区,一旦创建消息队列,任何进程,只要具有正确的的访问权限,都可以访问消息队列,消息队列非常适合于在进程间交换短信息。 ---- 消息队列的每条消息由类型编号来分类,这样接收进程可以选择读取特定的消息类型——这一点与管道不同。消息队列在创建后将一直存在,直到使用msgctl系统调用或iqcrm -q命令删除它为止。 ---- 系统提供了许多有关创建、使用和管理消息队列的系统调用,如: ---- int msgget(key,flag)——创建一个具有flag权限的MQ及其相应的结构,并返回一个唯一的正整数msqid(MQ的标识符); ---- int msgsnd(msqid,msgp,msgsz,msgtyp,flag)——向队列中发送信息; ---- int msgrcv(msqid,cmd,buf)——从队列中接收信息; ---- int msgctl(msqid,cmd,buf)——对MQ的控制操作; ---- (4) 共享存储段(SM) ---- 共享存储段是主存的一部分,它由一个或多个独立的进程共享。各进程的数据段与共享存储段相关联,对每个进程来说,共享存储段有不同的虚拟地址。系统提供的有关SM的系统调用有: ---- int shmget(key,size,flag)——创建大小为size的SM段,其相应的数据结构名为key,并返回共享内存区的标识符shmid; ---- char shmat(shmid,address,flag)——将当前进程数据段的地址赋给shmget所返回的名为shmid的SM段; ---- int shmdr(address)——从进程地址空间删除SM段; ---- int shmctl (shmid,cmd,buf)——对SM的控制操作; ---- SM的大小只受主存限制,SM段的访问及进程间的信息交换可以通过同步读写来完成。同步通常由信号灯来实现。SM非常适合进程之间大量数据的共享。 ---- (5) 信号灯 ---- 在UNIX中,信号灯是一组进程共享的数据结构,当几个进程竞争同一资源时(文件、共享内存或消息队列等),它们的操作便由信号灯来同步,以防止互相干扰。 ---- 信号灯保证了某一时刻只有一个进程访问某一临界资源,所有请求该资源的其它进程都将被挂起,一旦该资源得到释放,系统才允许其它进程访问该资源。信号灯通常配对使用,以便实现资源的加锁和解锁。 ---- 进程间通信的实现技术的特点是:操作系统提供实现机制和编程接口,由用户在程序中实现,保证进程间可以进行快速的信息交换和大量数据的共享。但是,上述方式主要适合在同一台计算机系统内部的进程之间的通信。 3 应用程序间的通信及其实现技术 ---- 同进程之间的相互制约一样,不同的应用程序之间也存在竞争和协作的关系。UNIX操作系统也提供一些可用于应用程序之间实现数据共享与信息交换的编程接口,程序员可以通过自己编程来实现。如远程过程调用和基于TCP/IP协议的套接字(Socket)编程。但是,相对普通程序员来说,它们涉及的技术比较深,编程也比较复杂,实现起来困难较大。 ---- 于是,一种新的技术应运而生——通过将有关通信的细节完全掩盖在某个独立软件内部,即底层的通讯工作和相应的维护管理工作由该软件内部来实现,用户只需要将通信任务提交给该软件去完成,而不必理会它的具体工作过程——这就是所谓的中间件技术。 ---- 我们在这里分别讨论这三种常用的应用程序间通信的实现技术——远程过程调用、会话编程技术和MQSeries消息队列技术。其中远程过程调用和会话编程属于比较低级的方式,程序员参与的程度较深,而MQSeries消息队列则属于比较高级的方式,即中间件方式,程序员参与的程度较浅。 ---- 4.1 远程过程调用(RPC)