網絡協(xié)議(四)-網絡層

1. IP協(xié)議

root@test:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff
    inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fec7:7975/64 scope link 
       valid_lft forever preferred_lft forever

10.100.122.2是一個IP地址,inet6 fe80::f816:3eff:fec7:7975/64是IPv6地址脉课。IP地址分為五類:

fig1.jpg

D類是組播地址寺枉,使用這一類地址晰搀,屬于某個組的機器都能收到胰默。

下面這個表展示了ABC三類地址所能包含的主機的數(shù)量:

fig2.jpg

C類地址只能包含254的主機弥虐,而B類地址又太大了,能包含65534個主機脏毯,因此采用了CIDR方式進行優(yōu)化

1.1 CIDR 無類型域間選路

1.1.1 CIDR的斜桿+數(shù)字的表示方式

這種方式打破了上述的分成幾類地址的方式查排,將32位地址一分為二,前面是網絡號抄沮,后面是主機號跋核,例如:

10.100.122.2/24

斜杠和24表示對于這個32位地址而言,前24位是其網絡號叛买,后8位是其主機號砂代。

1.1.2 廣播地址

繼續(xù)以上述的地址為例,其廣播地址為

10.100.122.255

如果發(fā)送這個地址率挣,所有10.100.122網絡里的機器都可以收到

1.1.3 子網掩碼

繼續(xù)以上述的地址為例刻伊,其子網掩碼為

255.255.255.0

與IP地址按位與,就可以得到網絡號

1.2 公有IP地址和私有IP地址

這是按類對IP地址進行劃分的時候的概念椒功,私有地址捶箱,即允許組織內部的IT人員自己進行管理分配的地址。公有IP的資源有組織統(tǒng)一分配的动漾,需要去買丁屎。

fig3.jpg

表格中就有我們很常見的192.168.0.0,一般來說,整個網絡的第一個地址192.168.0.1就是你這個私有網絡的出口地址旱眯,比如你家的路由器地址就是這個晨川;而192.1678.0.255就是廣播地址证九。

1.3 動態(tài)主機配置協(xié)議(DHCP)

網絡管理員需要做的是,配置一段共享的IP地址共虑,每一臺新接入的機器都會通過DHCP協(xié)議愧怜,來這個共享的IP地址里申請,然后自動配置好妈拌。

1.3.1 DHCP的工作方式

  1. 新機器加入進網絡 -- DHCP discover

新機器使用IP地址0.0.0.0發(fā)送一個廣播包拥坛,目的IP地址是255.255.255.255. 廣播包封裝了UDP, UDP封裝了BOOTP尘分,DHCP是BOOTP的增強版渴逻。

在這個廣播包里,新機器會說我是新來的(Boot Request), 我的MAC地址是blabla音诫,我還沒有IP地址惨奕,需要租一個!

fig4.jpg
  1. DHCP offer

DHCP server 為客戶保留一個IP地址竭钝,不會再給別的客戶用這個IP地址了梨撞。DHCP的offer的格式如下,里面有給新人分配的地址:

fig5.jpg

這個時候仍然使用廣播IP作為目的地址香罐,因為此時新機器還沒有IP地址呢卧波。值得注意的是,有可能在配置的時候會有多個DHCP server庇茫,這個新機器可能收到多個DHCP Offer港粱,新機器會選擇一般是最近的一個,然后向網絡發(fā)送一個告知信息的信息包旦签,成為DHCP request

  1. DHCP request

這個廣播數(shù)據包里面包含客戶端的MAC地址查坪,接受的租約中的IP地址,提供此租約的DHCP服務器地址等信息宁炫。

fig6.jpg

注意這個時候新機器的IP還沒有得到確認偿曙,所以客戶端仍然使用0.0.0.0作為源地址

  1. DHCP ACK

當DHCP server接收到客戶機的DHCP request之后,會廣播返回給客戶機一個DHCP ACK消息羔巢,表示已經接受客戶機的選擇

fig7.jpg

1.3.2 IP地址的收回和續(xù)租

客戶機會在租期過去 50% 的時候望忆,直接向為其提供 IP 地址的 DHCP Server 發(fā)送 DHCP request 消息包「透眩客戶機接收到該服務器回應的 DHCP ACK 消息包启摄,會根據包中所提供的新的租期以及其他已經更新的 TCP/IP 參數(shù),更新自己的配置幽钢。這樣歉备,IP 租用更新就完成了。

