Work Notes

转载 2016年06月01日 18:04:50

* 好的Blog:

  Windows8内核模式下开发NDIS应用-NDIS Filter讲解                        http://blog.csdn.net/itcastcpp/article/details/7752075

  基于NDIS Filter 抓包                                                                                 http://yexin218.iteye.com/blog/624100

 VS 2013驱动程序开发+VM双机调试                                                        http://www.mamicode.com/info-detail-1118379.html

 Windows驱动开发(中间层)                                                                       http://www.cnblogs.com/shenchao/p/4947976.html

NDIS Filter Drivers指南                                                                              http://bbs.pediy.com/showthread.php?t=183801

* Windows 网络架构

1)最上层是网络应用层。Socket、WinInet编写的程序。
2)第二层是网络API层,也是系统最顶层,为应用程序提供编程接口,且接口协议无关性。接口的定义必须在用户层,内部逻辑实现常在内核层。如:Windows套接字、WinInet库 API等
3)第三层是网络API的内核实现(即第二层的内核层)。内核实现层总是以内核模式设备驱动程序的形式体现,并且他有一个统一的责任:将上层网络请求格式化为TDI格式,并将这个格式化后的IRP发送到下层NDIS协议驱动。
4)再下一层是NDIS协议驱动,又叫TDI传输器。TCP/IP等都是NDIS协议驱动。
5)最下层是NDIS小端口驱动程序,直接驱动物理网卡。

NDIS中间层的数量理论上不限数量.协议驱动绑定了所有小端口驱动,于是能截获所有接受到的包;而中间层驱动不仅绑定了所有小端口驱动,而且还被“所有驱动协议”绑定,因此理论上能截获所有发送和接受到的包。

