要和你 做爱做的事。

0 Comment  

为什么要有IBGP?

0 Comment  

我们知道,在自治系统内部使用IGP路由协议,而在不同自治系统之间使用BGP路由协议(严格来讲,BGP不是路由协议).

BGP产生的原因是为了在不同自治系统(AS)之间进行路由转发,而其中又提出了EBGP和IBGP两种,EBGP用于在不同自治系统之间,而让我不太明白的是IBGP,书上说它是应用于自治系统内部,可是在自治系统内部我们是使用IGP.这就和”BGP是应用于不同自治系统之间”产生矛盾,我想问问大家,IBGP存在的意义,比如说某种情况,需要使用到IBGP,它在网络中起到的作用.

为什么要有IBGP,原因如下:

1、IGP的能力限制,IGP处理路由的条目有限,而目前internet上核心路由器的路由表已经超过10万条。假如没有IBGP,那么这些路由只能采取重分发的方式直接导入到IGP中,这样做的缺点很明显:

第一,IGP协议的作者并没有打算让IGP来处理如此大量的路由,IGP本身也无法处理这样大的路由数量;

第二,如果非要让IGP来处理,那么根据IGP的处理原则,假如这10万路由中任何一条路由发生变化,那么运行IGP的路由器就不得不重新计算路由,更为严重的是,假如其中某一条路由出现路由抖动的情况,例如端口反复UP/DOWN,这会导致所有的IGP路由器每时每刻都不得不把10万条路由重新计算一遍,这种计算量对于绝大多数路由器来说是无法负担的。另外对于运行RIP V1的路由器来说,10万条路由的定期更新,这根本就是无法接受的事情,除去带宽占用率不谈,我想,也只有少量高端的GSR以及TSR能够有这样的性能吧。很显然,我们不可能让网络中所有的路由器都是GSR和TSR,如果真是这样,那么Cisco、juniper以及华为等厂家就要偷笑了。

具体可以参考下面的拓扑:

AS100—-AS200—AS300,假定AS100/200/300各有100台路由器,而AS100中有1W条路由要传递要AS300中,而AS200的路由器不需要学习AS100的路由。如果没有IBGP的话,那么这1W条路由都必须被重分发到AS200的IGP中去,这样的话,相当于AS200中所有的100台路由器都增加了1W条路由。如果利用IBGP的话,那么AS200中只有运行IBGP的路由器会学习到这1W条路由,其它运行IGP的路由器都不会学习到这1W条路由。并且由于BGP的路由控制能力大大强于IGP的路由控制能力,因此运行IBGP的路由器比运行IGP的路由器能更好的对这1W条路由做一些路由策略的处理,从而保证整个AS内部的路由器学习到的路由数目可以控制在可接受的范围之内。

2、路由环路的问题。BGP是靠路由属性来防止路由环路的,例如AS_PATH属性,假如说没有IBGP协议,那么当所有BGP路由重分发到IGP中后,路由属性必然丢失,这就破坏了BGP的路由环路防止机制,产生了路由环路的隐患。

那么引申一下,既然IBGP能够传送所有的路由前缀,为什么还需要IGP?

1、IBGP之间是TCP连接,也就意味着IBGP邻居采用的是逻辑连接的方式,两个IBGP连接不一定存在实际的物理链路。所以需要有IGP来提供路由,以完成BGP路由的递归查找。

2、BGP协议本身实际上并不发现路由,BGP将路由发现的工作全部移交给了IGP协议,它本身着重于路由的控制。因此,如果没有IGP,那么BGP也就毫无用处了。

EBGP与IBGP的区别:
1、路由环路的避免措施不一样,IBGP强制规定ibgp speaker不允许把从一个ibgp邻居学习到的前缀传递给其它ibgp邻居,因此IBGP要求逻辑全连接。EBGP没有这样的要求,EBGP对路由环路的避免是通过AS_PATH属性来实现的。

2、使用的BGP属性不同,例如IBGP可以传递LOCAL_PREF(本地优先属性),而EBGP不行。

3、IBGP有同步的要求,而EBGP没有同步的要求