1.3.3 DHCP協(xié)議- 自動安裝操作系統(tǒng) - PXE(預啟動執(zhí)行環(huán)境)

其實搅吁,這個過程和操作系統(tǒng)啟動的過程有點兒像威创。首先,啟動 BIOS谎懦。這是一個特別小的小系統(tǒng)肚豺,只能干特別小的一件事情。其實就是讀取硬盤的 MBR 啟動扇區(qū)界拦,將 GRUB 啟動起來吸申;然后將權力交給 GRUB,GRUB 加載內核享甸、加載作為根文件系統(tǒng)的 initramfs 文件截碴;然后將權力交給內核;最后內核啟動蛉威,初始化整個操作系統(tǒng)日丹。那我們安裝操作系統(tǒng)的過程,只能插在 BIOS 啟動之后了蚯嫌。因為沒安裝系統(tǒng)之前哲虾,連啟動扇區(qū)都沒有。因而這個過程叫做預啟動執(zhí)行環(huán)境(Pre-boot Execution Environment)

PXE協(xié)議會先把客戶端放到BIOS里面择示,當計算機啟動的時候束凑,BIOS把PXE客戶端調入內存里面,就可以連接到服務端做一些操作了栅盲。

首先汪诉,PXE 客戶端自己也需要有個 IP 地址。因為 PXE 的客戶端啟動起來谈秫,就可以發(fā)送一個 DHCP 的請求扒寄,讓 DHCP Server 給它分配一個地址。PXE 客戶端有了自己的地址拟烫,那它怎么知道 PXE 服務器在哪里呢旗们?對于其他的協(xié)議,都好辦构灸,要么人告訴他上渴。例如,告訴瀏覽器要訪問的 IP 地址喜颁,或者在配置中告訴它稠氮;例如,微服務之間的相互調用半开。

但是 PXE 客戶端啟動的時候隔披,啥都沒有。好在 DHCP Server 除了分配 IP 地址以外寂拆,還可以做一些其他的事情奢米。這里有一個 DHCP Server 的一個樣例配置:

ddns-update-style interim;
ignore client-updates;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option time-offset -18000;
default-lease-time 21600;
max-lease-time 43200;
range dynamic-bootp 192.168.1.240 192.168.1.250;
filename "pxelinux.0";
next-server 192.168.1.180;
}

按照上面的原理抓韩,默認的 DHCP Server 是需要配置的,無非是我們配置 IP 的時候所需要的 IP 地址段鬓长、子網掩碼谒拴、網關地址、租期等涉波。如果想使用 PXE英上,則需要配置 next-server,指向 PXE 服務器的地址啤覆,另外要配置初始啟動文件 filename苍日。

fig8.jpg

2. ICMP協(xié)議

ping的工作原理,ping是基于ICMP協(xié)議來工作的窗声,ICMP全稱為: Internet Control Message Protocol相恃,就是互聯(lián)網控制報文協(xié)議。

ICMP報文是封裝在IP包里面的笨觅。如圖所示

fig9.jpg

2.1 查詢報文類型

ICMP主動發(fā)起的豆茫,對于ping的主動請求,進行網絡抓包屋摇,稱為ICMP ECHO REQUEST. 同理主動請求的回復稱為ICMP ECHO REPLY. 比起原生的ICMP多了標識符和序號兩個字段揩魂。

2.2 差錯報文類型

  1. 終點不可達 3
  • 網絡不可達 0
  • 主機不可達 1
  • 協(xié)議不可達 2
  • 端口不可達 3
  • 需要進行分片但設置了不分片
  1. 源抑制 4

源站放慢了速度

  1. 超時 11

超過了網絡包的生存時間,但是還沒到

  1. 重定向 5

換下次發(fā)送使用的路由器

2.3 Ping的使用 查詢報文類型的使用

下圖描述了ping的整個發(fā)送和接收過程炮温。

fig10.jpg

假定主機 A 的 IP 地址是 192.168.1.1火脉,主機 B 的 IP 地址是 192.168.1.2,它們都在同一個子網柒啤。那當你在主機 A 上運行“ping 192.168.1.2”后倦挂,會發(fā)生什么呢?