* NDIS中间层驱动开发示例Passthru工程
1)NDIS驱动的入口函数DriverEntry:做了初始化包装句柄、注册NDIS小端口特征集、注册NDIS协议特征集、关联NDIS两个接口等必做工作,也可以在其中创建设备对象、初始化分发函数表。
初始化包装句柄:NdisMInitializeWrapper函数,获得NDIS包装句柄;
注册小端口特征:先填写小端口特征,再使用NdisIMRegisterLayeredMiniport函数进行注册,输入参数是小端口特征、NDIS包装句柄等,获得关联小端口的NDIS_HANDLE类型句柄(DriverHandle)。
注册小端口卸载关联程序:NdisMRegisterUnloadHandler函数,参数是NDIS包装句柄、卸载出来程序函数句柄。
注销小端口:NdisIMDeregisterLayeredMiniport函数,参数是注册小端口特征时获得的DriverHandle句柄。
注册协议特征:NdisRegisterProtocol函数,输入参数是协议特征、NDIS包装句柄等,获得关联协议的NDIS_HANDLE类型句柄(ProtHandle)。
关联两个接口:NdisIMAssociateMiniport函数,输入参数是DriverHandle、ProtHandle两句柄,这样小端口层和协议层,在一个不透明体中进行了关联。
注:中间层驱动本身就是集小端口驱动、协议驱动于一体的一个混合体驱动。
2)动态绑定NIC设备
绑定过程是由PNP管理器发起,当PNP管理器发现系统中有可用的NIC设备时,它最终会找到所有注册过的中间层驱动。依次调用它们的AddDevice函数。
注:驱动的AddDevice函数都是被NDIS库中函数托管的。
绑定的过程中会调用PtBindAdapter函数,在其函数内实现了协议驱动对小端口的绑定。PtBindAdapter函数调用NdisAllocatepacketPoolEx函数分配用于发送和接受数据包的缓冲池;调用NDISOpenAdapter函数绑定下层的NIC,本质是在NDIS的内核对象中,建立起中间层驱动和下层被绑定驱动之间的注册函数的调用关系;调用NdisIMInitializeDeviceInstanceEx函数,在这个函数内部,调用中间层驱动程序的MpInitialize函数来初始化驱动的虚拟NIC。
3)小端口的初始化(MpInitialize)
通过传入的DriverHandle句柄参数,驱动可以很方便地找到两个特征结构中的函数接口。
调用NdisMSetAttributesEx函数设置适配器上下文,其第三个参数必须设置属性值:
NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT :不对未决包进行超时处理。
NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT:不对驱动程序维持的队 列中的查询和设置命令进行超时处理
NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER:告诉NDIS这是一个中间层驱动
调用PtRegisterDevice函数,生成一个控制设备对象,并设置其派遣函数。
4)中间层发送数据包
中间层驱动要发送网络数据包,最终都必须调用NDISSend/NDISSendPacket/NDISCoSendPackets这个系列的函数。以NDISSend为例,NdisSend在内部通过协议驱动的绑定句柄,找到所绑定的中间层驱动,并找到中间层驱动的MpSend/MpSendPackets函数调用。
因此可以在MpSend/MpSendPackets中对发送的数据包直接进行处理。
(包描述符进行重利用或重申请)
MpSend返回值是NDIS_STATUS_PENDING,则表示发送数据包的异步完成。那么久不能再对包描述符做任何操作了,因为已经对它失去了控制权,响应的操作应该保留到完成函数PtSendComplete中进行。
5)中间层驱动接受数据包
底层面向无连接的小端口驱动可通过下面两种方式指示数据包接收。
方式一:小端口驱动调用过滤无关的NdisMindicateReceivePacket函数,向上层驱动传递数据包描述符指针。当上层驱动处理完毕后,将向NIC驱动程序返回那些包描述符及其所指向的资源。此方式下,如果中间层驱动提供了PtReceivePacket处理函数,则PtReceivePacket函数被调用;否则PtReceive函数被调用。
方式二:小端口驱动调用过滤相关的NdisMXxxindicateReceivePacket函数,传递包头及数据缓冲区指针和缓冲区大小。此方式下,PtReceive函数被调用。
因此可以在PtReceive/PtReceivePacket中对接受的数据包直接进行处理。
上层驱动收到网络包接收通知后,会在合适的时候调用NdisTransferData函数来要求底层驱动将完整的包数据发送给它。我们会在MpTransferData函数中得到上层的这个请求;但因为我们没有完整的报数据,所以应该在这个函数中继续把请求往底层传递。底层驱动如果立刻返回包数据。那么我们在MpTransferData中即能立刻截获到;否则在MpTransferData的异步完成函数PtTransferDataComplete中才能截获到完整的包内容。
因此可以在MpTransferData、PtTransferDataComplete中对数据包进行处理。
6)中间层驱动程序查询和设置
查询和设置,是小端口特征回调中两个重要的接口:一个用来处理OID查询请求,一个用来处理OID设置请求。Passthru中分别对应的是MPQueryInformation和MPSetInformation.
综上,可以在MpSend/MpSendPackets,PtReceive/PtReceivePacket,MpTransferData、PtTransferDataComplete中对数据包进行处理。
5、NDIS包描述符
调用NdisQueryPacket函数,可以找到第一个Ndis_Buffer,然后通过NdisGetNextBuffer函数,来获得后续的NDIS_BUFFER。
调用NdisQueryBufferSafe函数,可以取得Ndis_Buffer中存储缓冲区的虚拟地址。
调用NdisMoveMemory函数,可以将各NDIS_BUFFER内容拷贝到指定的存储区。
十一、安装驱动
1、将netsf.inf、netsf_m.inf、Passthru.sys放在同一目录下。
2、安装
(1) 打开“网络和共享中心”。
(2) 右击“本地连接”或“无线网络”,选择“属性”。
(3) 在弹出的“本地连接 属性”对话框中选中“常规”属性页,点击“安装”按钮。
(4) 在弹出的“选择网络组件类型”对话框中选中“服务”,然后点击“添加”按钮。
(5) 在弹出的“选择网络服务”对话框中点击“从磁盘安装”按钮。
(6) 在弹出的“从磁盘安装”对话框中点击“浏览...”按钮。“netsf.inf”文件,点击“打开”按钮,确定。
(7) 在弹出的“选择网络服务”对话框中选中“Passthru”,点击“确定”按钮。
(8) 在安装过程中对弹出的数字签名对话框都要点击“确认”按钮。
(9) 安装完成后,“Passthru”就出现在了组件列表中。

* NBL由一个或者多个NB构成,每个NB又由一个或者多个MDL构成。

* 中间层驱动本身就是集小端口驱动、协议驱动于一体的一个混合体驱动。本质是在NDIS的内核对象中,建立起中间层驱动和下层被绑定驱动之间的注册函数的调用关系;调用NdisIMInitializeDeviceInstanceEx函数,在这个函数内部,调用中间层驱动程序的MpInitialize函数来初始化驱动的虚拟NIC。

