【協議森林】郵差與郵局 (網絡協議概觀)

【協議森林】郵差與郵局 (網絡協議概觀)

2017-08-27 Vamei 碼農有道

信號的傳輸總要符合一定的協議(protocol)。比如說長城上放狼煙,是因爲人們已經預先設定好狼煙這個物理信號代表了敵人入侵這一抽象信號。這樣一個狼煙=敵人入侵就是一個簡單的協議。協議可以更復雜,比如摩爾斯碼(Morse Code),使用短信號和長信號的組合,來代表不同的英文字母。比如SOS(***---***,  *代表短信號,-代表長信號)。這樣"***= S, ---=O"就是摩爾斯碼規定的協議。然而更進一層,人們會知道SOS是求助信息,原因是我們有SOS=求救這個協議存在在腦海裏。所以"***---***=SOS=求救"是一個由兩個協議組成的分層通信系統。

使用Morse Code的電報機

計算機之間的通信也要遵循不同層次的協議,來實現計算機的通信。



物理層(physical layer

所謂的物理層,是指光纖、電纜或者電磁波等真實存在的物理媒介。這些媒介可以傳送物理信號,比如亮度、電壓或者振幅。對於數字應用來說,我們只需要兩種物理信號來分別表示01,比如用高電壓表示1,低電壓表示0,就構成了簡單的物理層協議。針對某種媒介,電腦可以有相應的接口,用來接收物理信號,並解讀成爲0/1序列



鏈路層(link layer

鏈路層,信息以幀(frame)爲單位傳輸。所謂的幀,是一段有限的0/1序列。鏈路層協議的功能就是識別0/1序列中所包含的幀。比如說,根據一定的0/1組合識別出幀的起始和結束。在幀中,有收信地址(Source, SRC)和送信地址(Destination, DST),還有能夠探測錯誤的校驗序列(Frame CheckSequence)。當然,幀中最重要的最重要是所要傳輸的數據 (payload)。這些數據往往符合更高層協議,供網絡的上層使用。與數據相配套,幀中也有數據的類型(Type)信息。鏈路層協議不關心數據中到底包含什麼。幀就像是一個信封,把數據包裹起來。

以太網(Ethernet)WiFi是現在最常見的鏈路層協議。通過鏈路層協議,我們可以建立局域的以太網或者WiFi局域網,並讓位於同一局域網絡中的兩臺計算機通信。鏈路層就像是一個社區的郵差,他認識社區中的每一戶人。社區中的每個人都可以將一封信()交給他,讓他送給同一社區的另一戶人家。

鏈路層:社區小郵差



網絡層(network layer

不同的社區之間該如何通信呢?換句話說,如何讓WiFi上的一臺計算機和以太網上的另一臺計算機通信呢?我們需要一個中間人。這個中間人必須有以下功能: 1. 能從物理層上在兩個網絡的接收和發送0/1序列,2. 能同時理解兩種網絡的幀格式。路由器(router)就是爲此而產生的翻譯。一個路由器有多個網卡(NICNetwork Interface Controller),每個NIC可以接入多個網絡,並理解相應的連接層協議。在幀經過路由到達另一個網絡的時候,路由會讀取幀的信息,並改寫以發送到另一個網絡。所以路由器就像是在兩個社區都有分支的郵局。一個社區的郵差將信送到本社區的郵局分支,而郵局會通過自己在另一個地區的分支將信轉交給另一個社區的郵差手中,並由另一個社區的郵差最終送到目的地。

通過路由連接的WiFi和以太網

整個通信過程如下:WiFi上的計算機1 -> 路由WiFi接口 ->  路由以太網接口 -> 以太網上的計算機2(藍色表示WiFi網絡,綠色表示以太網絡)

在鏈路層,我們的一個幀中只能記錄SRCDST兩個地址。而上面的過程需要經過四個地址 (計算機1WiFi接口,以太網接口,計算機2)。顯然,僅僅靠鏈路層協議無法滿足我們的需要。由於鏈路層協議開發在先,我們無法改動鏈路層協議,只能在鏈路層的數據(payload),也就是信紙內部下功夫了。IP協議應運而生。

計算機1,路由器和計算機2都要懂得IP協議。當計算機1寫信的時候,會在信紙的開頭寫上這封信的出發地址和最終到達地址 (而不是在信封上),而在信封上寫上要送往郵局。WiFi網的郵差將信送往郵局。在郵局,信被打開,郵局工作人員看到最終地址,於是將信包裝在一個新的信封中,寫上出發地爲郵局,到達地爲計算機2,並交給以太網的郵差,由以太網的郵差送往計算機2

(IP協議還要求寫如諸如校驗等信息,交通狀況等信息,以保護通信的穩定性。)

轉交給郵局

在鏈路層,郵差只負責在本社區送信,所以信封上的地址總是第一條街第三座房子或者說中心十字路口拐角的小房子這樣一些本地人才瞭解的地址描述,這給郵局的工作帶來不便。所以郵局要求,信紙上寫的地址必須是一個符合官方規定的郵編,也就是IP地址。這個地址爲世界上的每一個房子編號(郵編)。當信件送到郵局的時候,郵局根據郵編,就能查到對應的地址描述,從而能順利改寫信封上的信息。

每個郵局一般連接多個社區,而一個社區也可以有多個郵局,分別通往不同的社區。有時候一封信要通過多個郵局轉交,才能最終到達目的地,這個過程叫做route。郵局將分離的局域網絡連接成了internet,並最終構成了覆蓋全球的互聯網



傳輸層(transport layer

上面的三層協議讓不同的計算機之間可以通信。但計算機中實際上有許多個進程,每個進程都可能有通信的需求這就好像一所房子裏住了好幾個人(進程),如何讓信精確的送到某個人手裏呢?遵照之前相同的邏輯,我們需要在信紙上寫上新的信息,比如收信人的姓名,纔可能讓信送到。所以,傳輸層就是在信紙的空白上寫上新的收信人信息每一所房子會配備一個管理員(傳輸層協議)管理員從郵差手中接過信,會根據收信人,將信送給房子中的某個人

管理員

傳輸層協議,比如TCPUDP,使用端口號(port number)來識別收信人(某個進程)。在寫信的時候,我們寫上目的地的端口。當信到達目的地的管理員手中,他會根據傳輸層協議,識別端口號,將信送給不同的人。

TCPUDP協議是兩種不同的傳輸層協議。UDP協議類似於我們的信件交流過程。TCP協議則好像兩個情人間的頻繁通信。一個小情人要表達的感情太多,以致於連續寫了好幾封信。而另一方必須將這些信按順序排列起來,才能看明白全部的意思。TCP協議還有控制網絡交通等功能。



應用層(applicationlayer

通過上面的幾層協議,我們已經可以在任意兩個人(進程)之間進行通信。然而每個人實際上從事的是不同的行業。有的人是律師,有的人外交官。比如說律師之間的通信,會用嚴格的律師術語,以免產生糾紛。再比如外交官之間的通信,必須符合一定的外交格式,以免發生外交誤會。再比如間諜通過暗號來傳遞加密信息。應用層協議是對信件內容進一步的用語規範。應用層的協議包括用於Web瀏覽的HTTP協議,用於傳輸文件的FTP協議,用於EmailIMAP等等

 外交通信



總結

總過網絡分層,我們從原始的0/1序列抽象出本地地址(郵差)、郵編(郵局)、收信人(管理員)、收信人行業(用語規範)這些概念。這些概念最終允許互聯網上的分佈於兩臺計算機的兩個進程相互通信。

寫信人必須按照各層的協議,封裝好整個信封 (encapsulation);而收信人則按照相反的順序,來拆開這個信封。整個過程是可讀信息 -> 二進制 -> 可讀信息。計算機只能理解和傳輸0/1序列,而計算機的用戶則總是輸入和輸出可讀信息。網絡協議保證了可讀信息在整個轉換和傳輸過程中的完整性。

計算機協議本身還有更多的細節需要深入。這篇文章只是從分層的角度描述各個層次所實現的功能。

 

學習心得:

1、物理層:傳送物理信號真實存在的物理媒介,針對某種媒介,電腦可以有相應的接口,用來接收物理信號,並解讀成爲0/1序列。(光纖、電纜或者電磁波)。

物理層——莫爾斯電報機

 

2、鏈路層:信息以幀(frame)爲單位傳輸。所謂的幀,是一段有限的0/1序列。鏈路層協議的功能就是識別0/1序列中所包含的幀。含收信地址(Source, SRC)和送信地址(Destination, DST),還有能夠探測錯誤的校驗序列(Frame CheckSequence)。當然,幀中最重要的最重要是所要傳輸的數據 (payload),以太網(Ethernet)和WiFi是現在最常見的鏈路層協議。鏈路層協議不關心數據中到底包含什麼。幀就像是一個信封,把數據包裹起來。

鏈路層:——社區小郵差

 

3、網絡層:

一個路由器有多個網卡(NIC,Network InterfaceController),每個NIC可以接入多個網絡,並理解相應的連接層協議。

1). 能從物理層上在兩個網絡的接收和發送0/1序列,2). 能同時理解兩種網絡的幀格式。

WiFi上的計算機1 -> 路由WiFi接口 ->  路由以太網接口 -> 以太網上的計算機2

路由器——兩個社區都有分支的郵局

 

4、傳輸層:

計算機中實際上有許多個進程,每個進程都可能有通信的需求,傳輸層協議,比如TCP和UDP,使用端口號(port number)來識別收信人(某個進程)。

傳輸層——管理員

 

5、應用層:

對傳輸內容進一步的用語規範。應用層的協議包括用於Web瀏覽的HTTP協議,用於傳輸文件的FTP協議,用於Email的IMAP等等。

應用層——外交通信

原文鏈接:http://www.cnblogs.com/vamei

 

 

【協議森林】02 小喇叭開始廣播 (以太網與WiFi協議)

2017-08-29 Vamei 碼農有道

小喇叭開始廣播啦,如果你知道這個,你一定是老一輩的人。小喇叭是五十年代到八十年代的兒童廣播節目。在節目一開始,都會有一段這樣的播音:小朋友,小喇叭開始廣播了!聽到這裏,收音機前的小朋友就興奮起來,準備好聽節目了:這一期的內容是鏈路層的以太網(Ethernet)協議與WiFi

我們在郵差與郵局中說到,以太網和WiFi是鏈路層的兩種協議在鏈路層信息以幀(frame)爲單位傳輸。幀像信封一樣將數據(payload)包裹起來,並註明收信地址和送信地址。鏈路層實現了本地社區的通信。我們先來看看以太網的幀。



以太網的幀格式

本身是一段有限的0/1序列。它可以分爲頭部、數據(Payload)和尾部三部分:

幀按照上面的順序從頭到尾依次被髮送/接收。我們下面進一步解釋各個區域。



幀頭部

幀的最初7byte被稱爲序言(preamble)它每個byte都是0xAA(這裏是十六進制,也就是二進制的10101010)。通常,我們都會預定好以一定的頻率發送0/1序列(比如每秒10bit)。如果接收設備以其他頻率接收(比如每秒5bit),那麼就會錯漏掉應該接收的0/1信息。但是,由於網卡的不同,發送方和接收方即使預訂的頻率相同,兩者也可能由於物理原因發生偏差。這就好像兩個人約好的10點見,結果一個人錶快,一個人錶慢一樣。序言是爲了讓接收設備調整接收頻率,以便與發送設備的頻率一致,這個過程就叫做時鐘復原(recover the clock)

(就像在收聽廣播之前,調整轉鈕,直到聲音清晰。網卡會在接收序言的過程中不斷微調自己的接收頻率,直到自己聽到...1010...)

時鐘調整好之後,我們等待幀的起始信號(SFD, start framedelimiter)SFD是固定的值0xAB。這個0xAB就好像小喇叭開始廣播啦一樣,提醒我們好節目就要上演了。

PreambleSFD

SFD之後是6 byte目的地址(DST, destination)6 byte源地址(SRC,source)這就是我們在郵差和郵局中的介紹一樣,爲信封寫上目的地和發出地。要注意,這裏寫在信封上的是對地址的本地描述,也就是MAC地址。MAC地址是物理設備自帶的序號,只能在同一個以太網中被識別 (正如郵差只熟悉自己的社區一樣)

頭部的最後一個區域是Type用以說明數據部分的類型。(比如0x0800IPv40x0806ARP)



幀數據部分

數據一般包含有符合更高層協議的數據,比如IP包。連接層協議本身並不在乎數據是什麼,它只負責傳輸。注意,數據尾部可能填充有一串0(PAD區域)原因是數據需要超過一定的最小長度,不同的協議要求的數據最小長度是不一樣的,例如:以太網(IEEE 802.3)要求幀的數據部分長度是46-1500byte。如果數據部分不夠46byte,則在數據尾部填充0以達到指定的最小長度。



幀尾部

跟隨在數據之後的是校驗序列(FCS, Frame Check Sequence)。校驗序列是爲了檢驗數據的傳輸是否發生錯誤。在物理層,我們通過一些物理信號來表示0/1序列(比如高壓/低壓,高頻率/低頻率等),但這些物理信號可能在傳輸過程中受到影響,以致於發生錯誤。如何來發現我們的數據是正確的呢?

一個方法是將數據發送兩遍,然後對比一下是否一樣。但這樣就大大降低了網絡的效率。

FCS採用了CRC(CyclicRedundancy Check)算法。這就好像是一家飯店的老闆僱傭了一個收銀員,但他又擔心收銀員黑錢。可是每天營業額很大,老闆即使坐在旁邊看,也不能用記住收到的總數。所以他採取了一個聰明的辦法:只記住收到錢的最後一位 (比如收到19元,老闆記住9)。當有新的進賬(比如13,尾數爲3),他就將新的尾數和舊的尾數相加,再記住和的尾數(也就是2)。當收銀員交給老闆錢的時候,老闆只用看總額的最後一位是否和自己記的最後一位相同,就可以知道收銀員是否誠實了。如果說我們的數據是收銀的總額的話,我們的FCS就是老闆記錄的尾數。如果兩者不相符,我們就知道數據在傳輸的過程中出現錯誤,不能使用。

FCS在盯着

上面的比喻實際上是用營業總額不斷的除以10,獲得最終的尾數。CRC算法也相類似。nCRC算法取一個n bit的因子,比如下面的1011。數據序列結尾增加n-10。因子與數據序列的不斷進行XOR運算,直到得到n-1位的餘數,也就是100。該餘數各位取反(011),然後存儲在FCS的位置。

上面例子用的是4CRC。在Ethernet中使用的因子爲32位的,以達到更好的檢測效果。



集線器(Hubvs 交換器(Switch

以太網使用集線器或者交換器將幀從發出地傳送到目的地。一臺集線器或交換器上有多個端口,每個端口都可以連接一臺計算機(或其他設備)

集線器像一個廣播電臺。一臺電腦將幀發送到集線器,集線器會將幀轉發到所有其他的端口。每臺計算機檢查自己的MAC地址是不是符合DST。如果不是,則保持沉默。集線器是比較早期的以太網設備。它有明顯的缺陷:

1) 任意兩臺電腦的通信在同一個以太網上是公開的。所有連接在同一個集線器上的設備都能收聽到別人在傳輸什麼,這樣很不安全。可以通過對信息加密提高安全性。

2) 不允許多路同時通信。如果兩臺電腦同時向集線器發信,集線器會向所有設備發出衝突信息,提醒發生衝突。可以在設備上增加衝突檢測算法(collisiondetection):一旦設備發現有衝突,則隨機等待一段時間再重新發送。

交換器服集線器的缺陷。交換器記錄有各個設備的MAC地址。當幀發送到交換器時,交換器會檢查DST,然後將幀只發送到對應端口交換器允許多路同時通信由於交換器的優越性,交換器基本上取代了集線器。但比較老的以太網還有可能在使用集線器。

上面的兩個截圖來自CISCO的一個視頻,這個視頻形象的解釋了這兩種設備,下面是視頻的地址,有興趣的同學可以看看:

http://v.youku.com/v_show/id_XNDgwNTQ5OTI4.html



WiFi

WiFi的工作方式與集線器連接下的以太網類似。一個WiFi設備會向所有的WiFi設備發送幀,其它的WiFi設備檢查自己是否符合DST。由於WiFi採取無線電信號,所以很難像交換器一樣定向發送,所以WiFi安全性很值得關注。WiFi採用加密的方法來實現信息的安全性。

(早期的WEP加密方法非常脆弱,建議使用WPA或者WPA2加密方法。隱藏WiFi設備ID的方法不是很有用。)



總結

我們深入了鏈路層協議的一些細節。鏈路層是物理與邏輯的接口,它的設計兼顧了物理需求(比如時鐘復原,CRC)和邏輯需求(比如地址、數據)。由於鏈路層處於網絡邏輯的底層,有許多基於鏈路層的攻擊手法,這需要我們對鏈路層的工作方式有一定的瞭解,以設計出更好的網絡安全策略。

原文鏈接:http://www.cnblogs.com/vamei

 

【協議森林】03 IP接力賽

2017-09-03 Vamei 碼農有道



網絡層(network layer)是實現互聯網的最重要的一層。正是在網絡層面上,各個局域網根據IP協議相互連接,最終構成覆蓋全球的Internet。更高層的協議,無論是TCP還是UDP,必須通過網絡層的IP數據包(datagram)來傳遞信息。操作系統也會提供該層的socket,從而允許用戶直接操作IP包。

IP數據包是符合IP協議的信息(也就是0/1序列),我們後面簡稱IP數據包爲IPIP包分爲頭部(header)數據(Data)兩部分。數據部分是要傳送的信息,頭部是爲了能夠實現傳輸而附加的信息(這與以太網幀的頭部功能相類似,如果對幀感到陌生,可參看小喇叭開始廣播(請戳我)一文)



IP包格式

IP協議可以分爲IPv4IPv6兩種。IPv6是改進版本,用於在未來取代IPv4協議。出於本文的目的,我們可以暫時忽略兩者的區別,只以IPv4爲例。下面是IPv4的格式

IPv4我們按照4 bytes將整個序列摺疊,以便更好的顯示

與幀類似,IP包的頭部也有多個區域。我們將注意力放在紅色的發出地(sourceaddress)目的地(destinationaddress)。它們都是IP地址IPv4的地址爲4 bytes的長度(也就是32)。我們通常將IPv4的地址分爲四個十進制的數,每個數的範圍爲0-255,比如192.0.0.1就是一個IP地址。填寫在IP包頭部的是該地址的二進制形式。

IP地址是全球地址,它可以識別"社區"(局域網)"房子"(主機)。這是通過將IP地址分類實現的。

每個IP地址的32位分爲前後兩部分,第一部分用來區分局域網,第二個部分用來區分該局域網的主機。子網掩碼(Subnet Mask)告訴我們這兩部分的分界線,比如255.0.0.0(也就是81240)表示前8位用於區分局域網,後24位用於區分主機。由於ABC分類是已經規定好的,所以當一個IP地址屬於B類範圍時,我們就知道它的前16位和後16位分別表示局域網和主機。



網卡與路由器

郵差與郵局中說,IP地址是分配給每個房子(計算機)"郵編"。但這個說法並不精確。IP地址實際上識別的是網卡(NIC,Network Interface Card)。網卡是計算機的一個硬件,它在接收到網路信息之後,將信息交給計算機(處理器/內存)。當計算機需要發送信息的時候,也要通過網卡發送。一臺計算機可以有不只一個網卡,比如筆記本就有一個以太網卡和一個WiFi網卡。計算機在接收或者發送信息的時候,要先決定想要通過哪個網卡。

NIC

路由器(router)實際上就是一臺配備有多個網卡的專用電腦。它讓網卡接入到不同的網絡中,這樣,就構成在郵差與郵局中所說的郵局。比如下圖中位於中間位置的路由器有兩個網卡,地址分別爲199.165.145.17199.165.146.3。它們分別接入到兩個網絡:199.165.145199.165.146

 

 

IP包接力

IP包的傳輸要通過路由器的接力。每一個主機和路由中都存有一個路由表(routingtable)。路由表根據目的地的IP地址,規定了等待發送的IP包所應該走的路線。就好像下圖的路標,如果地址是東京,那麼請轉左;如果地址是悉尼,那麼請向右。

Areal world routing table

比如我們從主機145.22生成發送到146.21IP包:鋪開信紙,寫好信的開頭(剩下數據部分可以是TCP包,可以是UDP包,也可以是任意亂寫的字,我們暫時不關心),註明目的地IP地址(199.165.146.21)發出地IP地址(199.165.145.22)。主機145.22隨後參照自己的routing table,裏面有三行:

這裏有兩行記錄。

第一行表示,如果IP目的地是199.165.145.0這個網絡的主機,那麼只需要自己在eth0上的網卡直接傳送(本地社區:直接送達),不需要前往router(Gateway0.0.0.0 = “本地送信”)

第二行表示所有不符合第一行的IP目的地,都應送往Gateway199.165.145.17,也就是中間router接入在eth0的網卡IP地址(郵局在eth0的分支)

我們的IP包目的地爲199.165.146.21,不符合第一行,所以按照第二行,發送到中間的router。主機145.22會將IP包放入幀的payload,並在幀的頭部寫上199.165.145.22對應的MAC地址,這樣,就可以按照小喇叭中的方法在局域網中傳送了。

中間的router在收到IP包之後(實際上是收到以太協議的幀,然後從幀中的payload讀取IP),提取目的地IP地址,然後對照自己的routing table

從前兩行我們看到,由於router橫跨eth0eth1兩個網絡,它可以直接通過eth0eth1上的網卡直接傳送IP包。

第三行表示,如果是前面兩行之外的IP地址,則需要通過eth1,送往199.165.146.8(右邊的router)

我們的目的地符合第二行,所以將IP放入一個新的幀中,在幀的頭部寫上199.165.146.21MAC地址,直接發往主機146.21(Linux下,可以使用$route-n來查看routing table)

IP包可以進一步接力,到達更遠的主機。IP包從主機出發,根據沿途路由器的routing table指導,在router間接力。IP包最終到達某個router,這個router與目標主機位於一個局域網中,可以直接建立連接層的通信。最後,IP包被送到目標主機。這樣一個過程叫做routing(我們就叫IP包接力好了,路由這個詞實在是混合了太多的意思)

整個過程中,IP包不斷被主機和路由封裝入幀(信封)並拆開,然後藉助連接層,在局域網的各個NIC之間傳送幀。整個過程中,我們的IP包的內容保持完整,沒有發生變化。最終的效果是一個IP包從一個主機傳送到另一個主機。利用IP包,我們不需要去操心底層(比如鏈路層)發生了什麼。



ARP協議

在上面的過程中,我們實際上假設了,每一臺主機和路由都能瞭解局域網內的IP地址和MAC地址的對應關係,這是實現IP包封裝(encapsulation)到幀的基本條件。IP地址與MAC地址的對應是通過ARP協議傳播到局域網的每個主機和路由。每一臺主機或路由中都有一個ARP cache,用以存儲局域網內IP地址和MAC地址如何對應。

ARP協議(ARP介於鏈路層和網絡層之間,ARP包需要包裹在一個幀中,它的工作方式如下:主機會發出一個ARP包,該ARP包中包含有自己的IP地址和MAC地址。通過ARP包,主機以廣播的形式詢問局域網上所有的主機和路由:我是IP地址xxxx,我的MAC地址是xxxx,有人知道199.165.146.4MAC地址嗎?擁有該IP地址的主機會回覆發出請求的主機:哦,我知道,這個IP地址屬於我的一個NIC,它的MAC地址是xxxxxx。由於發送ARP請求的主機採取的是廣播形式,並附帶有自己的IP地址和MAC地址,其他的主機和路由會同時檢查自己的ARP cache,如果不符合,則更新自己的ARP cache

這樣,經過幾次ARP請求之後,ARP cache會達到穩定。如果局域網上設備發生變動,ARP重複上面過程。

(Linux下,可以使用$arp命令來查看ARP的過程。ARP協議只用於IPv4IPv6使用Neighbor Discovery Protocol來替代ARP的功能)



RoutingTable的生成

我們還有另一個假設,就是每個主機和路由上都已經有了合理的routingtable。這個routint table描述了網絡的拓撲(topology)結構。如果你瞭解自己的網絡連接,可以手寫自己主機的routing table。但是,一個路由器可能有多個出口,所以routingtable可能會很長。更重要的是,周圍連接的其他路由器可能發生變動(比如新增路由器或者路由器壞掉),我們就需要routing table能及時將交通導向其他的出口。我們需要一種更加智能的探測周圍的網絡拓撲結構,並自動生成routing table

我們以北京地鐵爲例子。如果從機場前往朝陽門,那麼可以採取2號航站樓->>三元橋->>東直門->>朝陽門。2號航站樓和朝陽門分別是出發和目的主機。而三元橋和東直門爲中間的兩個router。如果三元橋->>東直門段因爲維修停運,我們需要更改三元橋的routing table,從而給前往朝陽門的乘客(IP)指示:請走如下路線三元橋->>芍藥居。然後依照芍藥居的routing table前往朝陽門(芍藥居->>東直門->>朝陽門)

一種用來生成routingtable的協議是RIP(Routing Information Protocol)。它通過距離來決定routing table,所以屬於distance-vectorprotocol

對於RIP來說,所謂的距離是從出發地到目的地途徑的路由器數目(hop number)。比如上面從機場到朝陽門,按照2號航站樓->>三元橋->>東直門->>朝陽門路線,途徑兩個路由器,距離爲2。我們最初可以手動生成三元橋的routing table

隨後,根據RIP協議,三元橋向周圍的路由器和主機廣播自己前往各個IP的距離(比如到機場=0,團結湖=0,國貿=1,望京西=1,建國門=2)。收到RIP包的路由器和主機根據RIP自己到發送RIP包的主機的距離,算出自己前往各個IP的距離。東直門與三元橋的距離爲1。東直門收到三元橋的RIP(到機場的距離爲0),那麼東直門途徑三元橋前往機場的距離爲1+0=1。如果東直門自己的RIP記錄都比這個遠(比如東直門->>芍藥居->>三元橋->>機場 = 2)。那麼東直門更改自己的routingtable:前往機場的交通都發往三元橋而不是芍藥居。如果東直門自身的RIP記錄並不差,那麼東直門保持routing table不變。

上述過程在各個點不斷重複RIP廣播/計算距離/更新routingtable的過程,最終所有的主機和路由器都能生成最合理的路徑(merge)

(RIP的基本邏輯是:如果A距離B6,而我距離A1,那麼我途徑AB的距離爲7)

RIP出於技術上的原因(loopinghops),認爲距離超過15IP不可到達。所以RIP更多用於互聯網的一部分(比如整個中國電信的網絡)。這樣一個互聯網的部分往往屬於同一個ISP或者有同一個管理機構,所以叫做自治系統(AS,autonomoussystem)

自治系統內部的主機和路由根據通向外部的邊界路由器來和其它的自治系統通信。各個邊界路由器之間通過BGP(Border Gateway Protocol)來生成自己前往其它ASroutingtable,而自治系統內部則參照邊界路由器,使用RIP來決定routingtableBGP的基本工作過程與RIP類似,但在考慮距離的同時,也權衡比如政策、連接性能等其他因素,再決定交通的走向(routing table)



總結

我們一開始講述了IP包根據routing table進行接力的過程。爲了順利實現接力,我們又進一步深入到ARPRIP/BGP。這三個協議都協助了IP傳輸。

ARP讓每臺電腦和路由器知道自己局域網內IP地址和MAC地址的對應關係,從而順利實現IP包到幀的封裝。RIP協議可以生成自治系統內部合理的routing tableBGP協議可以生成自治系統外部的routing table

在整個過程中,我們都將注意力放在了IP包大的傳輸過程中,而故意忽略一些細節。而上面的IP接力過程適用於IPv6

原文鏈接:http://www.cnblogs.com/vamei

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章