自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

IP接力賽——IP, ARP, RIP和BGP協(xié)議

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
網(wǎng)絡(luò)層是實(shí)現(xiàn)互聯(lián)網(wǎng)的最重要的一層。正是在網(wǎng)絡(luò)層面上,各個(gè)局域網(wǎng)根據(jù)IP協(xié)議相互連接,最終構(gòu)成覆蓋全球的Internet。更高層的協(xié)議,無論是TCP還是UDP,必須通過網(wǎng)絡(luò)層的IP數(shù)據(jù)包來傳遞信息。

網(wǎng)絡(luò)層(network layer)是實(shí)現(xiàn)互聯(lián)網(wǎng)的最重要的一層。正是在網(wǎng)絡(luò)層面上,各個(gè)局域網(wǎng)根據(jù)IP協(xié)議相互連接,最終構(gòu)成覆蓋全球的Internet。更高層的協(xié)議,無論是TCP還是UDP,必須通過網(wǎng)絡(luò)層的IP數(shù)據(jù)包(datagram)來傳遞信息。操作系統(tǒng)也會(huì)提供該層的socket,從而允許用戶直接操作IP包。

IP數(shù)據(jù)包是符合IP協(xié)議的信息(也就是0/1序列),我們后面簡(jiǎn)稱IP數(shù)據(jù)包為IP包。IP包分為頭部(header)和數(shù)據(jù)(Data)兩部分。數(shù)據(jù)部分是要傳送的信息,頭部是為了能夠?qū)崿F(xiàn)傳輸而附加的信息(這與以太網(wǎng)幀的頭部功能相類似,如果對(duì)幀感到陌生,可參看小喇叭一文)。

IP包的格式

IP協(xié)議可以分為IPv4和IPv6兩種。IPv6是改進(jìn)版本,用于在未來取代IPv4協(xié)議。出于本文的目的,我們可以暫時(shí)忽略兩者的區(qū)別,只以IPv4為例。下面是IPv4的格式

 

 

IPv4包 我們按照4 bytes將整個(gè)序列折疊,以便更好的顯示

與幀類似,IP包的頭部也有多個(gè)區(qū)域。我們將注意力放在紅色的發(fā)出地(source address)和目的地(destination address)。它們都是IP地址。IPv4的地址為4 bytes的長(zhǎng)度(也就是32位)。我們通常將IPv4的地址分為四個(gè)十進(jìn)制的數(shù),每個(gè)數(shù)的范圍為0-255,比如192.0.0.1就是一個(gè)IP地址。填寫在IP包頭部的是該地址的二進(jìn)制形式。

IP地址是全球地址,它可以識(shí)別"社區(qū)"(局域網(wǎng))和"房子"(主機(jī))。這是通過將IP地址分類實(shí)現(xiàn)的。

IPv4包

每個(gè)IP地址的32位分為前后兩部分,***部分用來區(qū)分局域網(wǎng),第二個(gè)部分用來區(qū)分該局域網(wǎng)的主機(jī)。子網(wǎng)掩碼(Subnet Mask)告訴我們這兩部分的分界線,比如255.0.0.0(也就是8個(gè)1和24個(gè)0)表示前8位用于區(qū)分局域網(wǎng),后24位用于區(qū)分主機(jī)。由于A、B、C分類是已經(jīng)規(guī)定好的,所以當(dāng)一個(gè)IP地址屬于B類范圍時(shí),我們就知道它的前16位和后16位分別表示局域網(wǎng)和主機(jī)。

網(wǎng)卡與路由器

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

NIC

NIC

路由器(router)實(shí)際上就是一臺(tái)配備有多個(gè)網(wǎng)卡的專用電腦。它讓網(wǎng)卡接入到不同的網(wǎng)絡(luò)中,這樣,就構(gòu)成在郵差與郵局中所說的郵局。比如下圖中位于中間位置的路由器有兩個(gè)網(wǎng)卡,地址分別為199.165.145.17和199.165.146.3。它們分別接入到兩個(gè)網(wǎng)絡(luò):199.165.145和199.165.146。

