VRRP協議具體解釋

轉帖:http://blog.chinaunix.net/space.php?uid=11654074&do=blog&id=2857384

Contents?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? Page

文件夾

入木三分學網絡第一篇--VRRP協議具體解釋... 1

1. VRRP產生背景及應用環境... 2

1.1為什么要用VRRP. 2

2VRRP基本原理及實現過程... 5

2.1 VRRP基本概念... 5

2.2 VRRP報文組成... 6

2.3? VRRP協議狀態機... 8

2.3.1初始狀態(Initialize... 8

2.3.2備份路由器狀態(Backup... 9

2.3.3 Master路由器(Master state... 10

2.4 VRRP通告報文的發送與接收處理流程... 11

3. VRRP的兩種應用需求:... 12

冗余備份、負載均衡... 12

4. 實例研究... 14

4.1 VRRPCisco路由器上的實現... 14

4.2 VRRPRedback路由器上的實現... 15

4.3 VRRPJuniper路由器上的實現... 18

5. VRRP的安全性... 19

6. 一個典型的VRRP故障分析... 20

7.后記... 22

?

  • 作者:張蒙 (zmouc)
  • 電子郵箱:qdzhangmeng@163.com
  • MSN:qdzhangmeng@163.com
  • QQ? : 407-960-134
  • 博客地址:http://zmouc.cublog.cn
  • 建立日期:2010年07月23日
  • 版??? 本:1.0
  • 版權說明:本文基于創作共用約定,內容歸作者版權全部,歡迎大家轉載,但要保留??????? 作者的完整信息和出處,謝謝!

1. VRRP產生背景及應用環境

1.1為什么要用VRRP

VRRPVirtual Router Redundancy Protocol------虛擬路由器冗余協議,其最新技術標準是RFC3768

?

為什么要用VRRP呢,主要是為了實現數據鏈路層互通設備的冗余備份功能,我們來看圖一:

?

圖一(常規網絡架構)

?

通過上圖能夠看到,常規的局域網一般都是多個終端接到交換機上,然后通過單獨的出口路由器連接到Internet,這時候問題來了,假設這個出口路由器壞掉了,那么整個上行的流量就會所有斷掉,這就是傳說中的單點故障。

? 所以說我們要避免出現這樣的情況,本著冗余備份的思想,我們對上面的網絡進行物理改造,例如以下圖:

圖二(消除了單點故障的常規網絡架構)

?

如今,這個網絡一共同擁有兩個Internet出口,這樣不論什么一個出口路由器出現問題都不會導致終端用戶的上行流量斷掉。

?

另外一個問題出現了,我們怎么讓終端PC知道局域網中有兩個出口路由器,并在當中一個出現問題后自己主動選擇另外一個呢?可採用的方案包含讓終端PC執行動態路由協議,比方RIPOSPF,或者ICMP router Discovery clientDISC),或者指定一條靜態缺省路由。

?

可是這三種實現方法都有其劣勢及不可行之處,我們來詳細分析一下。首先對于在每個終端PC上執行動態路由協議來講,差點兒是不可能的,這當中牽涉到網管的技術能力和日常維護、安全性問題、以及某些終端平臺不支持動態路由協議,比方我們經常使用的XPWindows7都不支持,而windows Server系列OS支持。

?

假定我們在終端PC上部署了動態路由協議,那么每個終端用戶都會遇到以下這種情況:

10086:尊敬的用戶您好,申報RIP故障請按1,申報OSPF故障請按2,申報ISIS故障請按3……….

用戶:( o )啊!我家是OSPF,按2

10086:您好,您申報的故障是OSPF,請進一步選擇,OSPF鄰居無法建立請按1OSPF密鑰不正確請按2,鏈路狀態數據庫異常請按3,路由表錯誤請按4…………..

用戶:( o )啊!……………然后吐血身亡………….

?

所以說,N多現實問題和困難導致在終端PC上部署動態路由協議具有不可行性。

?

? 那么對于在終端PC上部署DISC等鄰居或路由器發現協議呢?也存在種種問題,例如在網絡內存在大量主機,每一臺都須要執行DISC,除了添加主機的處理負擔外,也會導致協議收斂緩慢,從而不能及時發現不可用鄰居路由器,產生路由黑洞,這是不可接受的。

?

? 如今僅僅剩下在終端PC上配置靜態缺省路由了(其詳細表現形式通常是設置網關),這是差點兒每個IP平臺都支持的配置功能,即使是一部IP電話機,依據這個思路,我們在終端上配置多個默認網關就可以實現路由備份了,可是存在下面兩個問題:

?

1.?????? 對于下行設備是PC來講,配置了多個默認網關之后,當中一個會作為活動默認

網關,其他的作為備份默認網關,其依照下列過程運行流量轉發和失效網關檢測:

TCP/IP在通過活動默認網關向某個目標IP地址進行TCP通信時,假設失敗的嘗試次數達到TcpMaxDataRetransmissions注冊表值(默覺得5)的一半(3)還沒有收到響應,TCP/IP將到達該目標IP地址的通信改為使用列表中的下一默認網關,這一步是通過更改該遠程IP地址的路由緩存項(Route Cache EntryRCE)來實現的,從而使用列表中的下一個默認網關來作為下一跳地址。當中RCE是路由表中的一個條目,用于存儲目的地的下一跳IP地址。當超過25%TCP連接轉向下一默認網關時,TCP/IP將活動默認網關改動為這些連接當前使用的默認網關。

  假設此時原始默認網關從故障中回復,TCP/IP將繼續使用當前的活動默認網關,而不會轉移到原始默認網關,除非重新啟動計算機。假設當前的活動默認網關也出現故障,那么TCP/IP就會繼續嘗試使用列表中的下一個默認網關,在嘗試完整個列表后將返回到列表的開始,又從第一個默認網關開始進行嘗試。

  死網關檢測僅監視TCP流量,假設其它類型的流量連接失敗,不會切換默認網關。另外TCP是端到端的協議,因此即使當前默認網關全然正常,本地計算機的TCP通信失敗也可能會導致切換默認網關。

? 當不同網絡接口所連接的網絡之間沒有連接性時(如一個網絡接口連接到Internet,而一個網絡接口連接到內部網絡),假設在多個網絡接口上同一時候配置默認網關,在活動默認網關出現故障導致切換默認網關時,就可能會引起連接性故障。比如活動默認網關為Internet連接,當它出現故障時,此時默認網關切換為內部連接,此時,本地計算機將無法再訪問位于Internet連接上的主機。對于這樣的情況,微軟建議使用 route add 來加入相應目的網絡的匹配路由,而不是設置多個默認網關,這其實就是最長匹配原則,精確路由優先于缺省路由。

?

2.對于下行設備是路由器的情況,其不會切換默認路由,僅僅會依照配置好的缺省

路由優先級進行流量轉發,從而導致路由黑洞。

?

結合上面兩個原因,在網絡出口路由器的下行設備上配置缺省路由的方法也不可

?

綜上所述,要想消除單點故障,又同一時候實現下行設備在故障發生時的流量無障礙

發,以上的三個方法均不可行,所以人們開發出了一種全新的協議:VRRP,這

協議無需下行設備與出口路由器進行交互性操作,卻全然實現了網絡出口的冗

余備份,下一節,我們就來具體討論下VRRP的基本原理及實現過程。

?

2VRRP基本原理及實現過程

2.1 VRRP基本概念

VRRP路由器:執行VRRP協議一個或多個實例的路由器

?

虛擬路由器:由一個Master路由器和多個Backup路由器組成。當中,不管Master由器還是Backup路由器都是一臺VRRP路由器,下行設備將虛擬路由器當做默認網關。

?

VRID虛擬路由器標識,在同一個VRRP組內的路由器必須有相同的VRID,事實上VRID就相當于一個公司的名稱,每一個員工介紹自己時都要包括公司名稱,表明自己是公司的一員,相同的道理,VRID表明了這個路由器屬于這個VRRP組。

?

Master路由器:虛擬路由器中承擔流量轉發任務的路由器

?

Backup路由器:當一個虛擬路由器中的Master路由器出現問題時,可以取代Master路由器工作的路由器

?

虛擬IP地址:虛擬路由器的IP地址,一個虛擬路由器能夠擁有一個或多個虛擬IP址。

?

IP地址擁有者:接口IP和虛擬路由器IP地址同樣的路由器就叫做IP地址擁有者。

?

IP地址:從物理接口設置的IP地址中選擇,一個選擇規則是總是選用第一個IP址,VRRP通告報文總是用主IP地址作為該報文IP包頭的源IP

?

虛擬MAC地址:組成方式是00-00-5E-00-01-{VRID},前三個字節00-00-5EIANA組織分配的,接下來的兩個字節00-01是為VRRP協議指定的,最后的VRID是虛擬路由器標識,取值范圍[1255]

2.2 VRRP報文組成

以下我們來看VRRP報文的詳細組成:

?

圖三(VRRP報文格式,取自RFC3768)

?

詳細字段含義:

?

Version:VRRP協議版本號號,RFC3768定義了版本號2.

?

Type:該字段指明了VRRP報文的類型,RFC3768僅僅定義了一種VRRP報文,那就是

VRRP通告報文,所以該字段總是置為1,若收到的VRRP通告報文擁有非1的類型

值,那么會被丟棄。

?

Virtual Rtr ID:也就是我們上面介紹過的VRID,一個VRID唯一地標識了一個虛擬

路由器,取值范圍是[1,255],所以一臺路由器的接口能夠同一時候執行最多255個VRRP

實例,此字段沒有缺省值,必須人為設定。

?

Priority:優先級,在一個虛擬路由器中用來選取Master路由器和Backup路由器,值越大表明優先級越高,此字段共同擁有8個bit,取值范圍[1,254],若沒有人為指定,缺省值是100。當中,VRRP協議會將IP地址擁有者路由器的該字段永遠設置為255,若人為指定為其他值,也不會影響VRRP協議的默認行為,即IP地址擁有者路由器的該字段總是255。另外,此字段設置為0會出如今以下這樣的情形中,當Master路由器出現故障后,它會立馬發送一個Priority置0的VRRP通告報文,當Backup路由器收到此通告報文后,會等待Skew time時間,然后將自己切換為Master路由器,當中Skew time=(256-Backup路由器的優先級)/256,單位為秒,比如若Backup路由器的優先級為100,那么Skew time=156/256=0.609秒,對于主路由器來說,Skew time并沒有實際意義,盡管cisco的路由器也會計算并顯示出來。

?

Count IP Addrs:VRRP通告報文中包括的IP地址數量,這個字段事實上就是為一個VRRP虛擬路由器所分配的IP地址的數量,我們來看一個cisco的實際樣例:

配置例如以下:

?

interface Ethernet1/0

?ip address 192.168.10.102 255.255.255.0

?duplex half

?vrrp 1 ip 192.168.10.52

?vrrp 1 ip 192.168.10.51 secondary

?vrrp 1 ip 192.168.10.53 secondary

end

?

我們來看一下上面的配置在封裝成VRRP通告報文的時候,是怎樣進行的,例如以下

?

圖:

圖四(VRRP報文的抓包分析)

?

大家能夠看到,VRRP通告報文中的Count IP Addrs字段的值為3,這是由于我們配置了3個虛擬IP地址,另外,以下的IP Address字段也依照我們配置虛擬IP的順序進行了封裝。

?

Auth Type:認證類型字段,是一個8位的無符號整數,一個虛擬路由器僅僅能使用一種認證類型,假設Backup路由器收到的通告報文中認證類型字段是未知的或和本地配置的不匹配,那么它將丟棄該數據包。

?

值得注意的是,在RFC2338中為VRRP定義了3種認證類型:無認證、明文認證、MD5認證,可是在興許的實踐中發現,這些手段無法提供行之有效的安全性,而且還會導致多個Master路由器的問題,所以在最新的VRRP標準:RFC3768中已經去掉了全部的認證類型。

?

眼下認證類型字段的定義例如以下:

?

0 – 無認證,此時以下的Authentication Data字段將會被置為全0,接收到的路由器也會忽略此字段。

?

1 – 保留,是為了向前一個版本號的RFC2338提供兼容性

?

2 – 保留,是為了向前一個版本號的RFC2338提供兼容性

?

Adver Int::此字段規定了Mater路由器向外發送VRRP通告報文的時間間隔,以秒為單位,取值范圍是[1,255],若沒有人工配置,缺省為1秒。

?

Checksum:整個VRRP報文的校驗和,計算過程中,將Checksum字段置為0,計算完畢后將結果填入此字段。若希望進一步了解Checksum的計算,能夠查看RFC1071(CKSM)。

?

IP Address:此字段存放3個VRRP虛擬路由器的虛擬IP地址,配置了幾個就封裝幾個,在上面的cisco實例中我們配置了三個,那么VRRP通告報文就會封裝3個。

?

Authentication Data:RFC3768中規定,此字段僅僅是為了向RFC2338兼容,在實際的封裝時,全置為0.,接收方也會忽略此字段。

2.3 ?VRRP協議狀態機

?

?對一個VRRP虛擬路由器來講,,參與它的每一臺VRRP路由器,都僅僅有3VRRP狀態:InitializeMasterBackup,在講述這三種狀態時會碰到一些新的概念,我們會在第一次遇到時做詳解。

?

2.3.1初始狀態(Initialize

?

這是配置好VRRP后,VRRP等待一個開始事件時的狀態,當本地VRRP進程切換到此狀態后,會依次運行下列操作:

?

2.3.1.1假設本地優先級為255,也就是說自己是IP擁有者路由器,那么接下來它會:

?

1.發送VRRP通告報文

?

2.廣播免費ARP請求報文,內部封裝是虛擬MAC和虛擬IP的相應,有幾個虛擬IP址,那么就發送幾個免費ARP請求報文。

?

3.啟動一個Adver_Timer計時器,初始值為Advertisement_Interval(缺省是1秒),當該計時器超時后,會發送下一個VRRP通告報文

?

4.本地VRRP進程將自己切換為Master路由器

?

2.3.1.2假設,本地優先級不是255,,那么接下來它會:

?

1.設置Master_Down_Timer計時器等于Master_Down_Interval,也就是主路由器死亡時

間間隔,假設此計時器超時,那么Backup路由器就會宣布主路由器死亡。

當中Master_Down_Interval = 3*Advertisement_Interval+ Skew_time舉例來說,一個VRRP實例(也就是一個VRRP虛擬器)的優先級是100,報文發送

間隔是1秒,那么Master_Down_Interval = 3*1s + 256-100/256s = 3.609秒。

?

2.本地VRRP進程將自己切換為Backup路由器

?

2.3.2備份路由器狀態(Backup

2.3.2.1

?

備份路由器是為了監控Master路由器的狀態,假設一個VRRP路由器處于此狀態,那么它會:

?

1.?????? 不響應對虛擬IP地址的ARP請求報文

?

2.?????? 丟棄幀頭目的MAC地址是虛擬MAC的幀

?

3.?????? 丟棄IP頭中目的IP地址是虛擬IPIP

?

2.3.2.2

?

假設此時該VRRP路由器收到了一個shutdown事件,那么它會:

?

1.??? 取消Master_Down_Timer

?

2.??? 轉換為初始狀態(Initialize state

?

2.3.2.3

?

假設Master_Down_Timer超時,那么該VRRP路由器會運行:

?

1.發送一個VRRP通告報文,

?

2.廣播免費ARP請求報文,內部封裝是虛擬MAC和虛擬IP的相應,有幾個虛擬IP

地址,那么就發送幾個免費ARP請求報文。

?

3.設置Adver_Timer計時器為Advertisement_Interval(缺省為1秒)

?

4.切換到Master狀態

?

2.3.2.4

?

假設該Backup狀態的VRRP路由器收到了一個VRRP通告報文;

?

當該VRRP通告報文的優先級字段為0時,那么路由器會將當前的

Master_Down_Timer 設置為Skew_Time

假設優先級不為0,而且大于或等于本地優先級,那么本地路由器會重置Master_Down_Timer計時器并保持Backup狀態;

?

假設優先級不為0,而且小于本地優先級,假設開啟了搶占模式(Preempt mode),

那么該Backup路由器等待指定的搶占延遲時間后將自己切換為Master路由器;并執

Master路由器的全部動作;比如:vrrp 1 preempt delay minimum 10,表示等待10

后切換自己為Master

?

假設優先級不為0,而且小于本地優先級,假設沒有開啟搶占模式(Preempt mode),那么本地路由器保持Backup狀態。

?

2.3.3 Master路由器(Master state

?

處于Master狀態的路由器會運行目的MAC為虛擬MAC數據幀的轉發,這里要清楚是對于下行設備的arp表里,該虛擬MAC是和虛擬IP地址相相應的。

?

2.3.3.1

?

當路由器處于Master狀態時,會進行以下的動作:

?

1.??? 響應對虛擬IP地址的ARP請求

?

2.??? 轉發目的MAC地址是虛擬MAC的數據幀

?

3.??? 拒絕目的IP地址是虛擬IP的數據包,除非它是IP地址擁有者(也就是優先級是

255的那個路由器)。

?

2.3.3.2

?

假設處于Master狀態的VRRP進程收到了一個shutdown事件,那么它會:

?

1.??? 取消Adver_Timer計時器

?

2.??? 發送一個優先級字段置零的VRRP通告報文

?

3.??? 切換為初始狀態(Intialize state

?

2.3.3.3

?

假設Adver_Timer計時器超時,那么:

?

1.??? 發送一個VRRP通告報文

?

2.??? 重置Adver_Timer計時器

?

2.3.3.4

?

假設收到了一個VRRP報文且其優先級為0,那么:

?

1.? 發送一個VRRP通告報文

?

2.? 重置Adver_Timer計時器

?

2.3.3.5

?

假設收到了一個VRRP報文且其優先級高于本地優先級,或者收到的VRRP報文優先級等于本地優先級可是主IP地址高于本地的主IP地址,那么:

?

1.??? 取消Adver_Timer計時器

?

2.??? 設置Master_Down_Timer計時器為Master_Down_Interval

?

3.??? 切換為Backup狀態

轉載于:https://www.cnblogs.com/mfrbuaa/p/4201622.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375385.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375385.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375385.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Win32ASM學習[3]:局部變量

.386 .modelflat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc ;局部變量中的類型不能使用縮寫 LOCAL v1: dword …

WPF筆記(1.1 WPF基礎)——Hello,WPF!

WPF筆記(1.1 WPF基礎)——Hello,WPF! 原文:WPF筆記(1.1 WPF基礎)——Hello,WPF!Example 1-1. Minimal C# WPF application//MyApp.csusingSystem;usingSystem.Windows; //the root WPF namespacenamespaceMyFirstAvalonApp { cla…

c#入門系列——類和對象的代碼實現

面向對象 說起面向對象,大家因該都聽說過,也知道是一個編程的方法,簡稱oop技術。它將對象的算法和數據結構看作一個整體,而一個程序就是由多個對象結合的整體。這樣做可以提高代碼的復用率,提高了軟件的可維護性。 屬性…

安卓TCP通信版本2

PC做服務器,安卓做客戶端。 安卓獲取輸入框的內容并發送,然后等待接收服務器的消息 服務器先行開啟,接收到客戶端的數據,然后回復消息。 實現了對線程類的封裝,通過按鈕啟動線程發送并接收 服務器代碼(java…

Win32ASM學習[5]: 數據對齊相關的偽指令(ALIGN、EVEN、ORG)

32 位的寄存器容量是 4 字節, 如果內存中的數據都按 4*n 字節對齊, 肯定會加快吞吐速度; 但事實并非如此, 不同大小的數據可能會讓寄存器別別扭扭地去處理, 從而降低了運行速度! 如果使用對齊, 就會浪費掉一些內存空間; 其實這是一個需要權衡 "速度" 與 "內存&…

常用Jquery前端操作

input只能輸入正整數 οnkeyup"this.valuethis.value.replace(/\D/g,)"if(!confirm("刪除后無法恢復,確認繼續?")){return false;}//判斷字符串里是否存在指定字符 if(str.indexOf("abc") ! -1){//表示存在}1.雙引號替換…

【Linux/Ubuntu學習 10】unbuntu 下 eclipse 中文亂碼的解決

wangddwdd-pc:~$ gedit /var/lib/locales/supported.d/local 添加: zh_CN.GBK GBKzh_CN.GB2312 GB2312 終端執行命令: sudo dpkg-reconfigure --force localesGenerating locales... en_AG.UTF-8... done en_AU.UTF-8... done en_BW.UTF-8... done …

Win32ASM學習[6]: PTR、OFFSET、ADDR、THIS

PTR: 指定要操作的數據尺寸 ------------------------------------------------------------------------------------------------------------------------------------------ .386 .model flat, stdcall include windows.inc include kernel32.inc include masm…

簡述WebService的使用(一)

環境: vs版本:vs2013 windows版本:win7 IIS版本:IIS7.0 (如果覺得對您有用,請點擊右下角【推薦】一下,讓更多人看到,謝謝) 配置環境: 主要針對于IIS 首先&…

【Java基礎】用LinkedList實現一個簡單棧的功能

棧的基本功能 棧的最基本功能是保障后進先出,然后在此基礎上可以對在棧中的對象進行彈入彈出,此外,在彈出時,如果棧為空,則會報錯,所以還需要提供獲取當前棧大小的方法。 構造存儲對象Student /*** Created…

Win32匯編學習[7]: 定義符號常量(=、EQU、TEXTEQU)

關于符號常量 的例子 .386 .model flat,stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .data n 1 ; 偽指令只能定義整數或整數表達式…

oracle 刪除表中重復記錄,并保留一條

1、查找表中多余的重復記錄,重復記錄是根據單個字段(Id)來判斷 select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1) 2、刪除表中多余的重復記錄,重復記錄是根據單個字段(Id&#x…

透過WinDBG的視角看String

摘要 : 最近在博客園里面看到有人在討論 C# String的一些特性. 大部分情況下是從CODING的角度來討論String. 本人覺得非常好奇, 在運行時態, String是如何與這些特性聯系上的. 本文將側重在通過WinDBG來觀察String在進程內的布局, 以此來解釋C# String的一些特性. 問題 C# Stri…

Win32ASM學習[8]: 進制轉換的庫函數

在 masm32.inc 中有這樣幾個函數的聲明: byt2bin_ex PROTO :BYTE, :DWORD wrd2bin_ex PROTO :WORD, :DWORD dw2bin_ex PROTO :DWORD, :DWORD dw2hex_ex PROTO :DWORD, :DWORD bin2byte_ex PROTO :DWORD -------------------------------------------------------------…

SOJ 2800_三角形

真的是O不是0【看了discuss才發現。。。。。一個大寫的蠢 【題意】多個黑白三角形組成的倒三角,求白三角形組成的最大倒三角的面積 【分析】由于問的是倒三角個數,所以只需看與行數奇偶性相同的白色倒三角形,設v[i][j]為以第i行第j列的倒三角…

ueditor富文本編輯器 修改框寬度和高度的方法

在使用ueditor的時候&#xff0c;用的textarea <textarea name"content" id"myEditor">這里寫這條規則的回復內容</textarea> 給它加style"width:300" 屬性的時候&#xff0c;發現不起作用。 正確的方法應該是&#xff1a; <scri…

Win32ASM學習[9]: 標志寄存器

TF(Trap Flag)——位8&#xff0c;跟蹤標志。置1 則開啟單步執行調試模式&#xff0c;置0 則關閉。在單步執行模式下&#xff0c;處理器在每條指令后產生一個調試異常&#xff0c;這樣在每條指令執行后都可以查看執行程序的狀態。如果程序用POPF、POPFD 或者ET 指令設置TF 標志…

TCP多進程并發服務端 Linux socket編程入門(2)

這里很簡單的使用了fork()函數&#xff0c;在執行了fork()以后的所有代碼都會由子進程和父進程同時執行。 他們同時擁有相同的資源&#xff08;兩份拷貝&#xff09;&#xff0c;所以在子進程執行的過程中&#xff0c;子進程需要先close掉listenfd&#xff08;監聽套接字&#…

ArcEngine 打開shape文件

IWorkspaceFactory wsf new ShapefileWorkspaceFactory(); IWorkspace pWorkspace wsf.Open(filePath, 0) ;//filePath為shapefile所在的文件夾 IFeatureWorkspace pFeatureWorkspace pWorkspace ; IFeatureClass pFeatureClass pFeatureWorkspace.OpenFeatureClass(&quo…

Win32ASM學習[10]:傳送指令

匯編指令的一般性要求: 1、兩個操作數的尺寸必須一致; 2、操作數不能同為內存. --------------------------------------------------------------------------------------------------------------- ;mov ;該指令不影響 EFlags ;指令格式: (其中的 r、m、i 分別表示: 寄存器、…