4、IBGP不需要IBGP邻居之间有物理连接,只需要逻辑连接即可,而EBGP下一般情况下都要求EBGP邻居之间存在物理连接。

EBGP在网络中起什么作用?这个题目太大了,EBGP我认为是在不同的AS之间提供路由的传递以及路由的控制,你了解了BGP属性的用法,也就了解了EBGP的作用。

用户体验设计,来源自用户关怀,目的是产品和用户双赢。

用户,则是广大真实存在的人们,那么来源自生活的用户体验启发,对于虚拟产品的用户体验设计,具有极大的借鉴意义。

以下就是笔者在现实生活中发现的故事,并总结出了许多用户体验设计的原则。

1 坦途与上下楼

自从搬了新的办公区,倒咖啡就成了一件麻烦的事。

我们的办公区身处二楼,在二楼的另外一边有一个咖啡机,而在一楼正下方也有一个咖啡机。

最初不熟悉的时候,常常要在两个之间抉择,究竟去哪儿倒咖啡。

一楼的位置更近,直上直下;而前往二楼的咖啡机,则需要走相对长的一段路,一直走到大楼的另外一边。

从距离因素上看,一楼是一个很好的选择。但是在多次尝试之后,我们果断地放弃了这个选项。

因为一楼虽然绝对距离很近(看上去操作简单),但是中间要过三道门一道楼梯并须刷卡(实际上步骤繁杂),且一楼的咖啡机位置靠近大门常常有冷风吹进来(体验不够良好),而拿着一杯咖啡上下楼是非常危险的(有阻碍操作的危险因素)。

而二楼虽然绝对距离比较远(看上去有许多的复杂内容),但是只需要推开一扇门(步骤简单),不需要上下楼(流程安全简单)。

所以,尽管最初大家选择一个路径更短的方式去做(看上去操作过程很长会在最初吓跑用户),但是时间长了还是放弃了上下楼梯开好多道门的方式(步骤过多会影响操作造成更高的失败率)。

显然,现在同事们都只去二楼的咖啡机了。

由此我们可以总结出:

1, 看上去流程很长会在第一时间吓跑用户

2, 尽量减少步骤,降低失败率

3, 不要设置任何阻碍操作的危险因素

2 买张火车票不容易

很多人在异乡的打工仔(包括我)都有买火车票的经历。由于众所周知的原因,每年人潮汹涌的时候,都需要排很长很长的队去买票。火车站提供了相对比较便捷的服务,就是有一个大大屏幕显示当前所剩票额。 浏览全文 »

坑爹的爱普,坑爹的网易

0 Comment  

此网络最近是相当垃圾,各种不释怀。

live up wow log:

05/11/11 14:48:55.0409 Creating Firewall interface
05/11/11 14:48:55.0411 Microsoft firewall not present or turned off (disabled).
05/11/11 14:48:55.0413 Downloader initializing…
05/11/11 14:48:55.0415 Creating Firewall interface
05/11/11 14:48:55.0417 Microsoft firewall not present or turned off (disabled).
05/11/11 14:48:55.0419 Creating Firewall interface
05/11/11 14:48:55.0420 Microsoft firewall not present or turned off (disabled).
05/11/11 14:48:55.0422 Not found Bonjour service.
05/11/11 14:48:55.0424 Creating UPnPEngine interface 0
05/11/11 14:48:55.0426 Getting UPnPDevice Information
05/11/11 14:48:55.0428 Connecting to: http://cn.tracker.warcraftchina.com:3724/announce with 1
05/11/11 14:48:55.0430 Connected in 48+86 ms
05/11/11 14:48:55.0433 No UPnP Device Found.
05/11/11 14:48:55.0435 Creating UPnP interface 1
05/11/11 14:48:55.0436 Getting UPnPDevice Information
05/11/11 14:48:55.0438 No UPnP Device Found.
05/11/11 14:48:55.0440 Connecting to: http://cn.tracker.warcraftchina.com:3724/announce with 0
05/11/11 14:48:55.0442 Connected in 5556+134 ms