路由器

IP包接力

IP包的傳輸要通過路由器的接力。每一個(gè)主機(jī)和路由中都存有一個(gè)路由表(routing table)。路由表根據(jù)目的地的IP地址,規(guī)定了等待發(fā)送的IP包所應(yīng)該走的路線。就好像下圖的路標(biāo),如果地址是“東京”,那么請(qǐng)轉(zhuǎn)左;如果地址是“悉尼”,那么請(qǐng)向右。

A real world routing table

A real world routing table#p#

比如我們從主機(jī)145.17生成發(fā)送到146.21的IP包:鋪開信紙,寫好信的開頭(剩下數(shù)據(jù)部分可以是TCP包,可以是UDP包,也可以是任意亂寫的字,我們暫時(shí)不關(guān)心),注明目的地IP地址(199.165.146.21)和發(fā)出地IP地址(199.165.145.17)。主機(jī)145.17隨后參照自己的routing table,里面有三行記錄:

IPv4包

這里有兩行記錄。

***行表示,如果IP目的地是199.165.145.0這個(gè)網(wǎng)絡(luò)的主機(jī),那么只需要自己在eth0上的網(wǎng)卡直接傳送(“本地社區(qū)”:直接送達(dá)),不需要前往router(Gateway 0.0.0.0 = “本地送信”)。

第二行表示所有不符合***行的IP目的地,都應(yīng)該送往Gateway 199.165.145.17,也就是中間router接入在eth0的網(wǎng)卡IP地址(郵局在eth0的分支)。

我們的IP包目的地為199.165.146.21,不符合***行,所以按照第二行,發(fā)送到中間的router。主機(jī)145.17會(huì)將IP包放入幀的payload,并在幀的頭部寫上199.165.145.17對(duì)應(yīng)的MAC地址,這樣,就可以按照小喇叭中的方法在局域網(wǎng)中傳送了。

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

IP

從前兩行我們看到,由于router橫跨eth0和eth1兩個(gè)網(wǎng)絡(luò),它可以直接通過eth0和eth1上的網(wǎng)卡直接傳送IP包。

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

我們的目的地符合第二行,所以將IP放入一個(gè)新的幀中,

在幀的頭部寫上199.165.146.21的MAC地址,直接發(fā)往主機(jī)146.21。

(在Linux下,可以使用$route -n來查看routing table)

IP包可以進(jìn)一步接力,到達(dá)更遠(yuǎn)的主機(jī)。IP包從主機(jī)出發(fā),根據(jù)沿途路由器的routing table指導(dǎo),在router間接力。IP包最終到達(dá)某個(gè)router,這個(gè)router與目標(biāo)主機(jī)位于一個(gè)局域網(wǎng)中,可以直接建立連接層的通信。***,IP包被送到目標(biāo)主機(jī)。這樣一個(gè)過程叫做routing(我們就叫IP包接力好了,路由這個(gè)詞實(shí)在是混合了太多的意思)。

整個(gè)過程中,IP包不斷被主機(jī)和路由封裝入幀(信封)并拆開,然后借助連接層,在局域網(wǎng)的各個(gè)NIC之間傳送幀。整個(gè)過程中,我們的IP包的內(nèi)容保持完整,沒有發(fā)生變化。最終的效果是一個(gè)IP包從一個(gè)主機(jī)傳送到另一個(gè)主機(jī)。利用IP包,我們不需要去操心底層(比如連接層)發(fā)生了什么。

ARP協(xié)議

在上面的過程中,我們實(shí)際上假設(shè)了,每一臺(tái)主機(jī)和路由都能了解局域網(wǎng)內(nèi)的IP地址和MAC地址的對(duì)應(yīng)關(guān)系,這是實(shí)現(xiàn)IP包封裝(encapsulation)到幀的基本條件。IP地址與MAC地址的對(duì)應(yīng)是通過ARP協(xié)議傳播到局域網(wǎng)的每個(gè)主機(jī)和路由。每一臺(tái)主機(jī)或路由中都有一個(gè)ARP cache,用以存儲(chǔ)局域網(wǎng)內(nèi)IP地址和MAC地址如何對(duì)應(yīng)。