*


在NDIS Miniport Driver中,NetCard驱动的程序,正是这样通过NDIS接口提供的一组类似功能的函数,与物理的网络设备进行交互。其中,最上层是一个NDIS Protocol Driver,它向上提供一个Transport Driver Interface(TDI),向下通过NDIS接口与下面的NDIS中间层的上边界交互,NDIS中间层的下边界通过NDIS接口与下层的NDIS Miniport Driver交互。最后,由NDIS Miniport Driver利用NDIS接口与物理网络设备NetCard交互。

* NDIS是Network Driver Interface Specification,即网络驱动接口规范。NDIS的主要目的就 是为NIC(网络接口卡,Network Interface Cards)制定出标准的API接口。MAC(介质访问控制,Media Access Controller)设备驱动封装了所有的NIC硬件 实现,这样一来所有的使用相同介质的NIC就可以通过通用的编程接口被访问。 它横跨传输层、网络层和数据链路层,定义了网卡或网卡驱动程序与上层协议驱动程序之间的通信接口规范,屏蔽了底层物理硬件的不同,使上层的协议驱动程序可以和底层任何型号的网卡通信。

* NDIS接口简介


在wddk中passthru的例子来说具体的各个接口如下图所示:


1.底层驱动使用NdisMIndicateReceive / NdisMEthIndicateReceive通知上层已经收到数据报文
2.在PtReceive中如果通过NdisGetReceivedPacket得到了一个完整的packet,就分配我们自己的MyPacket,根据底下传上来的packet设置MyPacket,然后调用NdisMIndicateReceivePacket通知NDIS,NDIS会接着调用上层协议驱动的相应PtReceive例程。如果此时MyPacket的status是NDIS_STATUS_RESOURCES,我们就在本函数中释放我们分配的MyPacket;否则我们在上层发送4的时候,在MPReturnPacket中释放MyPacket.
3.在PtReceive中如果通过NdisGetReceivedPacket不能得到一个完整的packet,那我们就直接调用NdisMEthIndicateReceive等函数通知NDIS。
4.当上层协议驱动得到了一个完整的数据报文并且处理完毕以后,它会调用NdisReturnPacket,然后NDIS会调用我们的MPReturnPacket.
5.在我们的MPReturnPacket中,释放我们自己分配的MyPacket,然后同样的向下层调用NdisReturnPacket。下层会释放他们自己分配的packet
6.如果3发生,当底层miniport驱动收到了一个完整的数据报文,它会调用NdisMEthIndicateReceiveComplete,然后NDIS会调用我们的PtReceiveComplete
7.我们的PtReceiveComplete同样的会调用NdisMEthIndicateReceiveComplete,通知NDIS“我们已经收到了完整的报文”
8.当上层协议驱动得知底层已经收到了完整的数据报文以后,可能会调用NdisTransferData,要求下层把剩余的数据传上来。
9.8的调用会导致NDIS调用我们的MPTransferData例程。在MPTransferData中,做同样的调用NdisTransferData。注意该函数的返回值:如果返回success,说明剩余的数据立刻就传上来了。此时会立即返回。10、11两步骤就不会调用;如果返回pending,表明底层在此阻塞,底层会在稍后的时候调用10
10.当底层miniport驱动做好了一个完整的packet,它会调用NdisTransferDataComplete
11.同样在我们的PtTransferDataComplete中,会作出同样的调用。


1.Protocol driver调用NdisSend向下层发送数据报文。
2. Passthru的MPSend/MPSendPacket例程根据上层传下来的数据报文分配MyPacket,调用NdisSend发送到下层。如果返回pending,就在PtSendComplete中释放我们的MyPacket;否则就在本函数中紧接着释放MyPacket。
3. 当下层miniport driver发送完成MyPacket以后,会调用NdisMSendComplete
4. NDIS接着调用passthru的PtSendComplete,在这个函数里边,我们应该释放MyPacket,并且通知上层protocol driver去释放它们的packet。

* 丢包模拟概要

知道这个过程之后就可以模拟丢包,整体架构如下:a

下面为丢包模拟结构图:

(1)协议驱动调用NdisSend 向下层发送数据包Packet;
(2)NDIS 调用中间层驱动的MPSendPackets 函数将上层传递下来的数据包构建另一个数据包MyPacket,同样调用NdisSend 将此数据包传递到下一层驱动。如果返回pending,就在步骤(5)中释放MyPacket 的资源,否则在本函数中立即释放资源;
(3)网卡驱动收到从中间层传递下来的MyPacket;
(4)网卡驱动调用NdisSend 发送MyPacket;
(5)网卡驱动调用NdisMSendComplete,NDIS 接着调用中间层的PtSendComplete 函数释放步骤(2)中MyPacket 的所有资源,并通知上层协议驱动释放步骤(1)中Packet 的资源;
(6)协议驱动释放Packet 的所有资源。
本文对中间层驱动程序进行修改,在步骤(2)中间层中的MPSendPackets 函数中完成步骤(5),网卡驱动就无法得到上层传递的数据包从而实现了包丢弃。修改后发送流程如图3中虚线所示。

* 传统IP技术的主机使用固定的IP地址和TCP端口号进行相互通信。在通信期间,它们的IP地址和TCP端口号必须保持不变,否则IP主机之间的通信将无法继续。移动IP主机在通信期间可能需要在网路上移动,它的IP地址也许会经常发生变化。若采用传统方式,IP地址的变化会导致通信中断。为解决这一问题,移动IP技术引用了处理蜂窝移动电话呼叫的原理,使移动节点采用固定不变的IP地址,一次登录即可实现在任意位置上保持与IP主机的单一链路层连接,使通信持续进行。

* 移动代理(MobilityAgent)
  移动代理分归属代理(HomeAgent)和外区代理(ForeignAgent)两类,它们是移动的IP服务器或路由器,能知道移动节点实际连接在何处。
     归属代理是归属网上的移动IP代理,它至少有一个接口在归属网上。其责任是当移动节点离开归属网,连至某一外区网时,截收发往移动节点的数据包,并使用隧道技术将这些数据包转发到移动节点的转交节点。归属代理还负责维护移动节点的当前位置信息。
  外区网代理位于移动节点当前连接的外区网络上,它向已登记的移动节点提供选路服务。当使用外区代理转交地址时,外区代理负责解除原始数据包的隧道封装,取出原始数据包,并将其转发到该移动节点。对于那些由移动节点发出的数据包而言,外区代理可作为已登记的移动节点的缺省路由器使用。

* 移动IP地址:移动IP节点拥有两个IP地址。
  第一个地址称为归属地址(HomeAddress),这是用来识别端到端连接的静态地址,也是移动节点与归属网连接时使用的地址。不管移动节点连至网络何处,其归属地址保持不变。
  第二个地址是转交地址(CareofAddress)。转交地址就是隧道终点地址。它可能是外区代理转交地址,也可能是驻留本地的转交地址。
  外区代理转交地址是外区代理的一个地址,移动节点利用它进行登记。在这种地址模式中,外区代理就是隧道的终点,它接收隧道数据包,解除数据包的隧道封装,然后将原始数据包转发到移动节点。由于这种地址模式可使很多移动节点共享同一个转交地址,而且不对有限的IPv4地址空间提出不必要的要求,所以这种地址模式被优先使用。
  转交地址是一个临时分配给移动节点的地址。它由外部获得(如通过DHCP),移动节点将其与自身的一个网络接口相关联。当使用这种地址模式时,移动节点自身就是隧道的终点,执行解除隧道功能,取出原始数据包。一个驻留本地的转交地址仅能被一个移动节点使用。转交地址是仅供数据包选路使用的动态地址,也是移动节点与外区网连接时使用的临时地址。每当移动节点接入到一个新的网络,转交地址就发生变化。

* 位置登记(Registration)
  移动节点必须将其位置信息向其归属代理进行登记,以便被找到。在移动IP技术中,依不同的网络连接方式,有两种不同的登记规程。
  一种是通过外区代理,即移动节点向外区代理发送登记请求报文,外区代理接收并处理登记请求报文,然后将报文中继到移动节点的归属代理;归属代理处理完登记请求报文后向外区代理发送登记答复报文(接受或拒绝登记请求),外区代理处理登记答复报文,并将其转发到移动节点。
  另一种是直接向归属代理进行登记,即移动节点向其归属代理发送登记请求报文,归属代理处理后向移动节点发送登记答复报文(接受或拒绝登记请求)。登记请求和登记答复报文使用用户数据报协议(UDP)进行传送。
  当移动节点收到来自其归属代理的代理通告报文时,它可判断其已返回到归属网络。此时,移动节点应向归属代理撤销登记。在撤销登记之前,移动节点应配置适用于其归属网络的路由表。