good network live up wow log:
05/10/11 14:45:45.8667 Creating Firewall interface
05/10/11 14:45:45.8669 Success!
05/10/11 14:45:45.8670 Enabling Microsoft Firewall UPnP Framework
05/10/11 14:45:45.8671 Success!
05/10/11 14:45:45.8672 Enabling Blizzard Downloader on Windows Firewall
05/10/11 14:45:45.8673 Success!
05/10/11 14:45:45.8674 Downloader initializing…
05/10/11 14:45:45.8675 Creating Firewall interface
05/10/11 14:45:45.8676 Success!
05/10/11 14:45:45.8677 Enabling Microsoft Firewall UPnP Framework
05/10/11 14:45:45.8678 Success!
05/10/11 14:45:45.8679 Enabling Blizzard Downloader on Windows Firewall
05/10/11 14:45:45.8680 Success!
05/10/11 14:45:45.8681 Creating Firewall interface
05/10/11 14:45:45.8682 Success!
05/10/11 14:45:45.8683 Creating Microsoft Firewall Rule: Blizzard Downloader: 3724
05/10/11 14:45:45.8685 Success!
05/10/11 14:45:45.8686 Creating UPnPEngine interface 0
05/10/11 14:45:45.8687 Not found Bonjour service.05/10/11 14:45:55.0899 No UPnP Device Found.

05/10/11 14:45:45.8688 Getting UPnPDevice Information
05/10/11 14:45:45.8689 Connecting to: http://cn.tracker.warcraftchina.com:3724/announce with 1
05/10/11 14:45:45.8691 Connected in 121+187 ms
05/10/11 14:45:46.9893 No UPnP Device Found.
05/10/11 14:45:47.0091 Creating UPnP interface 1
05/10/11 14:45:47.0286 Getting UPnPDevice Information
05/10/11 14:45:48.9583 Connecting to: http://cn.tracker.warcraftchina.com:3724/announce with 2
05/10/11 14:45:49.2498 Connected in 82+189 ms
再次BS网易,升级包都不敢放个下载地址
无法使用伟大暴雪下载器的童鞋下载允许解渴

http://u.115.com/file/clivtsqc#WoW-3.3.5.13685-to-3.3.5.13930-zhCN-patch.exe

Mother’s Day

0 Comment  

public class MothersDayFromCodeMonkeyView
  {
    public MothersDayFromCodeMonkeyView()
    {
        int age=0; //猿猿刚出生的时候
       saying=”crying”; //除了哭啼,还不知道如何去表达

       while(true)
        {
           try
           {
              Thread.sleep(365*24*60*60*1000L);
           }
           catch (InterruptedException e)
           {
              break; //猿猿明白这意味着什么
           }

           age++; //岁月如梭

          switch(age)
           {
              case 3:
                saying = “妈妈,我爱您”;
                break;
              case 10:
                 saying = “妈,听您的”;
                 break;
              case 16:
                 saying = “我妈真的很烦”;
                 break;
              case 18:
                 saying = “想要离开这个家”;
                 break;
              case 25:
                 saying = “妈,您当时是对的”;
                 break;
              case 30:
                 saying = “我想要去我妈家”;
                 break;
              case 50:
                 saying = “我不想要失去我妈”;
                 break;
              case unknownAge:
                 saying = “只要我妈还能在这,我愿意为了我妈放弃一切”;
                 break;
              default:
                 saying = youDefineIt();
                 break;
           }
        }

       new Thread(){public void run()
       {
          while(isPeopleStillLive())
          {
             saying = “每个人都只有一个妈妈,要好好的孝敬我们的妈妈!”;
          }
       } }.start();

    }

   public boolean isPeopleStillLive()
   {
      return true || false; //猿猿很明白,人类最清楚
   }

    public String youDefineIt()
   {
    //猿猿自己说……
    StringBuffer result = new StringBuffer();
    result.append(“……”);
    result.append(“……”);
    result.append(“……”);
    result.append(“……”);

    return result.toString();
   }

   private static final int unknownAge = 70; //业界把这个常量设成了70,猿猿希望是100
   private String saying =”";

   public static void main(String[] args)
   {
    new MothersDayFromCodeMonkeyView();
   }
}