网路层路由与应用层路由

网路层路由与应用层路由

IP互连网中,各主机的正确通信都是有正确的路由来保证的,这里说的路由不是硬件路由器,而是路由策略。首先总结一下网络中有哪些和路由相关的地址:
1. MAC地址: 用于链路层中的逐跳路由, 也就是源主机发出数据包中的源MAC地址是源主机的MAC地址,目的MAC地址必须是和源主机直接相连的一个主机的MAC地址,所以一个IP数据报从源主机发往目的主机的过程每经过一次转发都要修改一次源/目的MAC地址;
2. IP地址:用于网络层,也就是IP层的路由,IP数据报在到达最终目标主机(注意,这里是说从网络层看是最终目标主机,但从应用层看不一定是最终目标主机)过程中无论经过多少次转发,其源/目的IP地址是始终不会改变的;路由器就是利用IP数据包中的目的IP地址结合路由表来进行路由IP数据报的;
3. 应用层协议地址:这个和具体的应用层协议相关,不同的应用层协议有不同的地址。比如http协议使用域名作为路由地址;邮件协议SMTP使用 username@domain 的形式来做为路由地址;Diameter使用Destination-Host AVP结合Destination-Realm AVP的方式寻址;SIP也使用类似Email地址的方式寻址 user@domain
 
了解了这些地址之后,现在考虑一个问题,一个从应用层发出来的消息,从源主机到最终目标主机的过程中可能会经过很多次路由器的转发,那么在各次转发过程中,数据包中的三类路由地址都是如何变化的呢?
 
先分析一个简单的例子,从浏览器中输入 http:// www.baidu.com然后回车,这时候浏览器会向baidu网页服务器的80端口发送http请求消息,那么这个消息里面三类路由地址分别是什么呢?应用层地址很明显就是网址 http:// www.baidu.com,那么IP地址是什么呢?这里IP地址就是百度网页服务器的IP地址,那么浏览器是怎么知道这个IP地址的呢?浏览器的实现中应该会有一个Gethostbyname()的API调用,会根据输入的网址调用这个API,然后源主机就会给DNS服务器发送消息来解析baidu网页服务器的IP地址,然后DNS服务器把这个IP地址返回给源主机浏览器,浏览器将http消息和返回的百度IP作为参数调用TCP发送消息的API,这样http请求消息就被加上了TCP头部,TCP头部中的目的IP就是百度网页服务器IP,然后发送出去,请求消息在到达百度服务器过程中无论经过多少次转发,这个IP地址始终不变;但是MAC地址会在每次转发时都改变。
 
上面的例子比较简单,我们看到应用层直接把最终目的地的IP地址填入消息中,然后一直不变,当然这其中需要DNS服务器的参与。那是不是所有应用层协议都能够直接获取到最终目标主机的IP,然后填入消息中发送出去呢?上面我们是靠DNS服务器来获取最终目标主机IP的,可并不是所有应用层协议都是用域名来做为路由地址,因此也就无法通过DNS服务器来获取最终IP地址。
 
现在来考虑一个Diameter消息路由的例子:IMS网络中S-CSCF要给HSS发送一个MAR消息,由于Diameter可以承载在TCP或者SCTP之上,这里以TCP为例。首先看应用层的路由地址,这个是有Diameter基础协议来规定的,Diameter基础协议规定用Destination-Host AVP结合Destination-Realm AVP的方式来路由Diameter消息;应用层知道要将MAR消息发送给哪个HSS,并且需要知道该HSS的DestinationHost和DestinationRealm,比如DestinationHost  = CTC_HCF-4,DestinationRealm  = IMS.CTC.COM,这些数据应该都是在S-CSCF中配置好的。Destination-Host AVP和Destination-Realm AVP采用DNS的组织结构,但是他们只是运营商内部自己定义的,并不在公共DNS域中。这样应用层的路由地址有了,不过Diameter最终是要通过TCP封装后发送出去的,可是S-CSCF可能并不知道HSS的IP地址,那MAR消息下一步应该发送给谁呢? Diameter基础协议中为消息的路由定义了Relay Agent,Proxy Agent,Redirect Agent等设备,这些设备就是专门用来路由Diameter消息的,这里暂且不详述其作用上的差别,先拿Proxy Agent来举例。在S-CSCF上应该有某个Proxy Agent的配置数据,其中包括该Proxy Agent的IP地址或者Hostname,从该S-CSCF发出的Diameter消息都发往该Proxy Agent,因此MAR消息中IP应该填写该Proxy Agent的IP(如果配置数据中用的是Hostname,可以通过运营商内部的DNS服务器获取到相应IP地址)。Proxy Agent收到MAR消息后依次解码到Diameter层,然后检查其DestinationHost和DestinationRealm是否和自己的DestinationHost和DestinationRealm一致,如果不一致则查询Realm路由表和Peer路由表,根据MAR中的DestinationRealm和Realm路由表决定下一跳应发往哪里,比如是另一个Proxy Agent或者就是目的HSS,这里假定通过查找后找到下一跳就是目的HSS,则Proxy Agent将MAR消息中的目的IP地址修改为HSS的IP然后发送出去。HSS收到MAR消息后解码到Diameter层,发现其中的DestinationHost和DestinationRealm与自身的DestinationHost和DestinationRealm完全一致,于是收下MAR消息,至此MAR消息传递完毕。关于Diameter消息路由的详细解释会在一篇单独的Diameter文章中说明。
 
通过上面的两个例子可以看到消息传递过程中,MAC地址最简单,肯定要不断变化。至于IP地址和应用层地址需要根据具体的协议来分析。通常原则是这样的:如果发送端可以直接获得最终目标主机的IP地址,那么这个IP地址就始终不发生变化,并且消息中一般无需包含应用层路由地址,此类协议中一般也不需要定义对消息进行路由的应用层路由设备(注意这里说的是应用层路由设备,比如Diameter中的Proxy Agent),比如HTTP协议;如果发送端无法获得最终目标主机的IP地址,那么消息中通常要始终携带应用层路由地址,并且这个地址是一直不变的,协议中通常需要定义对消息进行路由的应用层路由设备,应用层路由设备对应用层路由地址进行解析决定消息的下一跳,比如Diameter和SIP协议。
  
最后提一下端口号,端口号和主机之间的路由没有任何关系,它的作用只是用来区别同一协议的不同进程,当一个数据包到达目标主机后,首先发到IP层,然后根据IP层的协议指示字段发往上层协议栈,也就是TCP/UDP/SCTP,接下来TCP/UDP/SCTP再根据头部的端口号将数据发往相应的进程。不同协议可以复用同一端口号。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值