由于整个网络是非常巨大的,如果想把整个网络上的主机看成同样的层次,运行相同路由算法,这根本是不可行的。实际的网络是通过分层的思想,将数量庞大的主机联系起来。将整个internet划分成很多不同的自治系统,自治系统内部运行一个路由算法,自治系统之间通过边界路由器进行通讯,这样一个分层系统实际上通过一个默认网关地址联系起来,我们可以注意到前面一篇文章中的网络地址0.0.0.0,这个是默认网关地址,即自治系统接入主干网的入口,如果本自治系统内无法找到目标地址,就要交给上层主干网,因为它跨越了不同的区域,这样两个层次在包传递的过程中就联系起来了。
路由算法主要掌握三个,其中两个是内部网关协议:RIP和OSPF;另一个属于外部网关协议:BGP
RIP:路由信息协议。该协议主要用在机子比较少时,基于UDP协议,所以属于应用层协议。
通过将它的路由表发送给相邻节点,然后相邻节点根据收到的这个路由表对自己的路由表进行更新,从而逐步达到计算出节点本身与整个网络其他节点的路由可达信息。也就是说节点A,收到节点B的路由表后,它会将节点B的到其他节点的距离+1,与节点A当前的路由表信息比较,决定是否更新。该协议有个缺点,就是坏消息更新慢,也就是说当一个节点变得不可达之后,其他节点要经历很长时间才能做出反应,这是因为其他节点都还认为可以到达该节点,而要判断出它不可达,必须当计算出的路径长度大于一个最大值之后。
OSPF:开放最短路径优先。基于IP协议,属于网络层协议。
该协议通过将它与相邻节点的路径信息发送到所有其他节点,这样最后每个节点将得到关于整个网络的拓扑信息,然后利用这个信息,运行djsktra算法,就计算出了节点间的路径。
BGF:边界网关协议。该协议基于TCP,所以属于应用层协议。
但是它是运行在更上层的路由器之间,这些路由器都是自治系统选出来的发言人。由于网络十分巨大,通常有几万台,因此不能再按照自治系统内部的路由算法。主要通过自治系统的发言人之间交换网络可达性信息(即到达某个网络要经过的一系列自治系统),然后上次的路由器把这些信息再发送给下面的路由器,最后达到计算路由的目的。
tcp协议:
通过编号和确认,保证数据传输的可靠性。以第一个字节在整个数据中的序号为seq,然后以接受到的数据的最高序号的下一个字节序号为ack,也就是下一个需要传的字节号为确认号。一般来说要保存一个数据的副本,如果未收到ack,超时后则进行重发。
通过接受端和发送者协议发送窗口大学,可以防止拥塞。整个过程如下所示,可以进行拥塞控制
另外tcp连接建立时还有一个三次握手过程,之所以进行第三次握手,是为了防止接受者收到已失效的连接请求报文段时建立连接。
比如当A向B发送了一个连接请求,但是由于数据包在网上很久没有到达,于是A取消了这次连接,又发起了新的一个连接。这样原来的第一次连接请求就是无效的了,如果过了一段时间,这个数据包又到达了B处。如果B不向A进行确认,而是认为这就是一个请求,那么它就会建立连接,开始等待A发送数据,但是实际上A已经取消了这个连接请求。所以有必要让A再确认该请求的确还存在。
转载请注明作者:phylips@bmy 出处:http://duanple.blog.163.com/blog/static/709717672009814113911677/