ping 命令執(zhí)行的時候,源主機首先會構建一個 ICMP 請求數(shù)據包担巩,ICMP 數(shù)據包內包含多個字段方援。最重要的是兩個,第一個是類型字段涛癌,對于請求數(shù)據包而言該字段為 8犯戏;另外一個是順序號,主要用于區(qū)分連續(xù) ping 的時候發(fā)出的多個數(shù)據包拳话。每發(fā)出一個請求數(shù)據包先匪,順序號會自動加 1。為了能夠計算往返時間 RTT弃衍,它會在報文的數(shù)據部分插入發(fā)送時間呀非。

然后,由 ICMP 協(xié)議將這個數(shù)據包連同地址 192.168.1.2 一起交給 IP 層。IP 層將以 192.168.1.2 作為目的地址岸裙,本機 IP 地址作為源地址猖败,加上一些其他控制信息,構建一個 IP 數(shù)據包降允。

接下來恩闻,需要加入 MAC 頭。如果在本節(jié) ARP 映射表中查找出 IP 地址 192.168.1.2 所對應的 MAC 地址拟糕,則可以直接使用判呕;如果沒有倦踢,則需要發(fā)送 ARP 協(xié)議查詢 MAC 地址送滞,獲得 MAC 地址后,由數(shù)據鏈路層構建一個數(shù)據幀辱挥,目的地址是 IP 層傳過來的 MAC 地址犁嗅,源地址則是本機的 MAC 地址;還要附加上一些控制信息晤碘,依據以太網的介質訪問規(guī)則褂微,將它們傳送出去。

主機 B 收到這個數(shù)據幀后园爷,先檢查它的目的 MAC 地址宠蚂,并和本機的 MAC 地址對比,如符合童社,則接收求厕,否則就丟棄。接收后檢查該數(shù)據幀扰楼,將 IP 數(shù)據包從幀中提取出來呀癣,交給本機的 IP 層。同樣弦赖,IP 層檢查后项栏,將有用的信息提取后交給 ICMP 協(xié)議。

主機 B 會構建一個 ICMP 應答包蹬竖,應答數(shù)據包的類型字段為 0沼沈,順序號為接收到的請求數(shù)據包中的順序號,然后再發(fā)送出去給主機 A币厕。

在規(guī)定的時候間內庆冕,源主機如果沒有接到 ICMP 的應答包,則說明目標主機不可達劈榨;如果接收到了 ICMP 應答包访递,則說明目標主機可達。此時同辣,源主機會檢查拷姿,用當前時刻減去該數(shù)據包最初從源主機上發(fā)出的時刻惭载,就是 ICMP 數(shù)據包的時間延遲。

2.4 traceroute 差錯報文類型的使用

traceroute會故意設置特殊的TTL响巢,來追蹤去往目的地沿途經過的路由器描滔。Traceroute 的參數(shù)指向某個目的 IP 地址,它會發(fā)送一個 UDP 的數(shù)據包踪古。將 TTL 設置成 1含长,也就是說一旦遇到一個路由器或者一個關卡,就表示它“犧牲”了伏穆。

如果中間的路由器不止一個拘泞,當然碰到第一個就“犧牲”。于是枕扫,返回一個 ICMP 包陪腌,也就是網絡差錯包,類型是時間超時烟瞧。那大軍前行就帶一頓飯诗鸭,試一試走多遠會被餓死,然后找個哨探回來報告参滴,那我就知道大軍只帶一頓飯能走多遠了强岸。接下來,將 TTL 設置為 2砾赔。第一關過了犹撒,第二關就“犧牲”了棵里,那我就知道第二關有多遠咖城。如此反復硬鞍,直到到達目的主機。這樣酷勺,Traceroute 就拿到了所有的路由器 IP本橙。當然,有的路由器壓根不會回這個 ICMP脆诉。這也是 Traceroute 一個公網的地址甚亭,看不到中間路由的原因。

怎么知道 UDP 有沒有到達目的主機呢击胜?Traceroute 程序會發(fā)送一份 UDP 數(shù)據報給目的主機亏狰,但它會選擇一個不可能的值作為 UDP 端口號(大于 30000)。當該數(shù)據報到達時偶摔,將使目的主機的 UDP 模塊產生一份“端口不可達”錯誤 ICMP 報文暇唾。如果數(shù)據報沒有到達,則可能是超時。