* 代理发现(AgentDiscovery)
  为了随时随地与其他节点进行通信,移动节点必须首先找到一个移动代理。移动IP定义了两种发现移动代理的方法:一是被动发现,即移动节点等待本地移动代理周期性地广播代理通告报文;二是主动发现,即移动节点广播一条请求代理的报文。移动IP使用扩展的“ICMPRouterDiscovery”机制作为代理发现的主要机制。
  使用以上任何一种方法都可使移动节点识别出移动代理并获得转交地址,从而获悉移动代理可提供的任何服务,并确定其连至归属网还是某一外区网上。使用代理发现可使移动节点检测到它何时从一个IP网络(或子网)漫游(或切换)到另一个IP网络(或子网)。
  所有移动代理(不管其能否被链路层协议所发现)都应具备代理通告功能,并对代理请求作出响应。所有移动节点必须具备代理请求功能。但是,移动节点只有在没有收到移动代理的代理通告,并且无法通过链路层协议或其他方法获得转交地址的情况下,方可发送代理请求报文。

* 隧道技术(Tunneling)
  当移动节点在外区网上时,归属代理需要将原始数据包转发给已登记的外区代理。这时,归属代理使用IP隧道技术,将原始IP数据包(作为净负荷)封装在转发的IP数据包中,从而使原始IP数据包原封不动地转发到处于隧道终点的转交地址处。在转交地址处解除隧道,取出原始数据包,并将原始数据包发送到移动节点。当转交地址为驻留本地的转交地址时,移动节点本身就是隧道的终点,它自身进行解除隧道,取出原始数据包的工作。IETFRFC2003和RFC2004各自定义了一种利用隧道封装数据包的技术。
  在RFC2003中规定,为了实现在IP数据包中封装作为净负荷的原始IP数据包,需要在原始数据包的现有头标前插入一个外层IP头标。外层头标中的源地址和目的地址分别标识隧道的两个边界节点。内层IP头标(即原始IP头标)中的源地址和目的地址则分别标识原始数据包的发送节点和接收节点。除了减少TTL值之外,封装节点不改变内层的IP头标。内存IP头标在被传送到隧道出口节点期间保持不变。从而使原始IP数据包原封不动地转发到处于隧道终点的转交地址。
  使用RFC2004定义的IP内最小封装有一个前提条件,就是当原始数据包被分片时,不能使用这种封装技术。也就是说,数据包在封装之前不能被分片。因此,对移动IP技术来讲,最小封装技术是可选的。为了使用最小封装技术来封装数据包,移动IP技术需要在原始数据包经修改的IP头标和未修改的净负荷之间插入最小转发头标。显然,这种最小封装技术比RFC2003定义的封装技术节省开销。
  当拆装数据包时,隧道的出口节点将最小转发头标的字段保存到IP头标中,然后移走这个转发头标。

* 工作原理
  移动IP协议的工作原理大致如下:
  移动代理(即外区代理和归属代理)通过代理通告报文广播其存在。移动节点通过代理请求报文,可有选择地向本地移动代理请求代理通告报文。
  移动节点收悉这些代理通告后,分辨其在归属网上,还是在某一外区网上。
  当移动节点检测到自己位于归属网上时,那么它不需要移动服务就可工作。假如移动节点从登记的其他外区网返回归属网时,通过交换其随带的登记请求和登记答复报文,移动节点需要向其归属代理撤消其外区网登记信息。

  当移动节点检测到自己已漫游到某一外区网时,它获得该外区网上的一个转交地址。这个转交地址可能通过外区代理的通告获得,也可能通过外部分配机制获得,如DHCP(一个驻留本地的转交地址)。
  离开归属网的移动节点通过交换其随带的登记请求和登记答复报文,向归属代理登记其新的转交地址,另外它也可能借助于外区代理向归属代理进行登记。
  发往移动节点归属地址的数据包被其归属代理截收,归属代理利用隧道技术封装该数据包,并将封装后的数据包发送到移动节点的转交地址,由隧道终点(外区代理或移动节点本身)接收,解除封装,并最终传送到移动节点。
  在相反方向,使用标准的IP选路机制,移动节点发出的数据包被传送到目的地,无需通过归属代理转发。
  无论移动节点在归属网内还是在外区网中,IP主机与移动节点之间的所有数据包都使用移动节点的归属地址,转交地址仅用于与移动代理的联系,而不被IP主机所觉察。
  说明了移动节点在外区网上时,移动IP的工作过程。


