數年來,兩人在市場上的競爭可謂你死我活。無忌僅僅抱著FC SAN的速度和穩定性來炮轟小過的IP SAN,而小過也不甘示弱,處處舉著可擴展性和成本的大旗,聲討FC SAN,鬧得江湖上風風雨雨。無忌憑借著FC的優勢,占據了高端市場,而小過則以成本優勢在低端市場占據了一席之地。然而兩人誰都想一統天下,把對方徹底驅逐出市場,但是,相持數年了,誰也沒能把誰干掉。兩人都累了,這么多年的互相攻擊,誰也沒有取得絲毫勝利,無忌還是穩固地占據高端市場,小過依然馳騁低端。


    終于有一天,無忌和小過決定握手言和,不再投入無謂的人力物力財力來和對方競爭。與其大肆攻擊對方,不如多用點精力來提升和發展自己的技術,同時學習對方的技術,取長補短,方為正道?。?! 無忌和小過徹夜長談,終于取得了一致的見解,決定雙方各取所長,發展自己的技術,共同為江湖做貢獻。


    首先,無忌決定由小過入股自己的公司,給FC SAN提供更高的擴展性架構解決方案;同時,無忌也入股小過的公司,給小過提供研發經費,用于其研發出基于以太網的新型的,適合存儲區域網絡的專用上層協議體系。


    入股無忌公司之后,小過便開始了研究如何將FC協議體系轉向一個可擴展的,開放的結構。說到可擴展并且開放,一定非TCP/IP末屬??墒荈C和TCP/IP是完全兩套毫不相干的協議體系,如果將FC全部轉為TCP/IP,那豈不是叛變成IP SAN了么?但是如果絲豪不變,那只能是FC SAN,還是不具備開放和擴展性。 


    FC為什么擴展性差?就是因為如果通信雙方距離太遠的話,需要自己架設光纜,或者租用電信的專線光纜,這兩者成本都夠高的。并且如果租用電信部門的專線光纜,則FC最低速度為1Gb,1Gb帶寬的專線光纜,呵呵,不是不可能,而是一般人承擔不起這費用。目前電信提供的專線接入,其骨干網一般采用SDH傳輸,一般下到終端用戶,為2M的E1線路。當然也可以直接從高速骨干下來高速的線路,比如OC3,Oc48等等,但是費用無法直接承受。E1線路有自己的編碼格式,不能直接將ISP過來的光纖插到FC設備上,這樣是沒用的,因為編碼都不一樣,不能和局端的設備建立連接,所以需要增加一個協議轉換設備,將E1協議轉換成比如V35串口、以太網等其他協議,好像沒有E1轉FC的協議轉換器。


    目前看來,如果要擴展FC網絡,讓相隔很遠的兩地之間跑上FC協議,只能自己架設專用光纜,可是市政部門,讓你架設么?不可能的。除非在一個大廠區之內,別人管不著,但是如果是在兩個城市,兩個省之間,你一點辦法也沒有。怎么辦?首先,要出去,就一定要租用電信部門的線路,電信又提供了兩種線路,一種是接到Internet的線路,也就是接入電信的Internet運營網絡,通信的雙方都接入,并且使用TCP/IP通信。另一種,就是點對點光纖專線,也就是上文所說的那種情況。這條專線端到端的帶寬獨享。Internet線路,雖然可以最大到100Mb的速率,但是這只是本地帶寬,端到端的帶寬,以現在的TCP/IP協議體系,除非花錢買ISP的QoS或者MPLS TE服務,否則沒有人保證。而點對點專線,雖然保證了帶寬,但是通常承受的起的,只有E1這樣的低速專線,而且價格相對Internet接入要貴,還有它似乎目前只能承載IP作為網絡層協議,因為目前E1協轉只能轉成V35串口或者以太網,而他們不能承載FC協議。有些路由器不用協轉,直接可以連接從光端機出來的G703或者BNC接頭,直接編碼E1,但是這些也都是IP路由器,和FC絲豪沒有關系??梢钥闯?,FC如果脫離了“后端專用”這四個字,到開放領域,顯然是無法生存的。而IP SAN,則及其開放,磧餐ǔ裕?只要有IP的地方,就可以部署IP SAN。


    說到這里,租用Internet線路,只能承載IP,而租用點對點專線,也是只能承載IP,可能感覺FC的擴展似乎就是死路一條了。想到這里,小過似乎已經沒有什么招數了。他感到非常郁悶。忽然,他想起了iSCSI,當初自己不就是把SCSI協議給封裝到了TCP/IP協議中來傳輸,才擴展了SCSI協議么?是不是可以這么說:將一種協議封裝到另一種協議中,就可以使用另一種協議帶來相應的好處呢?不妨就這么假設一下,FC不可擴展,TCP/IP擴展性很強,那么如果把FC協議封裝到TCP/IP協議中來傳輸,是不是也可以獲得TCP/IP的擴展性呢?這個想法比較大膽,因為FC本身也是作為一種可以傳輸其他協議的協議,FC甚至可以承載IP,作為IP的鏈路層,那么為什么現在確反過頭來需要被IP來承載呢?Protocol over Protocol,PoP,即一種協議被over到另一種協議上。且聽下面分解。


    不能不說的以太網和TCP/IP。我們前面已經對以太網和TCP/IP協議進行了詳細的介紹。我們知道,以太網是一個網絡通信協議,以太網,并不一定就是HUB,就是交換機,就像某人說過的一句話一樣:“網絡就是水晶頭”。這句話比較有意思,他反映出說這句話的人對網絡的不了解。網絡就是水晶頭,證明他平時所見到的網絡,只是以太網而已,青蛙只能看到它頭頂上的一片天。但是這句話從某種角度也反映出了以太網在當今的普及程度。前面講到了以太網是可以尋址的,也就是說它涉及到了OSI第三層的內容,也就是網絡層。大家都連接到一個以太網環境中,不需要任何其他上層協議,大家就可以區分開對方,進行通信。既然這樣,為什么又需要TCP/IP協議呢?而我們總是說以太網+TCP/IP協議二元組,而不是僅僅說以太網,或者TCP/IP協議?因為以太網和TCP/IP協議,是邏輯上分開的,他們各自是不同的協議體系,那么為什么總是把他們組合起來說呢?他們之間為什么有著割舍不斷,藕斷絲連的聯系呢?這其中原因,還要從IP講起。


    前面也說過了,IP就是一個身份標志,一個用來把你區別于其他人的一個ID。以太網的MAC地址,從原理上講,就足夠用來區分各個節點了。但是前面也分析過完全靠MAC來尋址的缺點。一是MAC地址太長,48位,這個理由現在已經不成立了,因為IPv6的地址是128位的,二是世界上并不都用以太網來建立局域網的,那么就有其他的尋址方式,需要一個秦始皇來統一天下,IP就擔任了這個任務。不管以太網,或者串口,或者FDDI之類的局域網方式,它給每個節點都分配一個全球唯一的地址:IP地址。那么IP就是它的大名,MAC是它的小名,主機名或者域名,是它的筆名,這么比喻大家應該能理解了。一般大家訪問網站之類的,其實就是和提供網站服務的服務器來建立通信,獲取他的網頁和其他服務,此時我們需要用筆名和他通信,然后你輸入筆名在IE瀏覽器中之后,DNS程序自動把筆名轉換成大名,用大名進行通信。那么你的包帶著大名到了服務器所在的局域網之后,會由那個局域網的路由器通過發出ARP,來把大名對應成小名,最后通過交換機把你的包發給服務器。為什么要這么麻煩,經過多次轉換?首先,把IP轉換成域名,是為了我們使用方便,不必記憶那些復雜的IP地址。其次,把MAC轉換為IP,是為了天下一統,剛才說過了。其實如果所有人加靡蘊?網聯網,那么就可以完全拋棄IP這一層尋址了,但是實際是不可能的,以太網現在還沒有一統天下,而且就算一統天下了,人們也似乎不愿意拋棄IP,就像同一個局域網內,還是用IP來直接通信,而不是直接用MAC。如果直接用MAC,則還需要改變程序代碼。


    原來,整個Internet,不僅僅都是以太網,以太網適合局域網聯網通信,但是不適合廣域網情況,廣域網的聯網協議,比如PPP,HDLC,Frame Relay,x25,ATM等等。他們各自都有各自的尋址體系,都有各自的地址,就像以太網有自己的MAC地址一樣,Frame Relay也有自己的尋址地址,就是DLCI地址,x25也有自己的地址,ATM同樣有自己的地址。如果在一個Internet上有這么多種地址,相互融合,尋址,那后果將是不堪設想,很難維護,需要在各種地址之間,相互翻譯,轉換,每遇到一種,就轉換一次,這非常麻煩,所以IP出現了IP地址,使得所有聯網的節點,不管用的什么方式,以太網也好,Frame Relay也好,統統都分配一個IP地址給他,對外最終以IP地址作為尋址地址,而將IP地址,再映射到自己使用的聯網方式所使用的尋址地址上,比如IP映射到以太網的MAC,或者IP映射到Frame Relay的DLCI,IP映射到ATM的ATM地址,等等,用來進行地址映射的一套程序,稱為address resolution protocol,ARP。很多人聽到ARP,就認為是以太網,其實這也是錯誤的,ARP不僅僅代表以太網中的IP地址和MAC地址的映射,它同樣可以代表IP和DLCI的映射等等。


    IP,統治了OSI的第三層,將原來占據第三層的,比如以太網MAC地址,FR的DLCI等等這些雜亂的尋址體系,給統一了,就像秦始皇統一貨幣一樣。而原來的這些尋址體系,成了在野黨。而映射到以太網的IP,稱為IPoE,映射到FR的IP,稱為IPoFR,映射到ATM的IP,稱為IPoA,等等等等。從此,一種新的概念誕生了:PoP,即protocol over protocol。


    IP統一了天下,還不夠。各種協議,比如以太網,以太網是一個面向無連接的網絡,它不保障數據一定會傳送的對方,它是一個不負責任的網絡,不管目的地有沒有收到,只管發送。而FR,其前身x25,是一個有著很好傳輸保障的協議,在TCP/IP沒有出現之前,x25的傳輸保障機制,做得非常到位,因為x25其設計初衷,就是為了運行在極其不穩定的鏈路上。而隨著鏈路質量的不斷提高,x25的做法顯得越來越因噎廢食了,所以其改良版本Frame Relay,就逐漸替代了x25。FR拋棄了x25中很多無謂的傳輸保障機制,而僅僅留下一些流控機制。相對于以太網的不負責任,FR起碼在鏈路層面,實現了比較好的流控措施。而不管是以太網,還是FR,他們都沒有實現端到端的保障,端到端,是相對于“過路”來說的,也就是通信的最終兩端無誤的收到數據,才能算作真正的保障,而FR做的,只是在過路的時候,也就是在鏈路傳輸的時候,保障鏈路正確傳輸,但是如果鏈路正確傳輸給了終端,但是終端到最終上層的某個環節出錯了,那么數據同樣也是錯誤的,這就是端到端發現錯誤。為了實現這個目的,TCP出現了。TCP的作用,就是運行在通信的兩個終點,不管兩點之間用什么樣的鏈路連接,以太網也好,FR也好,專門來收發數據,并對終端最終收到的數據做檢查,看看是否順序,是否正確,是否有丟棄,也就是TCP不是運行在鏈路上的,而是運行在兩端的。即使鏈路保障機制再健全,TCP也是有必要的,因為只有被最最終端正確收到數據,才能算正確的傳輸。


    所以,在IP之上,又凌駕了一層,TCP層。而FR等等這些聯網協議的保障機制,只能保障鏈路傳輸無誤,不能保障端到端的正確收發,所以只能淪為收據鏈路層的角色了。


    我們可以體會到,協議之間也是在互相利用,互相排擠,吞并,融合,以適應不同的應用環境,因為不可能為每一種應用環境都設計一種協議,協議之間互相利用,融合,才是最好的解決辦法。


    我們現在可以回答上面沒有找到答案的那個問題了,為什么以太網偏要和TCP/IP組合成一對呢?因為以太網使用的太廣泛了,而OSI的第三層,第四層,也幾乎被IP、TCP給統一了,所以以太網+TCP/IP就成了一對好搭當了。協議和協議之間,各有分工,雖然一個協議可能OSI各個層的功能它都有,就像ATM,但是如果和其他協議合作,那么就要有個分工,ATM目前也是用來承載IP,但不能越權,它只管傳輸IP包到目的就可以,而不管數據是否出錯,是否亂序等等,雖然它可能有這個功能。這就是協議互相融合。以太網雖然自己可以尋址,但是它還是配合IP,進行IP到MAC的映射,統一使用IP尋址,它默默無聞,所有光輝都被TCP/IP所披掛。


    網絡通信協議,一般可以分成payload層、交互邏輯層、信息表示層和尋址層。其中最重要的是交互邏輯層,它是一個協議的靈魂。


    payload層,也就是協議所承載的與本協議無關的最終數據,也就是本協議最終需要傳送給對方的數據。


    信息表示層,就是附加在payload數據之外的一段數據,也稱作協議開銷,因為這段數據和最終應用程序無關,是運行在通信雙方的通信協議,用來交互信息,從而作出正確動作的一段重要數據。


    交互邏輯層,這一層其實就是運行在通信雙方協議系統上的動作代碼,邏輯,它根據對方傳送過來的信息表示層數據,來作出相應的動作邏輯,生成自己的信息表示層,發送給對方,然后對方再做相同的動作,就這樣完成通信雙方之間的正確動作邏輯。


    尋址層,就是幫助協議怎么來找到需要通信的目標,比如IP地址,MAC地址,DLCI地址,等等。


    以上的這四層,是任何一個網絡通信協議所必須具備的,不管多么簡單或者多么復雜的協議。


    尋址層,如果是點對點傳輸協議,則可以忽略此層,因為不需要尋址。而且不同協議之間的尋址層,可以互相映射翻譯,典型的例子,就是IP到MAC,IP到DLCI等等。


    payload層中的數據,既可以是最終應用產生的數據,也可以是另一種協議的信息表示層+payload數據。如果payload封裝的是最終應用產生的數據,則表示這個協議是直接被上層應采用程序來調用,從而完成程序之間的遠程網絡通信的。如果payload封裝的是另一種協議的信息表示層+payload數據,那么就證明這個協議此時正在承載另一種協議。比如協議A封裝了協議B的信息表示層+payload,則就可以說協議A封裝了協議B,或者協議A承載了協議B,或者說協議B is over 協議A。


    交互邏輯層,每種協議都不相同,但是很多都類似,可以說基本思想有些協議是類似的,因為他們所實現的目的都是一樣的,就是將數據通過網絡傳輸到目的地。正因為如此,各種協議的交互邏輯層,可以互相融會貫通,將一種協議的邏輯,映射翻譯到另一種協議的邏輯,從而將各種協議的優點結合起來,完成目的。


    協議之間相互融合的另一個促成因素,就是協議使用廣泛程度不同,而要完成一個目標,不得不借用某種協議。就像TCP/IP協議,TCP/IP協議占領了全球Internet的領地,那么如果有一種其他協議,它想跨越地域,或者國家,來進行通信,但是自己又無能為力,因為它首先就沒有專門為它準備的物理線路,其次他的設計,也就不適合大范圍,長距離,廣域,保障傳輸的情況下完成端到端的通信。能適合Internet規模的網絡通信協議,唯TCP/IP末屬!而其他協議想要完成Internet范圍的通信,就不得不借助TCP/IP,搭TCP/IP的車,讓TCP/IP來承載它們。它們是怎么搭上TCP/IP的快車呢?


    協議和協議之間的相互作用,有三種種基本的思想。一種是use,也就是一種協議完全利用另一種協議,另一種是tunnel,也就是遂道,一種協議將另一種協議遂道封裝。還有一種是map,也就是一種協議對另一種協議進行映射翻譯。


    Use,使用,也就是一種協議自身沒有某些功能,需要使用另一種協議提供的功能。一種協議怎么去使用另一種協議呢?例子太多了,比如TCP使用IP,因為TCP沒有尋址功能,所以它利用IP來尋址。而IP又可以使用以太網,因為IP只是一個尋址功能,它沒有鏈路傳輸的功能,所以它利用以太網交換提供的鏈路傳輸。IP使用PPP等等,也就是上層協議為了達到通信目的,使用另一種協議為他自己服務。


    Tunnel,遂道封裝,顧名思義,就是將一種協議二話不說直接作為另一種協議的payload來進行封裝,打包傳輸到目的地,然后解開外層協議,露出內存被封裝承載的協議,再提交給內層協議處理邏輯模塊進行處理。也就是說進行協議轉換的設備根本就不需要去理解內層協議到底是什么東西,到底想要干什么,只要你給了我,我就統統打包發出去,完事了。Tunnel的出現,往往是由于被tunnel的協議雖然和外層協議都在某一方面有所實現,但是在這一方面被tunnel協議不如外層協議做的優秀,不適合某種特定的環境,而這種環境,恰恰被外層協議所適合。


    而map,是比tunnel更復雜的,也更有擴展性的一種方式。所謂map,也就是映射,就是說將內層協議的部分或者全部邏輯,映射翻譯到外層協議對應的功能相似的邏輯上,而不是僅僅不管三七二十一的簡單的封裝。map相對于tunnel,是內外層協議的一種最徹底的融合,它將兩種協議的優點,融合的天衣無縫。


    我們在這里主要說一下tunnel和map。


    打個比方來說,火車,汽車,這是兩種運輸方式,他們看似有太大的不同,但是他們的目的都是相同的,即都是為了將貨物運送的目的地。而火車呢,它需要跑在鐵道上,但汽車需要跑在公路上;火車因為鐵軌很平滑,需要用鋼鐵輪子,而汽車因為公路很顛簸,需要用充氣輪胎;火車幾乎不需要紅綠燈來制約,而汽車跑在公路上,會有很多紅綠燈來制約它;火車由于跑在專用的鐵軌上,所以他能而且也敢達到很高的時速,而汽車由于跑在共享的公路上,它能,但是不敢達到太高的時速;火車不能跨出國境,而汽車可以方便的穿越國境;火車只能按照他的鐵軌來運行,而汽車幾乎隨處可達……我們一下子列舉出了火車和汽車的種種特點,相應的,飛機,輪船,火箭等等都可以拿來對比,這些特點,就像各種通信協議自身的特點一樣。同樣都是運輸貨物,為什么各種方式千差萬別?因為他們適應了不同的需要。同樣的,一個網絡通信協議,只不過它運輸的不是貨物,而是一串0和1,是高低變化的電平,是數據,是信息。通信協議也是千差萬別,同樣也是為了滿足不同的情況,不同的需求。TCP/IP協議,它就滿足了Internet范圍的網絡通信;FC協議,它就滿足了后端存儲的專用高速這個環境,二者都各自占有自己的領地,誰也取代不了誰,鐵路不可能為了和民航競爭,而把鐵軌往天上修,航空公司也不可能為了和陸運公司競爭,而讓飛機跑在公路上。


    但是,如果某個駕駛汽車出遠門的人,需要到國外,并且在國外也需要開自己的車辦事,而又很急,趕時間,怎么辦?開車東繞西繞,繞到國外么?當然太慢了,那么此時怎么辦呢?當然要考慮飛機,但是飛機是運輸工具,汽車也是運輸工具,怎么把汽車帶到國外呢?可能有人說,在國外租一輛車開不就完了么,那另當別論,我們就假設這么一個模型來說明問題。車主考慮飛機托運,也就是用一種能將原先的交通工具所不能實現或者實現不好的另一種交通工具,來托運或者封裝,或者承載原先的交通工具,到達目的地之后,再次發揮原先交通工具的作用。我們這個例子,也就是:因為汽車不能很快達到目的,那么我們暫時先將汽車承載于飛機之上,然后達到“快速到達目的”這個目標之后,再將汽車取出來,行使汽車的便利。相反,如果存在這種情況,比如將飛機承載于汽車之上,會不會發生呢?當然理論上可以發生,不過現實中可能很少,考慮這么一種情況:某架飛機需要大修,已經飛不動了,需要到異地去修理,怎么辦呢?我們可以將飛機拆卸,然后封裝到集裝箱汽車中,運輸到異地,然后再進行維修,這就是將飛機承載到汽車之上。那么同樣,將飛機承載到火車上,或者汽車over火車,甚至:自己over自己,也就是用飛機來運輸飛機,悶?車來運輸汽車,當然這些都在現實中是存在的?


    咱們還是再把話題拉回來。說完了貨運協議,咱們再說說信息通信協議。因為TCP/IP適合整個Internet范圍的通信,而SCSI協議不適合,所以如果SCSI協議需要跨越大范圍通信,就要將其承載到TCP/IP上,也就形成了iSCSI協議,然而TCP/IP根本就不關心什么是SCSI,更不知道SCSI是怎樣一種作用邏輯,它只是負責封裝,傳輸。因為以太網沒有認證機制,沒有NCP機制(PPP協議中用來協商上層協議參數的機制),而PPP卻有這些機制,但是PPP使用程度遠遠不如以太網廣泛,怎么辦?Over吧!大家一起來over,于是形成了PPPoE。


    iSCSI和PPPoE,這兩個協議,是典型的tunnel模式。我們上面已經給tunnel下過定義了,首先一種PoP的模式被定義為tunnel的前提,就是這兩種協議對某一特定的功能,均有自己的實現。我們拿iSCSI來分析,TCP/IP可以實現網絡通信,SCSI協議也可以實現網絡通信,所以他們具備了這個前提。第二個要說的:什么時候才會被tunnel?需要的時候。因為SCSI通信協議擴展性太差,傳輸距離太短,而TCP/IP可以擴展到Internet,所以將SCSI tunnel到TCP/IP,形成iSCSI,完畢。我們以后做協議分析,都推薦使用這種因果分析法,來分析一個協議所產生的原因,以及他的發展趨勢,是要被淘汰,還是將要被發展壯大。
  Tunnel的另一個作用,就是偽裝,有時候雖然兩種協議實現的功能,適用環境都相同,但是還是將其中一種tunnel到另一種之上,這是為什么呢?有些情況確實需要這種實現方式,比如IP協議中的GRE,通用路由封裝,就是這樣一種協議。將IP協議承載到IP協議之上,自己承載自己,這樣就可以使得一些不能在公網路由的IP包,封裝到可以在公網路由的IP包之中,到達目的后,解開封裝,露出原來的IP包,再次路由。這就是偽裝。利用這種思想,人們發明了所謂VPN,Vitual Private Network,用來將身隔千里的兩個內部網絡,通過Internet連接起來,走internet的時候,使用公網地址封裝內網的IP包。這是最簡單的VPN。在這基礎上,又對IP包進行加密,反修改等等措施,形成IPSec體系,將其和原始的VPN結合,形成了帶加密和反修改的VPN,真正使得這種PoP,穿越外層協議的時候,能夠保障安全。


    我們還是拿一個例子來說明,到底什么是tunnel。郵政系統,目前已經是舉步維艱。21世紀之前,網絡還沒有很普及,除了電話電報,寫信似乎是大家長距離通信的唯一選擇。寄信人將自己的信件(數據,payload)裝入信封,填好收信人地址、郵編、名稱(通信協議的信息表示層、尋址層)等等,交給郵局,由郵局進行層層路由轉發(協議交互邏輯層),最終到達目的地。IP網絡和郵政系統,他們及其相似。而為什么郵政系統目前已經陷入了困境呢?原因就是競爭。進入21世紀之后,物流業快速興起,他們借助陸路,水路,航路,鐵路等等“鏈路層”,加上自己的一套管理體系,充分利用這些資源,達到物流目的。以前只有郵政一種方式,而現在,物流公司多如牛毛,每個公司都有自己不同的物流體系,但是他們基本思想都是大同小異,都是要將用戶的貨物運送到目的地。21世紀,雖然網絡已經很發達,但是網絡只能走信息流,走不了實物流。所以物流公司還是能占據一定市場。我們來看看21世紀,用戶是怎么來寄出一封信件或者包裹的。同樣寄出一封信,如果還是用古老的“協議”,比如信封+80分郵票的形式,還是可以的,大街上現在還有郵筒。但是很多快遞公司,也提供信件包裹服務,只不過他們用的信封,比普通信封大,結實,而且他們信封上的標簽,所包含的信息更加具體,比如增加了收件人電話,發件日期,受理人簽字,委托人簽字等等。郵政信封具有的,快遞信封都具有。我們從這里就可以看出這兩種協議的不同之處了。你可以把信件封裝到郵政普通信封直接發送,也可以封裝到快遞公司信封中發送,也就是選用其中一種協議。那么如果我先把信件(最終數據)封裝到普通信封中,填好信封頭信息(協議信息表示層和尋址層),然后將封裝好的普通信封,再封裝到快遞公司的信封中,并再次填一份快遞公司的信封頭信息??爝f公司按照這些信息,將信件送到目的地,目的收到之后,解開外層信封,然后解讀內層信封的信息頭,再次轉發,或者直接打開。剛才描述的這種情況,就是一個典型的協議tunnel方式的相互作用,把郵政協議,tunnel到快遞公司的協議,這種tunnel的目的,就是為了獲得快速,優質的服務,因為郵政協議提供不了快速高效的服務。


    我們再來看這種情況,比如,快遞公司A,在青島沒有自己的送貨機構,但是有人需要向青島送貨,怎么辦?此時當然要考慮借助在青島有送貨機構的快遞公司,讓他們代送,將信件封裝到快遞公司A的信封,然后再裝入快遞公司B的信封,讓快遞公司B做轉發,到目的地之后,B的送貨員剝開外層信封,最終用戶會收到一個快遞公司A的信封,客戶就認為是快遞公司A全程護送過來的,其實不是的。這樣就很好的偽裝了信件。這是tunnel的另一個目的。


    說完了tunnel,我們再來說說map。Map,抽象來說,就是將一種協議的邏輯,翻譯映射成另一種協議的邏輯,達到兩種協議部分或者完全融合。


    還是那個快遞公司的例子。兩個快遞公司(兩種協議),快遞公司A在青島沒有自己的送貨機構,但是B有。所以A和B達成協議,A將青島地區的送貨外包給B,凡是A公司在青島的業務,都由B來運送,但是面上必須保持A的原樣,這種方式目前商業已經廣泛使用。起初的做法是:先將客戶信件裝入A信封,然后再封裝一層B信封,帶著A信封來轉發,也就是tunnel。后來,B公司嫌這種方法浪費了人力,因為額外攜帶了一個A信封,這增加了信件的重量。所以B公司琢磨出一套方法,即先讓B公司的取件人了解寄件人所要提供的信息,此時取件人擔當A公司的角色,用戶認為取件人是A公司的,用戶按照A公司的協議,將信封頭信息告訴取件人,然后取件人此時并沒有將信件裝入A公司信封,而是直接裝入了B公司信封,但是在填寫B公司信封頭的時候,取件人將用戶提供的針對A公司特有的信封頭信息,轉換翻譯成B公司特有的信封頭信息。經過B公司轉發后,到達目的之后,送貨員再次將B公司的信封頭信息,轉換翻譯成A公司所特有的信封頭信息,這樣兩端的用戶,同樣也絲毫感覺不出中間環節其實是B公司完成的。但是這種方式相對于tunnel凡是,卻節約了B公司的成本,提高了轉發效率。這種方式的協議之間的相互作用,就是map。


    我們再從實際情況說起。最簡單的map,就是IP和以太網之間的map。IP地址必須映射到MAC地址,才能享受以太網的服務,所以有了ARP,專門用來做IP和MAC的映射關系。上文說過,IP和以太網之間,是use+tunnel關系,怎么又出來映射關系了呢?實際上,各種協議之間的相互作用,不可能只是其中一種作用方式。尋址體系之間一定需要map,交互邏輯層可以tunnel,也可以map,payload一定需要tunnel。所以針對協議不同的層次,都有相對應的相互作用方式的。我們再來看看交互邏輯上的map,這中map可比尋址層的map,要復雜的多。尋址層的map,或者信息表示層的map,只是維護一張映射表就可以,交互邏輯的map,需要維護一個代碼轉換邏輯層。比如TCP的流控機制和FC協議的流控機制之間的map,TCP是靠窗口機制實現端到端的流控,FC靠buffer to buffer和end to end兩種機制實現流控。如果把FC協議承載到TCP/IP協議之上,那么會出現tunnel模式,和map模式,當然tunnel中也需要map。我們不妨稱作:以tunnel為主的模式,和以map為主的模式。如果是tunnel模式,那么TCP/IP根本不管FC協議的交互邏輯是怎么樣的,TCP僅僅把FC當成payload來封裝并傳送,充其量將FC尋址層來映射到IP層。而map模式中,進行map操作的設備或者軟件,就需要既了解TCP/IP協議的交互邏輯,又了解FC協議的交互邏輯,因為只有了解了雙方的邏輯,才有可能進行map。具體來講,比如FC協議發出了一個信號,說本方緩存將滿,請降低發送速度。則map設備收到這個信號之后,就會map成TCP/IP可識別的信號,即:本方處理受阻,窗口減小至某某數值,這就是FC協議到TCP/IP協議關于流控機制map的一個方法。被承載到IP之上之后,FC協議就可以漂洋過海遠隔千里之間被傳遞了。如果再tunnel模式中,FC協議發出的這個流控信號,也會被TCP/IP給tunnel傳送到對方,然后再由對方的FC協議模塊來根據這個信號來判斷流控機制應該作出的動作,動態調整發送速率,而其中,TCP/IP不參與任何FC協議內部的邏輯。出了流控邏輯的映射,比如登陸機制,連接機制等等的映射,比如,FC發起一個flogin過程,那么map設備會map到TCP/IP的一個握手過程,等等。


    呼啦,呼佟,哎呀??!小過從夢中醒來。剛才做的那場黃梁美夢,在早晨的陽光中,煙消云散。但是仿佛那個夢,就是一場真實。小過按照夢中描述的PoP的規則,鬼使神差的將FC協議果真映射到了IP上。給他做了兩種模式,一種是以tunnel為主的模式,稱作FCIP,另一種是以map為主的模式,稱作iFCP。


    至此,FC協議終于可以享受TCP/IP帶來的擴展性了,小過大獲成功!


    小過和無忌從此握手言和!


    本文節選自《信息存儲》雜志2006年度特刊,點擊此處瀏覽全部文章。
    想要免費申請訂閱《信息存儲》雜志,請點擊此處。

未經允許不得轉載:存儲在線-存儲專業媒體 » 《信息存儲》特刊:戲說協議之間的相互作用
分享到

dostor

相關推薦

精品国产午夜肉伦伦影院,双性老师灌满浓jing上课h,天天做天天爱夜夜爽,攵女乱h边做边走