Traceroute 還有一個作用是故意設置不分片策州,從而確定路徑的 MTU瘸味。

要做的工作首先是發(fā)送分組,并設置“不分片”標志够挂。發(fā)送的第一個分組的長度正好與出口 MTU 相等旁仿。如果中間遇到窄的關口會被卡住,會發(fā)送 ICMP 網絡差錯包孽糖,類型為“需要進行分片但設置了不分片位”枯冈。其實,這是人家故意的好吧办悟,每次收到 ICMP“不能分片”差錯時就減小分組的長度尘奏,直到到達目標主機。

3. 跨網關訪問

fig16.jpg

一旦配置了IP地址和網關誉尖,往往就能夠指定目標地址進行訪問了罪既。在跨網關訪問的時候铸题,會牽扯到MAC地址和IP地址的變化铡恕。

在 MAC 頭里面,先是目標 MAC 地址丢间,然后是源 MAC 地址探熔,然后有一個協(xié)議類型,用來說明里面是 IP 協(xié)議烘挫。IP 頭里面的版本號诀艰,目前主流的還是 IPv4,服務類型 TOS 在第三節(jié)講 ip addr 命令的時候講過饮六,TTL 在第 7 節(jié)講 ICMP 協(xié)議的時候講過其垄。另外,還有 8 位標識協(xié)議卤橄。這里到了下一層的協(xié)議绿满,也就是,是 TCP 還是 UDP窟扑。最重要的就是源 IP 和目標 IP喇颁。先是源 IP 地址,然后是目標 IP 地址嚎货。

在任何一臺機器上橘霎,當要訪問另外一個IP地址的時候,都會先判斷這個目標地址和當前機器的IP地址是否在同一個網段當中殖属。使用CIDR和子網掩碼來進行判斷姐叁。

如果不是同一個網段的,就需要將請求發(fā)往默認網關gateway. Gateway的地址一定和源IP地址是一個網段的。例如192.168.1.0/24這個網段外潜,Gateway往往是192.168.1.1/24或者192.168.1.2/24

如何發(fā)往默認網關呢谭溉?網關不是和源 IP 地址是一個網段的么?這個過程就和發(fā)往同一個網段的其他機器是一樣的:將源地址和目標 IP 地址放入 IP 頭中橡卤,通過 ARP 獲得網關的 MAC 地址扮念,將源 MAC 和網關的 MAC 放入 MAC 頭中,發(fā)送出去碧库。網關所在的端口柜与,例如 192.168.1.1/24 將網絡包收進來,然后接下來怎么做嵌灰,就完全看網關的了弄匕。