ARP協(xié)議(ARP介于連接層和網(wǎng)絡(luò)層之間,ARP包需要包裹在一個(gè)幀中)的工作方式如下:主機(jī)會(huì)發(fā)出一個(gè)ARP包,該ARP包中包含有自己的IP地址和MAC地址。通過ARP包,主機(jī)以廣播的形式詢問局域網(wǎng)上所有的主機(jī)和路由:我是IP地址xxxx,我的MAC地址是xxxx,有人知道199.165.146.4的MAC地址嗎?擁有該IP地址的主機(jī)會(huì)回復(fù)發(fā)出請(qǐng)求的主機(jī):哦,我知道,這個(gè)IP地址屬于我的一個(gè)NIC,它的MAC地址是xxxxxx。由于發(fā)送ARP請(qǐng)求的主機(jī)采取的是廣播形式,并附帶有自己的IP地址和MAC地址,其他的主機(jī)和路由會(huì)同時(shí)檢查自己的ARP cache,如果不符合,則更新自己的ARP cache。

這樣,經(jīng)過幾次ARP請(qǐng)求之后,ARP cache會(huì)達(dá)到穩(wěn)定。如果局域網(wǎng)上設(shè)備發(fā)生變動(dòng),ARP重復(fù)上面過程。

(在Linux下,可以使用$arp命令來查看ARP的過程。ARP協(xié)議只用于IPv4。IPv6使用Neighbor Discovery Protocol來替代ARP的功能。)

Routing Table的生成

我們還有另一個(gè)假設(shè),就是每個(gè)主機(jī)和路由上都已經(jīng)有了合理的routing table。這個(gè)routint table描述了網(wǎng)絡(luò)的拓?fù)?topology)結(jié)構(gòu)。如果你了解自己的網(wǎng)絡(luò)連接,可以手寫自己主機(jī)的routing table。但是,一個(gè)路由器可能有多個(gè)出口,所以routing table可能會(huì)很長(zhǎng)。更重要的是,周圍連接的其他路由器可能發(fā)生變動(dòng)(比如新增路由器或者路由器壞掉),我們就需要routing table能及時(shí)將交通導(dǎo)向其他的出口。我們需要一種更加智能的探測(cè)周圍的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),并自動(dòng)生成routing table。

我們以北京地鐵為例子。如果從機(jī)場(chǎng)前往朝陽門,那么可以采取2號(hào)航站樓->>三元橋->>東直門->>朝陽門。2號(hào)航站樓和朝陽門分別是出發(fā)和目的主機(jī)。而三元橋和東直門為中間的兩個(gè)router。如果三元橋->>東直門段因?yàn)榫S修停運(yùn),我們需要更改三元橋的routing table,從而給前往朝陽門的乘客(IP包)指示:請(qǐng)走如下路線三元橋->>芍藥居。然后依照芍藥居的routing table前往朝陽門(芍藥居->>東直門->>朝陽門)。

北京地鐵

一種用來生成routing table的協(xié)議是RIP(Routing Information Protocol)。它通過距離來決定routing table,所以屬于distance-vector protocol。對(duì)于RIP來說,所謂的距離是從出發(fā)地到目的地途徑的路由器數(shù)目(hop number)。比如上面從機(jī)場(chǎng)到朝陽門,按照2號(hào)航站樓->>三元橋->>東直門->>朝陽門路線,途徑兩個(gè)路由器,距離為2。我們最初可以手動(dòng)生成三元橋的routing table。隨后,根據(jù)RIP協(xié)議,三元橋向周圍的路由器和主機(jī)廣播自己前往各個(gè)IP的距離(比如到機(jī)場(chǎng)=0,團(tuán)結(jié)湖=0,國(guó)貿(mào)=1,望京西=1,建***=2)。收到RIP包的路由器和主機(jī)根據(jù)RIP包和自己到發(fā)送RIP包的主機(jī)的距離,算出自己前往各個(gè)IP的距離。東直門與三元橋的距離為1。東直門收到三元橋的RIP包(到機(jī)場(chǎng)的距離為0),那么東直門途徑三元橋前往機(jī)場(chǎng)的距離為1+0=1。如果東直門自己的RIP記錄都比這個(gè)遠(yuǎn)(比如東直門->>芍藥居->>三元橋->>機(jī)場(chǎng) = 2)。那么東直門更改自己的routing table:前往機(jī)場(chǎng)的交通都發(fā)往三元橋而不是芍藥居。如果東直門自身的RIP記錄并不差,那么東直門保持routing table不變。上述過程在各個(gè)點(diǎn)不斷重復(fù)RIP廣播/計(jì)算距離/更新routing table的過程,最終所有的主機(jī)和路由器都能生成最合理的路徑(merge)。

