Welcome to Snooda's Blog
互联网是如何连通的/路由是怎么生成的/网络代理加速的原因
[| 2012/10/14 01:35]
最近一直苦于没有什么话题来写博,今天终于找到一个。 有人疑惑为什么使用fq代理后访问某些网站反而快了,疑问是不是某防火墙在捣鬼。 世界上一共40亿个ipv4地址,ipv6就更多了,为啥访问任意一个地址就能访问的到?是谁维护了这40亿个地址的分布?从这个ip到那个ip途径的路由是谁来指定的?
从我们电脑的上网来讲,接入网络就能上网,这个是很稀松平常的事,但如果同时接入两个网络呢?比如一根有线一根无线,那么流量是怎么走的呢?这个时候电脑里的路由表就发挥了作用,运行route print命令,可以看到一行行的规则,每个网络包都会从上到下匹配这些规则,如果匹配上,就按规则指定的端口转发出去。一般同一时间段内流量只从一个网卡流出。
进一步讲,家里多人上网的话会有路由器,对于家里电脑间传送文件和访问公网网站,流量是分发到不同端口的,路由器的路由表规则就不再是简单的向某一个端口分发,而是针对不同的ip段走不同的分发规则,一般内网ip流量分发至对应内网端口,公网流量统一从公网端口发送。
对于公网上的流量,一样是按照路由表指示的路径行进,路由表是如何生成的呢?
首先不会是每个ip一条记录,因为数据量太大,这里就用到了ip的分块,最早是用a,b,c三类来划分,后来由于粒度太粗,后来改用子网掩码的形式,子网掩码规定的范围是ip段的网络名,其余部分是可用地址范围(不全是,本文内容不做涉及),这样,路由表的尺寸就能缩减不少。
互联网是网状的,每个路由都会于1个或多个其他路由进行连接,连接可能断开,可能阻塞,可能新建,所以路由表也会不断更新,一个路由器如何得知互联网上其他路由间的连接状态从而更新自己的路由表,就需要用到路由交换协议,比如RIP,路由器将自己所知道的路由信息广播给周边路由,这样网络连通信息就能不断扩散至全网。
不过网络上的路由器成千上万,如果所有路由都按照这种方式,效率非常低下。
现实中,网络划分为了不同的自治系统:AS,AS的编号由ICANN管理,成为一个AS需要有多线路的连通能力,像电信、联通都是AS,一些较大的网络服务商也可以申请AS号和自己的地址空间。每个AS系统内部维护自己地址空间的路由信息,AS系统间的边界路由器使用BGP协议交换各自地址空间,这样,发往一个AS的网络流量只需要发给对应AS的边界路由即可。不过如果AS间网络带宽较小或者不稳定,就会有“跨网络互通问题”,就像国内电信和联通间访问效果不佳。
早期国内主机解决网络互通问题会使用双ip的方案,同时接入一个电信ip和一个联通ip,再搭配智能dns,可以较好的解决了互通问题。但还是有浪费ip地址、智能dns解析不够准确的问题。
后来就有了多线主机有的也叫bgp主机,只有一个ip,但同时接入多个线路,有双线、三线、甚至五线。对于接入的线路,均可以实现较好的访问效果。原理就是机房同时实现和多条线路的互通,将ip广播至每条线路。
对于服务器可以通过接入多线的方式提高接入性能,对于上网者来说也一样。但同时开通两条甚至多条宽带的成本是比较高的,这样我们就可以借助多线服务器来提高网络访问速度。比如辽宁教育网用户访问辽宁联通,需要绕行至东北教育网节点甚至中国教育科研网节点,但如果借助一台部署在辽宁、同时接入教育网线路和联通线路的服务器中转。网络速度就能大大提高。对于访问国外站点也是一样。
资料:
查看全球bgp路由表:http://www.ris.ripe.net/bgpviz/
telnet:route-views3.routeviews.org
从我们电脑的上网来讲,接入网络就能上网,这个是很稀松平常的事,但如果同时接入两个网络呢?比如一根有线一根无线,那么流量是怎么走的呢?这个时候电脑里的路由表就发挥了作用,运行route print命令,可以看到一行行的规则,每个网络包都会从上到下匹配这些规则,如果匹配上,就按规则指定的端口转发出去。一般同一时间段内流量只从一个网卡流出。
进一步讲,家里多人上网的话会有路由器,对于家里电脑间传送文件和访问公网网站,流量是分发到不同端口的,路由器的路由表规则就不再是简单的向某一个端口分发,而是针对不同的ip段走不同的分发规则,一般内网ip流量分发至对应内网端口,公网流量统一从公网端口发送。
对于公网上的流量,一样是按照路由表指示的路径行进,路由表是如何生成的呢?
首先不会是每个ip一条记录,因为数据量太大,这里就用到了ip的分块,最早是用a,b,c三类来划分,后来由于粒度太粗,后来改用子网掩码的形式,子网掩码规定的范围是ip段的网络名,其余部分是可用地址范围(不全是,本文内容不做涉及),这样,路由表的尺寸就能缩减不少。
互联网是网状的,每个路由都会于1个或多个其他路由进行连接,连接可能断开,可能阻塞,可能新建,所以路由表也会不断更新,一个路由器如何得知互联网上其他路由间的连接状态从而更新自己的路由表,就需要用到路由交换协议,比如RIP,路由器将自己所知道的路由信息广播给周边路由,这样网络连通信息就能不断扩散至全网。
不过网络上的路由器成千上万,如果所有路由都按照这种方式,效率非常低下。
现实中,网络划分为了不同的自治系统:AS,AS的编号由ICANN管理,成为一个AS需要有多线路的连通能力,像电信、联通都是AS,一些较大的网络服务商也可以申请AS号和自己的地址空间。每个AS系统内部维护自己地址空间的路由信息,AS系统间的边界路由器使用BGP协议交换各自地址空间,这样,发往一个AS的网络流量只需要发给对应AS的边界路由即可。不过如果AS间网络带宽较小或者不稳定,就会有“跨网络互通问题”,就像国内电信和联通间访问效果不佳。
早期国内主机解决网络互通问题会使用双ip的方案,同时接入一个电信ip和一个联通ip,再搭配智能dns,可以较好的解决了互通问题。但还是有浪费ip地址、智能dns解析不够准确的问题。
后来就有了多线主机有的也叫bgp主机,只有一个ip,但同时接入多个线路,有双线、三线、甚至五线。对于接入的线路,均可以实现较好的访问效果。原理就是机房同时实现和多条线路的互通,将ip广播至每条线路。
对于服务器可以通过接入多线的方式提高接入性能,对于上网者来说也一样。但同时开通两条甚至多条宽带的成本是比较高的,这样我们就可以借助多线服务器来提高网络访问速度。比如辽宁教育网用户访问辽宁联通,需要绕行至东北教育网节点甚至中国教育科研网节点,但如果借助一台部署在辽宁、同时接入教育网线路和联通线路的服务器中转。网络速度就能大大提高。对于访问国外站点也是一样。
资料:
查看全球bgp路由表:http://www.ris.ripe.net/bgpviz/
telnet:route-views3.routeviews.org