網關往往是一個路由器,是個三層轉發(fā)設備(就是把MAC頭和IP頭都取下來沽瞭,然后根據里面的內容迁匠,看看接下來把包往哪里轉發(fā)的設備

3.1 靜態(tài)路由

在路由器上配置一條條規(guī)則,通過網關進行轉發(fā)

3.1.1 轉發(fā)網關

只改變MAC地址驹溃,不改變IP的網關

fig11.jpg

服務器 A 要訪問服務器 B城丧。首先,服務器 A 會思考豌鹤,192.168.4.101 和我不是一個網段的亡哄,因而需要先發(fā)給網關。那網關是誰呢布疙?已經靜態(tài)配置好了蚊惯,網關是 192.168.1.1。網關的 MAC 地址是多少呢灵临?發(fā)送 ARP 獲取網關的 MAC 地址截型,然后發(fā)送包。包的內容是這樣的:

  • 源MAC: server A MAC addr
  • 目標MAC: 192.168.1.1 這個網口的MAC
  • 源IP: 192.168.1.101
  • 目標IP: 192.168.4.101

包到達 192.168.1.1 這個網口儒溉,發(fā)現(xiàn) MAC 一致宦焦,將包收進來,開始思考往哪里轉發(fā)睁搭。在路由器 A 中配置了靜態(tài)路由之后赶诊,要想訪問 192.168.4.0/24,要從 192.168.56.1 這個口出去园骆,下一跳為 192.168.56.2舔痪。

于是,路由器 A 思考的時候锌唾,匹配上了這條路由锄码,要從 192.168.56.1 這個口發(fā)出去夺英,發(fā)給 192.168.56.2,那 192.168.56.2 的 MAC 地址是多少呢滋捶?路由器 A 發(fā)送 ARP 獲取 192.168.56.2 的 MAC 地址痛悯,然后發(fā)送包。包的內容是這樣的:

  • 源MAC: 192.168.56.1 MAC addr
  • 目標MAC: 192.168.56.2 這個網口的MAC
  • 源IP: 192.168.1.101
  • 目標IP: 192.168.4.101

包到達 192.168.56.2 這個網口重窟,發(fā)現(xiàn) MAC 一致载萌,將包收進來,開始思考往哪里轉發(fā)巡扇。在路由器 B 中配置了靜態(tài)路由扭仁,要想訪問 192.168.4.0/24,要從 192.168.4.1 這個口出去厅翔,沒有下一跳了乖坠。

于是,路由器 B 思考的時候刀闷,匹配上了這條路由熊泵,要從 192.168.4.1 這個口發(fā)出去,發(fā)給 192.168.4.101甸昏。那 192.168.4.101 的 MAC 地址是多少呢顽分?路由器 B 發(fā)送 ARP 獲取 192.168.4.101 的 MAC 地址,然后發(fā)送包筒扒。包的內容是這樣的:

  • 源MAC: 192.168.4.1 MAC addr
  • 目標MAC: 192.168.4.101 這個網口的MAC
  • 源IP: 192.168.1.101
  • 目標IP: 192.168.4.101

包到達服務器B怯邪,由上述過程可以看出绊寻,MAC地址一直都是變的花墩,而IP地址一直都不會變。

3.1.2 NAT網關 (Network Address Translation)

NAT網關出現(xiàn)的原因是IP沖突澄步,如下圖所示冰蘑,各個局域網在設值的時候IP是一樣的情況。

fig12.jpg

這里遇見的第一個問題是村缸,局域網之間沒有商量過祠肥,各定各的網段,因而 IP 段沖突了梯皿。最左面源地址是 192.168.1.101仇箱,最右面目標地址也是 192.168.1.101,如果單從 IP 地址上看东羹,簡直是自己訪問自己剂桥,其實是源的 192.168.1.101 要訪問目標的 192.168.1.101。

解決這個問題属提,就是在中間的局域網中使用另外的地址权逗,來進行區(qū)分美尸。有點像身份證和護照的關系。

首先斟薇,目標服務器 B 在國際上要有一個國際的身份师坎,我們給它一個 192.168.56.2。在網關 B 上堪滨,我們記下來胯陋,國際身份 192.168.56.2 對應國內身份 192.168.1.101。凡是要訪問 192.168.56.2袱箱,都轉成 192.168.1.101惶岭。

于是,源服務器 A 要訪問目標服務器 B犯眠,要指定的目標地址為 192.168.56.2按灶。這是它的國際身份。服務器 A 想筐咧,192.168.56.2 和我不是一個網段的鸯旁,因而需要發(fā)給網關,網關是誰量蕊?已經靜態(tài)配置好了铺罢,網關是 192.168.1.1,網關的 MAC 地址是多少残炮?發(fā)送 ARP 獲取網關的 MAC 地址韭赘,然后發(fā)送包。包的內容是這樣的:

  • 源MAC: 服務器A 的 MAC addr
  • 目標MAC: 192.168.1.1 這個網口的MAC
  • 源IP: 192.168.1.101
  • 目標IP: 192.168.56.2

包到達 192.168.1.1 這個網口势就,發(fā)現(xiàn) MAC 一致泉瞻,將包收進來,開始思考往哪里轉發(fā)苞冯。

在路由器 A 中配置了靜態(tài)路由:要想訪問 192.168.56.2/24袖牙,要從 192.168.56.1 這個口出去,沒有下一跳了舅锄。

于是鞭达,路由器 A 思考的時候,匹配上了這條路由皇忿,要從 192.168.56.1 這個口發(fā)出去畴蹭,發(fā)給 192.168.56.2。那 192.168.56.2 的 MAC 地址是多少呢鳍烁?路由器 A 發(fā)送 ARP 獲取 192.168.56.2 的 MAC 地址叨襟。

當網絡包發(fā)送到中間的局域網的時候,服務器 A 也需要有個國際身份老翘,因而在國際上芹啥,源 IP 地址也不能用 192.168.1.101锻离,需要改成 192.168.56.1。發(fā)送包的內容是這樣的:

  • 源MAC: 192.168.1.1 MAC addr
  • 目標MAC: 192.168.1.101 這個網口的MAC
  • 源IP: 192.168.56.1
  • 目標IP: 192.168.1.101

從服務器B接收的包可以看出墓怀,源IP是服務器A的國際身份汽纠,發(fā)送包回去的時候,也是發(fā)給這個國際身份傀履,由路由器A做NAT虱朵,轉換為國內身份。

3.2 動態(tài)路由

3.2.1 路由表

路由器是一臺網絡設備钓账,有多張網卡碴犬,當一個入口的網絡包送到路由器時,它會根據一個本地的轉發(fā)信息庫梆暮,來決定如何正確地轉發(fā)流量服协。這個轉發(fā)信息庫通常被稱為路由表。

一張路由表會有多個路由規(guī)則啦粹,每一天規(guī)則至少包含這三項信息:

  • 目的網絡
  • 出口設備
  • 下一跳網關

3.2.2 策略路由

根據多個參數(shù)來配置路由偿荷,這樣來使得不同來源的包走不同的路由。

家里的網絡呢唠椭,就是普通的家用網段 192.168.1.x/24跳纳。家里有兩個租戶,分別把線連到路由器上贪嫂。IP 地址為 192.168.1.101/24 和 192.168.1.102/24寺庄,網關都是 192.168.1.1/24,網關在路由器上力崇。兩個運營商都要為這個網關配置一個公網的 IP 地址斗塘。如果你去查看你們家路由器里的網段,基本就是我圖中畫的樣子餐曹。

fig13.jpg

運行商里面也有一個 IP 地址逛拱,在運營商網絡里面的網關。不同的運營商方法不一樣台猴,有的是 /32 的,也即一個一對一連接俱两。例如饱狂,運營商 1 給路由器分配的地址是 183.134.189.34/32,而運營商網絡里面的網關是 183.134.188.1/32宪彩。有的是 /30 的休讳,也就是分了一個特別小的網段。運營商 2 給路由器分配的地址是 60.190.27.190/30尿孔,運營商網絡里面的網關是 60.190.27.189/30俊柔。

$ ip route list table main 
60.190.27.189/30 dev eth3  proto kernel  scope link  src 60.190.27.190
183.134.188.1 dev eth2  proto kernel  scope link  src 183.134.189.34
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.1
127.0.0.0/8 dev lo  scope link
default via 183.134.188.1 dev eth2
  • 如果去運營商二筹麸,就走 eth3;
  • 如果去運營商一呢雏婶,就走 eth2物赶;
  • 如果訪問內網,就走 eth1留晚;
  • 如果所有的規(guī)則都匹配不上酵紫,默認走運營商一,也即走快的網絡错维。

如何讓IP默認走運營商2奖地?

添加一個新的table, chao

# echo 200 chao >> /etc/iproute2/rt_tables

添加一條規(guī)則:

# ip rule add from 192.168.1.101 table chao
# ip rule ls
0:    from all lookup local 
32765:    from 10.0.0.10 lookup chao
32766:    from all lookup main 
32767:    from all lookup default

設定規(guī)則為:從 192.168.1.101 來的包都查看個 chao 這個新的路由表赋焕。
在chao路由表中添加規(guī)則:

# ip route add default via 60.190.27.189 dev eth3 table chao
# ip route flush cache

3.2.3 動態(tài)路由算法

尋找最短路徑参歹,主要使用Bellman-Ford算法和Dijkstra算法。

  1. 距離矢量路由算法

這種算法的基本思路是隆判,每個路由器都保存一個路由表泽示,包含多行,每行對應網絡中的一個路由器蜜氨,每一行包含兩部分信息械筛,一個是要到目標路由器,從那條線出去飒炎,另一個是到目標路由器的距離埋哟。

由此可以看出,每個路由器都是知道全局信息的郎汪。那這個信息如何更新呢赤赊?每個路由器都知道自己和鄰居之間的距離,每過幾秒煞赢,每個路由器都將自己所知的到達所有的路由器的距離告知鄰居抛计,每個路由器也能從鄰居那里得到相似的信息。

每個路由器根據新收集的信息照筑,計算和其他路由器的距離吹截,比如自己的一個鄰居距離目標路由器的距離是 M,而自己距離鄰居是 x凝危,則自己距離目標路由器是 x+M波俄。

存在的問題1: 好消息傳得快,壞消息傳得慢 如果有個路由器加入了這個網絡蛾默,它的鄰居就能很快發(fā)現(xiàn)它懦铺,然后將消息廣播出去。要不了多久支鸡,整個網絡就都知道了冬念。但是一旦一個路由器掛了趁窃,掛的消息是沒有廣播的。當每個路由器發(fā)現(xiàn)原來的道路到不了這個路由器的時候急前,感覺不到它已經掛了醒陆,而是試圖通過其他的路徑訪問,直到試過了所有的路徑叔汁,才發(fā)現(xiàn)這個路由器是真的掛了统求。

原來的網絡包括兩個節(jié)點,B 和 C据块。A 加入了網絡码邻,它的鄰居 B 很快就發(fā)現(xiàn) A 啟動起來了。于是它將自己和 A 的距離設為 1另假,同樣 C 也發(fā)現(xiàn) A 起來了像屋,將自己和 A 的距離設置為 2。但是如果 A 掛掉边篮,情況就不妙了己莺。B 本來和 A 是鄰居,發(fā)現(xiàn)連不上 A 了戈轿,但是 C 還是能夠連上凌受,只不過距離遠了點,是 2思杯,于是將自己的距離設置為 3胜蛉。殊不知 C 的距離 2 其實是基于原來自己的距離為 1 計算出來的。C 發(fā)現(xiàn)自己也連不上 A色乾,并且發(fā)現(xiàn) B 設置為 3誊册,于是自己改成距離 4。依次類推暖璧,數(shù)越來越大案怯,直到超過一個閾值,我們才能判定 A 真的掛了澎办。

存在的問題2: 每次發(fā)送的時候嘲碱,要發(fā)送整個全局路由表

當網絡規(guī)模比較小的時候,全局路由表比較懈〔怠(15跳以內)悍汛;如果網絡規(guī)模比較大,就不適用了至会。

(不相關的分割線: 感覺很像區(qū)塊鏈在做的事情,行為上的類似谱俭,目的上的不同)

  1. 鏈路狀態(tài)路由算法

Link state routing

這種算法的基本思路是:當一個路由器啟動的時候奉件,首先是發(fā)現(xiàn)鄰居宵蛀,向鄰居 say hello,鄰居都回復县貌。然后計算和鄰居的距離术陶,發(fā)送一個 echo,要求馬上返回煤痕,除以二就是距離梧宫。然后將自己和鄰居之間的鏈路狀態(tài)包廣播出去,發(fā)送到整個網絡的每個路由器摆碉。這樣每個路由器都能夠收到它和鄰居之間的關系的信息塘匣。因而,每個路由器都能在自己本地構建一個完整的圖巷帝,然后針對這個圖使用 Dijkstra 算法忌卤,找到兩點之間的最短路徑。

不像距離距離矢量路由協(xié)議那樣楞泼,更新時發(fā)送整個路由表驰徊。鏈路狀態(tài)路由協(xié)議只廣播更新的或改變的網絡拓撲,這使得更新信息更小堕阔,節(jié)省了帶寬和 CPU 利用率棍厂。而且一旦一個路由器掛了,它的鄰居都會廣播這個消息超陆,可以使得壞消息迅速收斂牺弹。

3.2.4 動態(tài)路由協(xié)議

  1. 基于鏈路狀態(tài)路由算法的OSPF

OSPF - Open Shortest Path First 開放式最短路徑優(yōu)先)就是基于鏈路狀態(tài)路由協(xié)議,廣泛應用在數(shù)據中心中的協(xié)議侥猬。由于主要用在數(shù)據中心內部例驹,用于路由決策,因而稱為內部網關協(xié)議Interior Gateway Protocol