(RIP的基本邏輯是:如果A距離B為6,而我距離A為1,那么我途徑A到B的距離為7)

RIP出于技術(shù)上的原因(looping hops),認(rèn)為距離超過15的IP不可到達(dá)。所以RIP更多用于互聯(lián)網(wǎng)的一部分(比如整個(gè)中國(guó)電信的網(wǎng)絡(luò))。這樣一個(gè)互聯(lián)網(wǎng)的部分往往屬于同一個(gè)ISP或者有同一個(gè)管理機(jī)構(gòu),所以叫做自治系統(tǒng)(AS,autonomous system)。自治系統(tǒng)內(nèi)部的主機(jī)和路由根據(jù)通向外部的邊界路由器來和其它的自治系統(tǒng)通信。各個(gè)邊界路由器之間通過BGP(Border Gateway Protocol)來生成自己前往其它AS的routing table,而自治系統(tǒng)內(nèi)部則參照邊界路由器,使用RIP來決定routing table。BGP的基本工作過程與RIP類似,但在考慮距離的同時(shí),也權(quán)衡比如政策、連接性能等其他因素,再?zèng)Q定交通的走向(routing table)。

總結(jié)

我們一開始講述了IP包根據(jù)routing table進(jìn)行接力的過程。為了順利實(shí)現(xiàn)接力,我們又進(jìn)一步深入到ARP和RIP/BGP。這三個(gè)協(xié)議都協(xié)助了IP傳輸。ARP讓每臺(tái)電腦和路由器知道自己局域網(wǎng)內(nèi)IP地址和MAC地址的對(duì)應(yīng)關(guān)系,從而順利實(shí)現(xiàn)IP包到幀的封裝。RIP協(xié)議可以生成自治系統(tǒng)內(nèi)部合理的routing table。BGP協(xié)議可以生成自治系統(tǒng)外部的routing table。

在整個(gè)過程中,我們都將注意力放在了IP包大的傳輸過程中,而故意忽略一些細(xì)節(jié)。 而上面的IP接力過程適用于IPv6。

責(zé)任編輯:林琳 來源: 博客園
相關(guān)推薦

2014-06-11 13:25:14

IPARPRARP

2020-12-03 08:37:38

TCPIPARP協(xié)議

2011-05-13 10:11:34

IP協(xié)議ARP協(xié)議配置

2010-06-17 17:57:32

ARP協(xié)議

2010-06-21 17:51:53

Linux Arp命令

2010-01-11 10:46:31

2014-10-15 09:14:24

IP

2024-11-04 10:00:00

瀏覽器網(wǎng)絡(luò)

2020-01-05 22:46:31

TCPIP網(wǎng)絡(luò)協(xié)議

2010-07-01 16:38:18

Linux TCP I

2011-03-23 10:45:29

2022-07-04 08:01:16

OSPFRIPBGP

2014-11-21 09:16:23

TCPIP

2010-09-27 13:30:03

IP協(xié)議首部

2010-08-23 17:35:46

DHCP協(xié)議

2010-06-08 14:09:11

IP協(xié)議地址

2010-09-08 15:11:36

TCP IP協(xié)議棧

2010-07-07 17:09:24

IP地址協(xié)議

2010-06-08 13:32:19

TCP IP協(xié)議基礎(chǔ)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)