精华内容
下载资源
问答
  • 用户在购买阿里云ECS云服务器时,会面临怎样选择网络类型的烦恼,阿里云服务器定制购买时,网络类型里的经典网络和专有网络(VPC)是什么含义,该怎样选择适合自己的网络类型呢 其实,阿里云官网已经给出了关于这两...

        用户在购买阿里云ECS云服务器时,会面临怎样选择网络类型的烦恼,阿里云服务器定制购买时,网络类型里的经典网络和专有网络(VPC)是什么含义,该怎样选择适合自己的网络类型呢

    其实,阿里云官网已经给出了关于这两种网络的简单介绍:

    网络类型:仅是 ECS 产品功能上区分,与运营商公网接入网络质量无关,任何网络类型的运营商接入均为 BGP 线路,请您放心使用,并根据自己需要进行选择。

      经典网络:IP地址由阿里云统一分配,配置简便,使用方便,适合对操作易用性要求比较高、需要快速使用 ECS 的用户。

      专有网络:是指逻辑隔离的私有网络,您可以自定义网络拓扑和 IP 地址,支持通过专线连接。适合于熟悉网络管理的用户。

    只不过,这个介绍对于很多人来讲,还是看的云里雾里,看完了也不知道该怎么选。

    其实,可以这样简单地理解,从公网ip来讲,经典网络和专有网络没有区别;从内网ip来讲,经典网络是DHIP,也就是自动分配局域网ip地址,而专有网络则是手工分配局域网ip地址,这样方便有多台云服务器的用户自行定义内网ip结构。所以,如果用户只有一台服务器,或者有多台服务器但不需要进行内网互联,那么这两种网络都可以选择的。

    但从实务上讲,因为经典网络是阿里云自动分配的ip地址,有一定的规律性,那么黑客也就可以利用内网ip进行局域网攻击,虽然在阿里云的安全体系下有些难度,但事实也证明了有被攻击的可能性。而专有网络因为是自定义局域网ip,那么黑客就没那么容易进入用户的内网进行攻击了。

     

    所以,如果您就只有一台服务器,或者多台服务器之间不需要内网互联,那么怎样选择都可以,个人建议选择经典网络,后期管理更为简单。

    有内网互联需求,不需要自定义网络结构,也可以选择经典网络。

    反之,有内网互联需求,而且需要自定义网络,那么就选择专有网络。

    展开全文
  • 在用户提交订单购买阿里云ECS云服务器时,会面临怎样选择网络类型的烦恼,阿里云服务器定制购买时,网络类型里的经典网络和专有网络(VPC)是什么含义,该怎样选择适合自己的网络类型呢?万维景盛高级工程师为您分析...

    阿里云服务器经典网络和专有网络究竟有什么区别?

    在用户提交订单购买阿里云ECS云服务器时,会面临怎样选择网络类型的烦恼,阿里云服务器定制购买时,网络类型里的经典网络和专有网络(VPC)是什么含义,该怎样选择适合自己的网络类型呢?万维景盛高级工程师为您分析解答。

    其实,阿里云官网已经给出了关于这两种网络的简单介绍:
    网络类型:仅是 ECS 产品功能上区分,与运营商公网接入网络质量无关,任何网络类型的运营商接入均为 BGP 线路,请您放心使用,并根据自己需要进行选择。
    经典网络: IP地址由阿里云统一分配,配置简便,使用方便,适合对操作易用性要求比较高、需要快速使用 ECS 的用户。
    专有网络: 是指逻辑隔离的私有网络,您可以自定义网络拓扑和 IP 地址,支持通过专线连接。适合于熟悉网络管理的用户。
    只不过,这个介绍对于很多人来讲,还是看的云里雾里,看完了也不知道该怎么选。
    其实,可以这样简单地理解,从公网ip来讲,经典网络和专有网络没有区别;从内网ip来讲,经典网络是DHIP,也就是自动分配局域网ip地址,而专有网络则是手工分配局域网ip地址,这样方便有多台云服务器的用户自行定义内网ip结构。所以,如果用户只有一台服务器,或者有多台服务器但不需要进行内网互联,那么这两种网络都可以选择的。
    但从实务上讲,因为经典网络是阿里云自动分配的ip地址,有一定的规律性,那么黑客也就可以利用内网ip进行局域网攻击,虽然在阿里云的安全体系下有些难度,但事实也证明了有被攻击的可能性。而专有网络因为是自定义局域网ip,那么黑客就没那么容易进入用户的内网进行攻击了。

    小结

    所以,如果您就只有一台服务器,或者多台服务器之间不需要内网互联,那么怎样选择都可以,个人建议选择经典网络,后期管理更为简单。
    有内网互联需求,不需要自定义网络结构,也可以选择经典网络。
    反之,有内网互联需求,而且需要自定义网络,那么就选择专有网络。

    弹性公网IP

    弹性公网IP,简称EIP,是可以独立购买和持有的公网IP地址资源,能动态绑定到不同的ECS实例上,绑定和解绑时无需停机。个人粗浅的认识是,IP不跟实际的机器挂科,单独拿出来卖了

    弹性公网IP可以绑定到一台VPC类型的ECS实例上,可以使这台ECS实例具备公网通信的能力;您也可以根据您的需求进一步实现这些场景:

    • 将这台ECS作为SNAT网关,为同VPC内其他实例提供公网访问能力

    • 将这台ECS作为DNAT网关,使同VPC内其他实例可以面向公网提供服务

    参考资料

    http://www.aiweibang.com/yuedu/84894288.html
    https://help.aliyun.com/knowledge_detail/38781.html

    转载于:https://www.cnblogs.com/flowerszhong/p/5703368.html

    展开全文
  • 自定义视图是在项目开发中经常会面临的工作... 首先,定义了一个枚举类型,用于区分图片的存储类型网络图片还是本地图片。 /** 图片存储类型 - Local: 本地图片 - Network: 网络图片 */ enum GofI...

      自定义视图是在项目开发中经常会面临的工作,通过对视图进行封装,能达到更好的复用性,并使得VC里面的逻辑更加清晰。本篇将对实际项目中常用的图片轮播进行封装。

    1.先从源码看起

      首先,定义了一个枚举类型,用于区分图片的存储类型:网络图片还是本地图片。

    /**
     图片存储类型
     
     - Local:   本地图片
     - Network: 网络图片
     */
    enum GofImageStoreType: Int
    {
        case Local = 0;
        case Network;
    }

      然后对图片轮播类进行了功能封装。

    class GofImageScrollView: UIView
    {
        /// 图片数组
        private var arrImage: [String]?;
        /// 分页
        private var imgPageControl: UIPageControl?;
        /// 按钮单击回调Block
        private var btnClick: GofBtnClickBlock?;
        /// 滚动视图
        private var imgScrollView: UIScrollView?;
        /// 计时器
        private var timer: NSTimer?;
        /// 当前页索引
        private var iCurrentIndex: NSInteger?;
        
        /**
         创建GofImageScrollView
         
         - parameter array:         图片数组(本地图片传图片名称数组,网络图片传图片URL数组,均为字符串数组)
         - parameter storeType:     图片存储类型(网络图片/本地图片)
         - parameter btnClickBlock: 按钮单击处理
         - parameter superView:     父视图
         - parameter constraints:   约束
         
         - returns: GofImageScrollView
         */
        static func gof_ImageScrollView(array: [String], storeType: GofImageStoreType, btnClickBlock: GofBtnClickBlock?, superView: UIView?, constraints: GofConstraintMaker?) -> GofImageScrollView
        {
            let scroll = GofImageScrollView();
            
            if superView != nil
            {
                superView!.addSubview(scroll);
                
                if constraints != nil
                {
                    scroll.snp_makeConstraints(closure: { (make) in
                        constraints!(make);
                    })
                    
                    scroll.showScrollViewWithImageArray(array, storeType: storeType, btnClickBlock: btnClickBlock);
                }
            }
            
            return scroll;
        }
        
        /**
         显示图片轮播
         
         - parameter array:         图片数组(本地图片传图片名称数组,网络图片传图片URL数组,均为字符串数组)
         - parameter storeType:     图片存储类型(网络图片/本地图片)
         - parameter btnClickBlock: 按钮单击处理
         */
        func showScrollViewWithImageArray(array: [String], storeType: GofImageStoreType, btnClickBlock: GofBtnClickBlock?)
        {
            //变量赋值
            arrImage = array;
            btnClick = btnClickBlock;
            iCurrentIndex = 1;
            
            //滚动视图
            imgScrollView = UIScrollView.init();
            imgScrollView!.delegate = self
            imgScrollView!.pagingEnabled = true;
            imgScrollView!.contentSize = CGSizeMake(self.bounds.size.width * CGFloat(array.count + 2), 0);
            imgScrollView!.contentOffset = CGPointMake(self.bounds.size.width * 2, 0);
            imgScrollView!.showsHorizontalScrollIndicator = false;
            imgScrollView!.showsVerticalScrollIndicator = false;
            self.addSubview(imgScrollView!);
            imgScrollView?.snp_makeConstraints(closure: { (make) in
                make.edges.equalTo(self);
            });
            
            //内容容器视图
            let containerView = UIView();
            imgScrollView?.addSubview(containerView);
            containerView.snp_makeConstraints { (make) in
                make.edges.equalTo(self.imgScrollView!);
                make.top.equalTo(0);
                make.height.equalTo(self);
            }
            
            //分页小圆点
            imgPageControl = UIPageControl.init();
            imgPageControl?.numberOfPages = array.count;
            imgPageControl?.currentPage = 0;
            imgPageControl?.userInteractionEnabled = false;
            imgPageControl?.currentPageIndicatorTintColor = UIColor.greenColor();
            imgPageControl?.pageIndicatorTintColor = UIColor.grayColor();
            self.addSubview(imgPageControl!);
            imgPageControl?.snp_makeConstraints(closure: { (make) in
                make.left.equalTo(0);
                make.top.equalTo(self.snp_bottom).offset(-20);
                make.right.equalTo(0);
                make.height.equalTo(20);
            })
            
            //添加图片
            for i in 0...array.count - 1
            {
                //图片
                let button = UIButton.gof_buttonWithTitle(nil, superView: containerView, constraints: { (make) in
                        make.leading.equalTo(kScreenWidth * CGFloat(i + 1));
                        make.top.equalTo(0);
                        make.width.equalTo(kScreenWidth);
                        make.bottom.equalTo(0);
                    }, touchup: { [unowned self] (btn) in
                        if (self.btnClick != nil)
                        {
                            self.btnClick(btn);
                        }
                });
                button.tag = 100 + i;
                if .Local == storeType
                {
                    button.setImage(gof_ImageWithName(array[i > (array.count - 1) ? 0 : i] ), forState: .Normal);
                }
                else
                {
                    button.kf_setImageWithURL(NSURL(string: array[i > (array.count - 1) ? 0 : i] ), forState: .Normal);
                }
            }
            
            //右边加个图片用于过渡
            let rightButton = UIButton.gof_buttonWithTitle(nil, superView: containerView, constraints: { (make) in
                    make.leading.equalTo(kScreenWidth * CGFloat(array.count + 1));
                    make.top.equalTo(0);
                    make.width.equalTo(kScreenWidth);
                    make.bottom.equalTo(0);
                }, touchup: { [unowned self] (btn) in
                    if (self.btnClick != nil)
                    {
                        self.btnClick(btn);
                    }
                });
            rightButton.tag = 100;
    
            //左边加个图片用于过渡
            let leftButton = UIButton.gof_buttonWithTitle(nil, superView: containerView, constraints: { (make) in
                    make.leading.equalTo(0);
                    make.top.equalTo(0);
                    make.width.equalTo(kScreenWidth);
                    make.bottom.equalTo(0);
                }, touchup: { [unowned self] (btn) in
                    if (self.btnClick != nil)
                    {
                        self.btnClick(btn);
                    }
                });
            leftButton.tag = 100 + array.count - 1;
            
            containerView.snp_makeConstraints { (make) in
                make.right.equalTo(rightButton);
            }
            
            if .Local == storeType
            {
                rightButton.setImage(gof_ImageWithName(array[0]), forState: .Normal);
                leftButton.setImage(gof_ImageWithName(array[array.count - 1]), forState: .Normal);
            }
            else
            {
                rightButton.kf_setImageWithURL(NSURL(string: array[0]), forState: .Normal);
                leftButton.kf_setImageWithURL(NSURL(string: array[array.count - 1]), forState: .Normal);
            }
            
            self.startScrollForInit();
        }
        
        /**
         初始化操作
         */
        func startScrollForInit()
        {
            NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: #selector(startScroll), userInfo: nil, repeats: true);
        }
        
        /**
         设置初始滚动位置并开启定时任务
         */
        func startScroll()
        {
            self.scrollToInit();
            
            //启动定时器
            self.startTime();
        }
        
        /**
         按钮点击
         
         - parameter btn: 按钮
         */
        func btnClick(btn:UIButton) -> Void
        {
            if (btnClick != nil)
            {
                btnClick!(btn);
            }
        }
        
        /**
         开启计时器
         */
        func startTime() -> Void
        {
            
            if timer == nil
            {
                timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(scrollForTime), userInfo: nil, repeats: true);
            }
        }
        
        /**
         添加滚动
         */
        func scrollForTime() -> Void
        {
            iCurrentIndex = iCurrentIndex! + 1;
            if iCurrentIndex == arrImage!.count + 1
            {
                imgScrollView!.setContentOffset(CGPointMake(self.bounds.size.width * CGFloat(iCurrentIndex!), 0), animated:true);
                iCurrentIndex = 1;
                self.performSelector(#selector(scrollToInit), withObject: nil, afterDelay: 0.5);
            }
            else
            {
                imgScrollView!.setContentOffset(CGPointMake(self.bounds.size.width * CGFloat(iCurrentIndex!), 0), animated:true);
            }
            imgPageControl!.currentPage = iCurrentIndex! - 1;
        }
        
        /**
         回到原点
         */
        func scrollToInit() -> Void
        {
            imgScrollView!.setContentOffset(CGPointMake(self.bounds.size.width * CGFloat(iCurrentIndex!), 0), animated:false);
        }
    }

      最后,通过扩展来遵守UIScrollViewDelegate协议。

    extension GofImageScrollView: UIScrollViewDelegate
    {
        func scrollViewWillBeginDragging(scrollView: UIScrollView)
        {
            if timer != nil
            {
                timer!.invalidate();
                timer = nil;
            }
        }
        
        func scrollViewDidEndDecelerating(scrollView: UIScrollView)
        {
            let index: NSInteger = NSInteger(scrollView.contentOffset.x / kScreenWidth);
            
            if index == (arrImage!.count + 1)
            {
                scrollView.contentOffset = CGPointMake(self.bounds.size.width, 0);
                imgPageControl!.currentPage = 0;
                iCurrentIndex = 1;
            }
            else if index == 0
            {
                scrollView.contentOffset = CGPointMake(CGFloat(arrImage!.count) * self.bounds.size.width, 0);
                imgPageControl!.currentPage = arrImage!.count - 1;
                iCurrentIndex = arrImage!.count;
            }
            else
            {
                imgPageControl!.currentPage = index - 1;
                iCurrentIndex = index;
            }
            self.startTime();
        }
    }

    2.怎么用?

            //定义图片数组
            let imageArray: [String] = ["http://tupian.enterdesk.com/2012/1025/gha/1/ebterdesk%20%2810%29.jpg", "http://d.3987.com/qingzang_140909/007.jpg", "http://d.3987.com/mrzr_131022/007.jpg"];
            //声明图片轮播视图
            let scroll = GofImageScrollView.gof_ImageScrollView(imageArray, storeType: .Network, btnClickBlock: { (btn) in
                 printLog("Tag:\(btn.tag)");
                }, superView: self.view) { (make) in
                    make.top.equalTo(0);
                    make.left.right.equalTo(0);
                    make.height.equalTo(200);
            }

    转载于:https://www.cnblogs.com/LeeGof/p/5685475.html

    展开全文
  • 为了建立一个具有QoS能力的Internet,网络的设计者必须开发和配置新型的路由器,这些路由器能够将分组划分成不同的类型,在网络拥塞的时候对不同类别的分组分别进行排队,并为每一类别分配唯一的处理优先级。...
  •  好了,通过第三章的学习,我们已经了解了一些XML和DTD的基本术语,但是我们还不知道怎样来写这些文件,需要遵循什么样的语法,在下一章,将重点介绍有关撰写XML和DTD文档的语法。 第四章 XML语法 七.DTD的语法...
  • 什么是VLAN

    2013-10-23 09:59:12
     VLAN网络可以是有混合的网络类型设备组成,比如:10M以太网、100M以太网、令牌网、FDDI、CDDI等等,可以是工作站、服务器、集线器、网络上行主干等等。  VLAN除了能将网络划分为多个广播域,从而有效地控制广播...
  • 构建高质量的C#代码 完整扫描版

    热门讨论 2014-06-04 12:24:48
    9.2.3 区分子类与基类成员 9.2.4 重写虚成员 9.3 抽象类与抽象成员 9.4 继承的局限性 第10章 接口 10.1 接口的特点 10.2 创建接口 10.3 实现接口 10.4 接口的继承 10.5 实现多个接口 第11章 委托与事件 11.1 访问...
  • Python核心编程第二版(中文)

    热门讨论 2015-04-23 16:40:13
    6.8.3 怎样使用Unicode 6.8.4 Codec是什么 6.8.5 编码解码 6.8.6 把Unicode应用到实际应用中 6.8.7 从现实中得来的教训 6.8.8 Python的Unicode支持 6.9 相关模块 6.10 字符串关键点总结 6.11 列表 6.12 ...
  • 深入理解Python中文版高清PDF

    热门讨论 2012-09-04 19:37:04
     6.8.3 怎样使用Unicode   6.8.4 Codec是什么   6.8.5 编码解码   6.8.6 把Unicode应用到实际应用中   6.8.7 从现实中得来的教训   6.8.8 Python的Unicode支持   6.9 相关模块   6.10...
  • Python核心编程(中文第二版)

    热门讨论 2009-10-02 12:08:14
     6.8.3 怎样使用Unicode   6.8.4 Codec是什么   6.8.5 编码解码   6.8.6 把Unicode应用到实际应用中   6.8.7 从现实中得来的教训   6.8.8 Python的Unicode支持   6.9 相关模块   6.10 字符串...
  • Python核心编程第二版(ok)

    热门讨论 2009-05-21 08:23:44
     6.8.3 怎样使用Unicode   6.8.4 Codec是什么   6.8.5 编码解码   6.8.6 把Unicode应用到实际应用中   6.8.7 从现实中得来的教训   6.8.8 Python的Unicode支持   6.9 相关模块   6.10 字符串...
  • Python核心编程第二版

    热门讨论 2009-07-30 17:07:20
     6.8.3 怎样使用Unicode   6.8.4 Codec是什么   6.8.5 编码解码   6.8.6 把Unicode应用到实际应用中   6.8.7 从现实中得来的教训   6.8.8 Python的Unicode支持   6.9 相关模块   6.10 字符串...
  • Java程序员面试宝典pdf

    热门讨论 2013-02-21 13:06:13
    面试题187 你怎样为工作任务区分轻重缓急 340 面试题188 如果你完全不同意你上司的某个要求,你怎么处理 341 16.3 小结 342 第17章 智商类面试题( 教学视频:43分钟) 343 17.1 脑筋急转弯 343 面试题189 美国有...
  • 包含视频(包含200个文件)和电子书 ...面试题187 你怎样为工作任务区分轻重缓急 340 面试题188 如果你完全不同意你上司的某个要求,你怎么处理 341 16.3 小结 342 第17章 智商类面试题( 教学视频...
  • HTML开发王

    2013-01-03 11:33:09
    3.5.9 内容类型(mime类型) 3.5.10 语言代码 3.5.11 字符编码 3.5.12 单字符 3.5.13 日期和时间 3.5.14 链接类型 3.5.15 介质描述符 3.5.16 脚本数据 3.5.17 样式表数据 3.5.18 框架目标名 3.6 巩固与自测 第2篇 html...
  • [HTML开发王].张亚飞.扫描版

    热门讨论 2011-09-13 12:45:04
    3.5.9 内容类型(mime类型) 3.5.10 语言代码 3.5.11 字符编码 3.5.12 单字符 3.5.13 日期和时间 3.5.14 链接类型 3.5.15 介质描述符 3.5.16 脚本数据 3.5.17 样式表数据 3.5.18 框架目标名 3.6 巩固与自测 第2篇 html...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    学生提问:为什么方法的返回值类型不能用于区分重载的方法? 124 5.3 成员变量和局部变量 124 5.3.1 成员变量和局部变量 125 5.3.2 成员变量的初始化和内存中的运行机制 128 5.3.3 局部变量的初始化和内存中的...
  • 而且,它教给读者怎样对分布式系统进行严格的推理 ―包括形式化建模,为它们所需的行为设计精确的指标,证明它们的正确性.并且用实际的度量标准来评价它们的性能。  本书对分布式算法进行全面介绍,包括最为重要的...
  • 而且,它教给读者怎样对分布式系统进行严格的推理 ―包括形式化建模,为它们所需的行为设计精确的指标,证明它们的正确性.并且用实际的度量标准来评价它们的性能。  本书对分布式算法进行全面介绍,包括最为重要...
  • 读完本书,读者会了解负责招聘工作的HR主管对程序设计面试都有哪些想法,公司将依据怎样的标准评估应聘人员在程序设计面试中的表现,公司将出哪方面的题目来测试你,以及不同的公司在程序设计方面的侧重点有何不同。...
  • 重载的方法能否根据返回类型进行区分? 原创 &和&&的区别 SpringMVC框架 原创 SpringMVC框架基础知识(01) 原创 SpringMVC框架基础知识(02) 原创 SpringMVC框架基础知识(03) 原创 SpringMVC...
  • 文件内容类型 文件的可执行性 行结束字符串 忽略未版本控制的条目 关键字替换 锁定 创建锁定 发现锁定 解除和偷窃锁定 锁定交流 外部定义 Peg和实施修订版本 网络模型 请求和响应 客户端凭证缓存 4. 分支与合并 什么...
  • 2.5.6 在NetWare 网络中,客户需要访问某个类型的服务器时,首先要发送一个 ()广播报文来寻找服务器? 2.5.7 IPX地址网络地址有( )个字节? 2.5.8 对于帧中继描述正确的是? 2.5.9 对于INVERSE ARP的描述正确...
  • 动手体验:了解WEB服务器设置实体内容的MIME类型的原理 3.6.9 Expires 135 3.6.10 Last-Modified 135 3.7 扩展头 136 3.7.1 Refresh 136 3.7.2 Content-Disposition 136 3.8 思考与实践 137 第4章 Servlet开发基础 ...
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    25. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是quals()? 它们有何区别 11 26. 构造器Constructor是否可被override?是否可以继承String类? 11 27. swtich是否能作用在byte上,是否能作用...
  • 窗体与控件" />这些是调用内置的功能,大家要记得是用idMso,如果是自定义的就用id,还要注意区分大 小写,可能有的会员会问,我们怎样知道这些内置控件和功能的名称呢,我这里有一个工作薄,控件列表,也是微软网站...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

怎样区分网络类型