內部網關協(xié)議的重點就是找到最短的路徑退唠。在一個組織內部鹃锈,路徑最短往往最優(yōu)。當然有時候 OSPF 可以發(fā)現(xiàn)多個最短的路徑瞧预,可以在這多個路徑中進行負載均衡屎债,這常常被稱為等價路由。

fig14.jpg
  1. 基于距離矢量路由算法的BGP(Border Gateway Protocol)

外部政策的問題垢油,每個數(shù)據中心都會設值自己的Policy:

  • 哪些外部IP可以讓內部知道
  • 哪些內部IP可以讓外部知道

每個都為一個自治系統(tǒng)AS, Autonomous System,自治系統(tǒng)分為幾種類型:

  • Stub AS:對外只有一個連接盆驹。這類 AS 不會傳輸其他 AS 的包。例如滩愁,個人或者小公司的網絡躯喇。
  • Multihomed AS:可能有多個連接連到其他的 AS,但是大多拒絕幫其他的 AS 傳輸包。例如一些大公司的網絡廉丽。
  • Transit AS:有多個連接連到其他的 AS倦微,并且可以幫助其他的 AS 傳輸包。例如主干網正压。

每個自治系統(tǒng)都有*** 邊界路由器***欣福,來和外界進行聯(lián)系。