* IP选路
IP选路的必要性
由于Internet是由许多不同的物理网络连接而成的,加入Internet的计算机在与其他入网计算机通信时,发送信息的源计算机可能与接收信息的目的计算机在同一个物理网络中;也可能不在同一个物理网络(如以太网)中。为了实现IP数据包从源地址到目的地址的传送,需要针对不同情况进行IP数据报转发路径的选择。
什么是IP选路?
在TCP/IP系统中,选路(Routing)是指在网络中选择一条用于传送IP数据包路径的过程。路由器(Router)是承担选路任务的网络设备。用于决策选路的信息称为IP选路信息(IP routing information)。路由器使用IP选路信息,对所传输的IP数据包进行IP转发(IP forwarding)。
IP数据报的转发
1.直接交付:在运行TCP/IP协议的以太网中,入网的计算机TCP/IP协议族的ARP协议软 件,会帮助查询到本物理网络中其他计算机的MAC地址,使IP数据包可以直接从源计算机传递到目的计算机。如果目的地址在ARP表中匹配,IP数据包被直 接交付时不需要经过路由器。
2.间接交付:当送出IP数据包的源计算机与接收数据包的目的计算机不在同一个物理网络时,就需要借助跨接不同物理网络的路由器实现间接交付。特别是当源计算机与目的计算机被多个物理网络隔开,且它们之间可能有多条信息传输路径时,IP数据包的间接交付不但需要借助多台路由器,还有一个选择最佳路径的问题。
间接交付的过程
1.当一台计算机的ARP协议软件发现要送出的IP数据包目的 IP地址不是本网内的地址,就将它封装到物理帧中发送给本地网的网关。
2.路由器收到该物理帧后,搜索路由信息表(Routing table):如果目的计算机所在的物理网络与该路由器有直接接口,该数据包就被封装到物理帧中,通过该接口直接交付给目的计算机;如果不存在这样的情 况,重新搜索路由信息表,然后数据包又被封装到一个物理帧内,通过下一个物理网络传输到下一个路由器,依次传递,直到到达某个能够直接交付该IP数据包的 路由器。

* IP自适应网络技术(Adaptive-IP Network technologies),简称AIPN技术。AIPN技术是指在不改变原有IP网络结构的基础上,通过引入本地功能实体和引导功能实体,实现了移动节点在因特网上随意漫游的过程中,始终可以以固定的IP地址访问其归属网络,并继续享有原网络中一切权限的关键性技术。

* 由AIPN技术I系列产品形成的柔性局域网系统,主要包括本地服务器(Local Server)、引导服务器(Guide Server)、AIPN客户端(也称作移动节点Mobile Node)这三个关键实体。移动用户通过使用AIPN客户端可以实现AIPN系统提供的所有功能。

* * 移动用户(Mobile User):指使用AIPN系统的客户端软硬件进行工作的网络用户。
* 本地网络(Local Network):英文缩写为LN,指移动用户原本所在的局域网,在本地网络内用户不需要使用AIPN客户端,就可以进行正常的工作。
* 外地网络(foreign Network):英文缩写为FN,指移动用户在漫游过程中接入的网络,同时移动用户必须首先通过外地网络来接入因特网。
* 隧道(Tunnel):指当一个数据分组被封装在另一个数据分组的净荷中进行传送时,所经过的路径。

* AIPN客户端设备:该设备是用于存储用户安全信息的硬件加密设备,通过连接计算机的USB口进行工作。目前该设备也可称作NK-800。
* 移动节点(Mobile Node):英文缩写为MN,指移动用户通过使AIPN客户端硬件设备接入本地网络的计算机设备;
* 本地服务器(Local Server):英文缩写为LS,指位于本地网络链路上的一台提供AIPN服务的服务器设备;
* 引导服务器(Guide Server):英文缩写为GS,指具有可在Internet上路由的IP地址的网络设备,它位于本地服务器与移动节点之间,对移动节点身份进行认证以及转发移动节点数据包的中继设备。

