当前位置:Linux教程 - Linux - 为什么有些网站打不开了?

为什么有些网站打不开了?



        
    ChinaByte Linux专区授权转载

    Linux 2.4内核包含了大量的新功能,所以你迫不及待地下载了所需文件,编译、重新引导——系统正常启动了!于是你兴奋不已,不一会儿,你又开始了日常的工作。
      到了午休时间,你想去E-Trade和NASDAQ的网站看看股票的情况。“糟糕!”,当浏览器连接失败时你皱起了眉头,“真奇怪,几乎所有的连接在同一时刻断掉了。”两个小时后,你再次试着打开这两个网站,仍然无法连接。你才开始怀疑是不是系统出了问题。

      唯一的改动是内核。于是你用老版本的内核重新引导,这一次所有的网站都能打开了。再用2.4的内核引导,又打不开了。这是怎么回事?

      原来,新的Linux内核用的是一个全新的网络协议,叫做ECN(Explicit Congestion Notification)。IETF在RCF(Request for Comment)文档中对ECN做了详尽的说明。(http://www.ietf.org/)

      简单来讲,ECN允许主机或路由器之间进行明确的通报,以在网络堵塞时提高整体的传输速度。但问题是,并不是所有的路由器及网络设备都支持ECN。事实上,有些老式的设备把ECN交换包视为非法,并且当做垃圾信息全部丢弃。现在终于明白为什么E-Trade和NASDAQ的网站打不开了。E-Trade和NASDAQ的服务器都不支持ECN,同样,这种问题在其它网站也有可能会发生。

      新协议的普及总是一个漫长的过程,那么现在怎么办?有一个简单的办法,并且无需保留一份2.2.x内核。方法就是:在重新编译2.4内核的时候,去掉CONFIG_INET_ECN这个选项。

      还有一个方法或许更简单,连重新编译都不用——用/proc虚拟文件系统的sysctl特性动态地关掉ECN:

      在控制台下输入:

      echo "0" > /proc/sys/net/ipv4/tcp_ecn

      这样,ECN功能就会被关掉,直到下一次启动。如果把其中的“0”换成“1”,表示把ECN打开。当然,你也可以把这行命令写进rc.local,就不用每次都输入了。

      让我们再用2.4内核启动,关掉ECN。试试连接NASDAQ,怎么样,又正常了吧?不过,还是让我们期待着ECN早日普及,因为它真的能有效地提高网速呢!



    发布人:netbull 来自:Linux专区