fig15.jpg

BGP協(xié)議使用的是路徑矢量路由協(xié)議焦履,(path-vector protocol)拓劝。它是距離矢量路由協(xié)議的升級版。

前面說了距離矢量路由協(xié)議的缺點嘉裤。其中一個是收斂慢郑临。在 BGP 里面,除了下一跳 hop 之外价脾,還包括了自治系統(tǒng) AS 的路徑牧抵,從而可以避免壞消息傳的慢的問題,也即上面所描述的侨把,B 知道 C 原來能夠到達 A犀变,是因為通過自己,一旦自己都到達不了 A 了秋柄,就不用假設 C 還能到達 A 了获枝。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骇笔,隨后出現(xiàn)的幾起案子省店,更是在濱河造成了極大的恐慌,老刑警劉巖笨触,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懦傍,死亡現(xiàn)場離奇詭異,居然都是意外死亡芦劣,警方通過查閱死者的電腦和手機粗俱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虚吟,“玉大人寸认,你說我怎么就攤上這事〈浚” “怎么了偏塞?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長邦鲫。 經常有香客問我灸叼,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任怜姿,我火速辦了婚禮慎冤,結果婚禮上疼燥,老公的妹妹穿的比我還像新娘沧卢。我一直安慰自己,他們只是感情好醉者,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布但狭。 她就那樣靜靜地躺著,像睡著了一般撬即。 火紅的嫁衣襯著肌膚如雪立磁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天剥槐,我揣著相機與錄音唱歧,去河邊找鬼。 笑死粒竖,一個胖子當著我的面吹牛颅崩,可吹牛的內容都是我干的。 我是一名探鬼主播蕊苗,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼沿后,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了朽砰?” 一聲冷哼從身側響起尖滚,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞧柔,沒想到半個月后漆弄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡造锅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年撼唾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片备绽。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡券坞,死狀恐怖,靈堂內的尸體忽然破棺而出肺素,到底是詐尸還是另有隱情恨锚,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布倍靡,位于F島的核電站猴伶,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜他挎,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一筝尾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧办桨,春花似錦筹淫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至殊霞,卻和暖如春摧阅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绷蹲。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工棒卷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祝钢。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓比规,卻偏偏與公主長得像,于是被迫代替她去往敵國和親太颤。 傳聞我的和親對象是個殘疾皇子苞俘,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內容

  • 1、TCP為什么需要3次握手龄章,4次斷開吃谣? “三次握手”的目的是“為了防止已失效的連接請求報文段突然又傳送到了服務端...
    杰倫哎呦哎呦閱讀 3,479評論 0 6
  • IPv4分組 IPv4,即現(xiàn)在普遍使用的IP協(xié)議(版本為4)做裙。IP協(xié)議定義數(shù)據傳送的基本單元——IP分組及其確切的...
    CodeKing2017閱讀 1,878評論 0 0
  • 2018年8月9號 星期四 晴 最近愛上了雷布斯岗憋,他的所有書都準備看一遍,剛看完了第一本《順勢而為》锚贱,再來...
    張晨曦520閱讀 565評論 3 7
  • 四.多事之秋 3.黑色的血 歷史的經驗告訴我們仔戈,不要相信大多數(shù)的人性。 這里的大多數(shù)包括大多數(shù)人的一生和少部分英雄...
    一只支閱讀 540評論 3 7
  • 真正愛上一個人的時候拧廊,一切都那么值得监徘,包括不可避免的傷害。時間永遠是旁觀者吧碾,所有的過程和結果凰盔,都需要自己承擔。感情...
    大俠霍元乙閱讀 621評論 29 73