* AIPN客户端是由AIPN客户端设备和AIPN客户端软件组成,使用AIPN客户端之前需要对客户端硬件设备进行授权分发密钥的工作,否则该设备不可使用。当移动用户漫游到因特网的任何位置时,用户将计算机接入因特网后,只要移动用户将已授权的客户端硬件设备插入计算机的USB口并启动AIPN客户端软件,系统会通过因特网链路自动接入用户的原局域网内。实现了移动用户在因特网漫游时,可以随意接入原有网络的需求,在这个过程中AIPN系统保证了用户接入的随意方便性和系统的高度安全性。

* 移动IP与有线手段实现接入的IP技术有什么不同?我们先看看移动IP技术需要以固定的网络IP地址,实现计算机跨越不同网段的漫游功能,并保证基于网络IP的网络权限在漫游过程中不发生任何改变。就像现在使用的移动电话。
在移动互联网中如何实现移动IP?首先每个网络中都需要部署代理路由器,每一部本地的终端设备都会在这个代理路由器上注册(如同每个手机号码都在归属地注册),终端设备会获得一个归属于此网络的IP地址,所有数据包都可以以终端IP地址作为目的地址到达这个终端设备。这个代理路由器称为家乡代理(Home Agent,HA)。
其次需要部署外地代理服务器。当终端设备漫游到外地网络时,终端设备需通知家乡代理以及所在网络的代理路由器,这个代理路由器称为外地代理(Foreign Agent,FA)。家乡代理和外地代理之间将建立一个隧道。(如同手机在漫游地注册,然后漫游地网络通知手机号码的归属地网络)。
再次需要使用隧道技术。在通信的过程中,数据包仍然将终端设备的原地址作为目的地址,首先到达家乡代理。家乡代理根据终端设备的记录,通过隧道,将这个数据包转发给外地代理。外地代理再转发给处于外地网络中的终端设备。(如同电话先达到被呼叫号码的归属地网络中,归属地网络根据被呼叫号码的漫游记录,把电话转到漫游地,再由漫游地网络互通手机。)

*  隧道技术
隧道技术在移动IP中非常重要。移动IP使用IP的IP封装、最小封装和通用路由封装(GRE)三种隧道技术。
(1)IP的IP封装
由RFC2003定义,用于将IPv4包放在另一个IPv4包的净荷部分。其过程非常简单,只需把一个IP包放在一个新的IP包的净荷中。采用IP的IP封装的隧道对穿过的数据包来说,犹如一条虚拟链路。移动IP要求归属代理和外埠代理实现IP的IP封装,以实现从归属代理到转交地址的隧道。
(2)IP的最小封装
由RFC2004定义,是移动IP中的一种可选隧道方式。目的是减少实现隧道所需的额外字节数,通过去掉IP的IP封装中内层IP报头和外层IP的报头的冗余部分完成。与IP的IP封装相比,它可节省字节(一般8byte)。但当原始数据包已经过分片时,最小封装就无能为力了。在隧道内的每台路由器上,由于原始包的生存时间域值都会减小,以使归属代理在采用最小封装时,移动节点不可到达的概率增大。
(3)由RFC1701定义,是移动IP采用的最后一种隧道技术。除了IP协议外,GRE还支持其它网络层协议,它允许一种协议的数据包封装在另一种协议数据包的净荷中。在某些应用中,GRE防止递归封装的机制也非常有吸引力。




相关文章推荐

Work Rules

  • 2017年06月22日 01:01
  • 2.69MB
  • 下载

【work】判断ip地址是否合法

写一个程序输出以下ip列表(21.45.34.112,0.25.132.143,20.268.56.10)是否是合法的ip...

cx-work2操作手册

  • 2015年07月22日 12:04
  • 25.22MB
  • 下载

root 360 work

  • 2014年04月17日 12:58
  • 3.81MB
  • 下载

nginx启动流程之work初始化

一、work进程的创建 在master进程的ngx_start_worker_processes函数中,会调用ngx_spawn_process函数开始创建work进程。创建完成后master进程、w...
  • ApeLife
  • ApeLife
  • 2016年12月09日 23:52
  • 687

Semantic Web Home Work

  • 2014年05月19日 13:04
  • 16KB
  • 下载

cpp work multy thread

  • 2013年08月19日 20:52
  • 347KB
  • 下载

对INIT_WORK的理解

以前内核里对这个函数是这样定义的 #define INIT_WORK(_work, _func, _data),可以理解为INIT_WORK会在你定义的_work工作队列里面增加一个工作任务,该任务就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Work Notes
举报原因:
原因补充:

(最多只允许输入30个字)