主机的IP地址决定了它所处的位置以及出口路由器,如果要保证主机在移动时IP不变,即使跨越网络边界通讯也不会中断的话,对于传统的因特网传输来说无疑是一个挑战,Mobile IP就是针对这个挑战产生的解决方案。
 
Mobile IP的基本原理是在用户的注册位置和所处的外地之间建立隧道(Tunnel),注册位置的路由器将收到的数据通过隧道转发到所处的外地,这样无论用户在哪,都有一条隧道跟着他,发送端的数据都会先发到注册位置。
 
三层介质移动 异质移动功能(在不同网络间的移动) 如 Mobile IP 
二层介质移动 同质移动功能(同一网络内的移动)  如 GPRS WLAN
 
相关名词介绍
 
CN :correspondent node   通信节点    好比你的老朋友
MN :mobile node              移动节点    好比你本人
FA :foreign agent               外地代理    好比你临时租的房子
HA :home agent                 本地代理    好比你的父母家
COA :care of address        转交地址    好比你租的房子的门牌号
 
移动IP工作流程
 
1.代理发现  FA周期性的发送代理通告信息,使MN确定自身所处的位置。
 
2.取得COA地址  若MN处在HA,则按传统IP工作,直接通信即可;若是在FA所在地,则要向FA请求COA地址,即第二IP地址。
 
3.COA地址注册/取消  将COA地址告诉注册地的HA,使HA知道当前用户的所在地,并为其维护一组映射。
 
4.数据的隧道化传送  数据从CN发送MN,保持通信不中断。
 
5.FA转发反向数据包  MN收到数据再上行发送的时候,由于CN的位置是固定的,IP也是固定的,所以由FA直接转发到CN就行
 
代理发现
 
ICMP  Internet control message protocol  TCP/IP网络中转发数据的保证机制
IRDP  ICMP Router Discovery Protocol  让主机发现当前转发的Router,利用此功能作为代理发现机制
 
消息类型包括代理广播消息和代理请求消息,代理广播消息是HA或FA周期性的发送广播,并含有自身参数,手机被动接受;请求代理是手机主动发送请求,这时其所在地的FA或HA要及时给予广播回应。
 
MN如何知道自身所处的位置
 
1)利用IRDP中的生存时间域字段,就是告诉移动节点:如果在N时间内还没有收到我的代理广播消息,那就证明你不在我的控制范围之内了,出于传输的不可靠性的考虑,一般发送代理广播的频率是通知你要接受广播的频率(即尚存时间域所标志的频率)的两倍。
 
2)如果一台手机同时收到多个代理广播的消息,可以比较其网络前缀,若相同,说明还处于原访问地,若不同,则说明已发生移动。
 
MN收不到广播时的处理
 
1)设法在归属地网络进行通信   2)设法用DHCP或手工配置COA地址
 
如果到一个访问地不支持mobile IP,即没有什么FA,手机会设自己用传统IP工作,看是否有HA存在,还不行的话,就会DHCP或者手动设置自己的COA地址。
 
FA向HA进行注册: (MN自身的IP就是在HA那里注册的IP)
 
FA会将MN的信息传给HA(这也是MN借助FA转发功能告诉自己的HA它的COA地址),并记录移动节点的IP与Mac地址的对应关系,为其转发数据;FA与HA在这个过程中会协商一些参数,同时HA将移动节点的注册IP与COA地址形成映射。
 
如果外网发一个数据包给MN,Mobile IP用的是间接转发机制,即数据会先传给HA,HA通过查表(注册IP与COA的映射关系),找到MN的COA地址,然后建立一条HA到COA的隧道,通过隧道传给FA,再传到MN。
 
注册还能使一个快过期的注册重新注册,使HA知道最新的MN当前位置,若移动节点回到本地(即HA所在地),还要进行注销的工作,然后用传统IP进行通讯。
 
COA地址
 
COA地址分为两类: MN-COA 和 FA-COA。 MN-COA不用升级设备,但每个引动节点都要有两个IP地址,这样比较费;FA-COA需要设备支持Mobile IP,但多个手机可以共享一个COA地址。
 
FA-COA:移动节点到一个访问地网络,通过IRDP消息,获知当前网络的FA基本信息,然后FA向HA发送注册信息,注册的COA地址(即第二IP地址)是FA接口的IP地址(多个MN共享),隧道在FA和HA之间建立。
 
MN-COA:这就是在传统网络里,当地的网络并不识别FA和HA,即不支持Mobile IP,移动节点通过DHCP或手工配置获取COA地址,此时手机上就有两个IP地址,依然是用COA地址和HA建立隧道,承载外网数据。
 
频繁注册的问题
在网络边界的节点移动会导致频繁注册,生成大量的注册信息,解决办法如下:
 
1)移动IP多重绑定   在HA中,对一个注册用户的IP,绑定多个COA地址,当MN在多个网络边界时,如在网络A,会通告HA说在A处,然后又进入网络B,这时又会通告说在B处,后一个网络在通告时告诉HA不要删除网络A的信息,这样HA会认为你即在网络A又在网络B,当外网有数据时,同时建立两条隧道到A和B,发送两份数据,手机可能会收到1份或者2份,收到2份的话并没有关系,上层有TCP协议来支持数据包的重新排序问题。
 
2)在数据链路层上解决,即用二层解决三层问题,将二层做得足够大,来减少三层的频繁注册。
 
如何进行隧道的包转发
 
基本路线:CN的信息依然指向MN,HA利用代理ARP截获该信息,通过隧道传送到FA,而后反向的信息会直接传送。
 
CN通常为运行传统IP的服务器,不知道Mobile IP,也不知道客户是移动的。MN已处于访问地网络,不在注册地网络这件事只有HA晓得,当外网有数据发给MN,就会从CN发起,HA利用代理ARP技术冒充MN的Mac地址,从而得到这个数据包,然后HA查表,依据第一IP与COA的对应关系,建立隧道,其实FA与MN并不在同一网段,但MN的注册是经由FA转发的,所以他知道MN的Mac地址,就可以通过数据链路层将数据转发给MN。
 
这是下行传输,到了上行,CN的地址是固定不变的,不管MN处于什么地方,要找到一个固定地址对于传统IP网络来讲是很容易搞定的。
 
隧道技术--实现数据的透明传输
 
技术的3个要素:被承载协议(管子里跑的是什么)  承载协议(是什么在支撑着管子) 承载方法(管子里跑的东西怎么装的箱)。
 
封装方法有3种:IP in IP封装  最小封装  GRE封装
 
IP in IP :在传统的IP包外又封装了一层报头,协议类型字段设为4,生存时间TTL字段要设一个足够大的值,保证能到达隧道出口。
 
最小封装:减少实现隧道所需要的额外字节数,实际上也是IP包外加IP报头,只不过去掉了内层IP头中冗余的部分,协议类型为55。
 
GRE封装:GRE同前两种封装方式不同,不必支持IP协议,GRE中有Protocol Type来区分不同网络层协议。
 
反向隧道
 
在MN进行上行传输时,本来是不用再回传到HA再到CN的,但在现行网络上,为了限制源IP欺骗的发生,会进行源IP的检查,通过路由器或防火墙去执行,比如10网络在A端口,20网络在B端口,如果在B端口上发起一个源为10,目的也为10的包,肯定就不对了。

但在Mobile IP里,移动节点本身很可能不在HA处,且肯定不与FA在同一网段,这样就有可能通不过一些防火墙的策略,为了避免上行隧道失效,先到HA那里再转发是必要的。