CCNP 筆記本

2010 年 04 月 28 日

Http Header入門

Filed under: 網路基本服務原理 — nkongkimo @ 00:27:17

HTTP Headers 入門

本文系統的對HTTP Headers進行了簡明易懂的闡述,我僅稍作筆記。

什麼是HTTP Headers

HTTP是“Hypertext Transfer Protocol”的所寫,整個www都在使用這種協定,幾乎你在流覽器裏看到的大部分內容都是通過http協定來傳輸的,比如這篇文章。

HTTP Headers是HTTP請求和相應的核心,它承載了關於用戶端流覽器,請求頁面,伺服器等相關的資訊。


示例

當你在流覽器位址欄裏鍵入一個url,你的流覽器會將類似如下的http請求:
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1 (Request line)
Host: net.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache
第一行被稱為“Request Line” 它描述的是這個請求的基本資訊,剩下的就是HTTP headers了。

請求完成之後,你的流覽器可能會收到如下的HTTP回應:

HTTP/1.x 200 OK (state line)
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: “pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent
<!– … rest of the html … –>

第一行被稱為“Status Line”,它之後就是http headers,空行完了就開始輸出內容了(在這個案例中是一些html輸出)。

但你查看頁面源代碼卻不能看到HTTP headers,雖然它們連同你能看到的東西一起被傳送至流覽器。

這個HTTP請求也發出了一些其他資源的接收請求,例如圖片,css檔,js文件等等。

下面我們來看看細節。


怎樣才能看到HTTP Headers

下面這些FireFox擴展能夠幫助你分析HTTP headers:

1. firebug

2.Live HTTP Headers

3. 在PHP中:

文章下面將會看到一些使用php示範的例子。


HTTP Request 的結構

被稱作“first line”的第一行包含三個部分:

  • “method” 表明這是何種類型的請求. 最常見的請求類型有 GET, POST 和 HEAD.
  • “path” 體現的是主機之後的路徑. 例如,當你請求 “http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/”時 , path 就會是 “/tutorials/other/top-20-mysql-best-practices/”.
  • “protocol” 包含有 “HTTP” 和版本號, 目前流覽器都會使用1.1.

剩下的部分每行都是一個“Name:Value”對。它們包含了各式各樣關於請求和你流覽器的資訊。

例如”User-Agent“就表明了你流覽器版本和你所用的作業系統。

”Accept-Encoding“會告訴伺服器你的流覽可以接受類似gzip的壓縮輸出。

這些headers大部分都是可選的。HTTP 請求甚至可以被精簡成這樣子:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com

並且你仍舊可以從伺服器收到有效的回應。


請求類型

三種最常見的請求類型是:GET,POST 和 HEAD ,從html的編寫過程中你可能已經熟悉了前兩種。

GET:獲取一個文檔

大部分被傳輸到流覽器的html,images,js,css, … 都是通過GET方法發出請求的。它是獲取資料的主要方法。

例如,要獲取Nettuts+ 的文章,http request的第一行通常看起來是這樣的:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1

一旦html載入完成,流覽器將會發送GET 請求去獲取圖片,就像下面這樣:

GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1

表單也可以通過GET方法發送,下面是個例子:

<form action="foo.php" method="GET">
First Name: <input name="first_name" type="text" />
Last Name: <input name="last_name" type="text" />
<input name="action" type="submit" value="Submit" />
</form>

當這個表單被提交時,HTTP request 就會像這樣:

GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1

你可以將表單輸入通過附加進查詢字串的方式發送至伺服器。


POST:發送資料至伺服器

儘管你可以通過GET方法將資料附加到url中傳送給伺服器,但在很多情況下使用POST發送資料給伺服器更加合適。通過GET發送大量資料是不現實的,它有一定的局限性。

用POST請求來發送表單數據是普遍的做法。我們來吧上面的例子改造成使用POST方式:

<form action="foo.php" method="POST">
First Name: <input name="first_name" type="text" />
Last Name: <input name="last_name" type="text" />
<input name="action" type="submit" value="Submit" />
</form>

提交這個表單會創建一個如下的HTTP 請求:

POST /foo.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
first_name=John&last_name=Doe&action=Submit

這裏有三個需要注意的地方:

  • 第一行的路徑已經變為簡單的 /foo.php , 已經沒了查詢字串。
  • 新增了 Content-Type 和 Content-Lenght Header,它提供了發送資訊的相關資訊.
  • 所有資料都在headers之後,以查詢字串的形式被發送.

POST方式的請求也可用在AJAX,應用程式,cURL … 之上。並且所有的檔上傳表單都被要求使用POST方式。


HEAD:接收Header資訊

HEAD和GET很相似,只不過HEAD不接受HTTP回應的內容部分。當你發送了一個HEAD請求,那就意味著你只對HTTPHeader感興趣,而不是文檔本身。

這個方法可以讓流覽器判斷頁面是否被修改過,從而控制緩存。也可判斷所請求的文檔是否存在。

例如,假如你的網站上有很多鏈結,那麼你就可以簡單的給他們分別發送HEAD請求來判斷是否存在死鏈,這比使用GET要快很多。

http回應結構

當流覽器發送了HTTP請求之後,伺服器就會通過一個HTTP response來回應這個請求。如果不關心內容,那麼這個請求看起來會是這樣的:

第一個有價值的資訊就是協定。目前伺服器都會使用 HTTP/1.x 或者 HTTP/1.1。

接下來一個簡短的資訊代表狀態。代碼200意味著我們的請求已經發送成功了,伺服器將會返回給我們所請求的文檔,在Header資訊之後。

我們都見過“404”頁面。當我向伺服器請求一個不存在的路徑時,伺服器就用用404來代替200回應我們。

餘下的回應內容和HTTP請求相似。這些內容是關於伺服器軟體的,頁面/檔何時被修改過,mime type 等等…

同樣,這些Header資訊也是可選的。


HTTP狀態碼

  • 200 用來表示請求成功.
  • 300 來表示重定向.
  • 400 用來表示請求出現問題.
  • 500 用來表示伺服器出現問題.

200 成功 (OK)

前文已經提到,200是用來表示請求成功的。

206 部分內容 (Partial Content)

如果一個應用只請求某範圍之內的檔,那麼就會返回206.

這通常被用來進行下載管理,中斷點續傳或者檔分塊下載。

404 沒有找到 (Not Found)

很容易理解


401 未經授權 (Unauthorized)

受密碼保護的頁面會返回這個狀態。如果你沒有輸入正確的密碼,那麼你就會在流覽器中看到如下的資訊:

注意這只是受密碼保護頁面,請求輸入密碼的彈出框是下面這個樣子的:


403 被禁止(Forbidden)

如果你沒有許可權訪問某個頁面,那麼就會返回403狀態。這種情況通常會發生在你試圖打開一個沒有index頁面的檔夾。如果伺服器設置不允許查看目錄內容,那麼你就會看到403錯誤。

其他一些方式也會發送許可權限制,例如你可以通過IP位址進行阻止,這需要一些htaccess的協助。

order allow,deny
deny from 192.168.44.201
deny from 224.39.163.12
deny from 172.16.7.92
allow from all

302(或307)臨時移動(Moved Temporarily) 和 301 永久移動(Moved Permanently)

這兩個狀態會出現在流覽器重定向時。例如,你使用了類似 bit.ly 的網址縮短服務。這也是它們如何獲知誰點擊了他們鏈結的方法。

302和301對於流覽器來說是非常相似的,但對於搜索引擎爬蟲就有一些差別。打個比方,如果你的網站正在維護,那麼你就會將用戶端流覽器用302重定向到另外一個位址。搜索引擎爬蟲就會在將來重新索引你的頁面。但是如果你使用了301重定向,這就等於你告訴了搜索引擎爬蟲:你的網站已經永久的移動到了新的位址。

500 伺服器錯誤(Internal Server Error)

這個代碼通常會在頁面腳本崩潰時出現。大部分CGI腳本都不會像PHP那樣輸出錯誤資訊給流覽器。如果出現了致命的錯誤,它們只會發送一個500的狀態碼。這時需要查看伺服器錯誤日誌來排錯。


完整的列表

你可以在這裏找到完整的HTTP 狀態碼說明。

HTTP Headers 中的 HTTP請求

現在我們來看一些在HTTP headers中常見的HTTP請求資訊。

所有這些Header資訊都可以在PHP的$_SERVER陣列中找到。你也可以用getallheaders()函數一次性獲取所有的Header資訊。

Host

一個HTTP請求會發送至一個特定的IP位址,但是大部分伺服器都有在同一IP位址下託管多個網站的能力,那麼伺服器必須知道流覽器請求的是哪個功能變數名稱下的資源。

Host: rlog.cn

這只是基本的主機名,包含功能變數名稱和子級功能變數名稱。

在PHP中,可以通過$_SERVER[‘HTTP_HOST’] 或 $_SERVER[‘SERVER_NAME’]來查看。

User-Agent

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)

這個Header可以攜帶如下幾條資訊:

  • 流覽器名和版本號.
  • 作業系統名和版本號.
  • 默認語言.

這就是某些網站用來收集訪客資訊的一般手段。例如,你可以判斷訪客是否在使用手機訪問你的網站,然後決定是否將他們引導至一個在低解析度下表現良好的移動網站。

在PHP中,可以通過 $_SERVER[‘HTTP_USER_AGENT’] 來獲取User-Agent

if ( strstr($_SERVER[‘HTTP_USER_AGENT’],’MSIE 6′) ) {
echo “Please stop using IE6!";
}


Accept-Language

Accept-Language: en-us,en;q=0.5

這個資訊可以說明用戶的默認語言設置。如果網站有不同的語言版本,那麼就可以通過這個資訊來重定向用戶的流覽器。

它可以通過逗號分割來攜帶多國語言。第一個會是首選的語言,其他語言會攜帶一個“q”值,來表示用戶對該語言的喜好程度(0~1)。

在PHP中用 $_SERVER[“HTTP_ACCEPT_LANGUAGE"] 來獲取這一資訊。

if (substr($_SERVER[‘HTTP_ACCEPT_LANGUAGE’], 0, 2) == ‘fr’) {
header(‘Location: http://french.mydomain.com&#8217;);
}

Accept-Encoding

Accept-Encoding: gzip,deflate

大部分的流覽器都支援gzip壓縮,並會把這一資訊報告給伺服器。這時伺服器就會壓縮HTML發送給流覽器。這可以減少近80%的檔案大小,以節省下載時間和頻寬。

在PHP中可以使用 $_SERVER[“HTTP_ACCEPT_ENCODING"] 獲取該資訊。 然後調用ob_gzhandler()方法時會自動檢測該值,所以你無需手動檢測。

// enables output buffering
// and all output is compressed if the browser supports it
ob_start(‘ob_gzhandler’);


If-Modified-Since

如果一個頁面已經在你的流覽器中被cache,那麼你下次流覽時流覽器將會檢測文檔是否被修改過,那麼它就會發送這樣的Header:

If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

如果自從這個時間以來未被修改過,那麼伺服器將會返回“304 Not Modified”,而且不會再返回內容。流覽器將自動去緩存中讀取內容

在PHP中,可以用$_SERVER[‘HTTP_IF_MODIFIED_SINCE’] 來檢測。

// assume $last_modify_time was the last the output was updated
// did the browser send If-Modified-Since header?
if(isset($_SERVER[‘HTTP_IF_MODIFIED_SINCE’])) {
// if the browser cache matches the modify time
if ($last_modify_time == strtotime($_SERVER[‘HTTP_IF_MODIFIED_SINCE’])) {
// send a 304 header, and no content
header(“HTTP/1.1 304 Not Modified");
exit;
}
}

還有一個叫Etag的HTTP頭資訊,它被用來確定緩存的資訊是否正確,稍後我們將會解釋它。

Cookie

顧名思義,他會送出流覽器中存儲的Cookie資訊給伺服器。

Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar

它是用分號分割的一組名值對。Cookie也可以包含session id。

在PHP中,單一的Cookie可以訪問$_COOKIE陣列獲得。你可以直接用$_SESSION array獲取session變數。如果你需要session id,那麼你可以使用session_id()函數代替cookie。

echo $_COOKIE[‘foo’];
// output: bar
echo $_COOKIE[‘PHPSESSID’];
// output: r2t5uvjq435r4q7ib3vtdjq120
session_start();
echo session_id();
// output: r2t5uvjq435r4q7ib3vtdjq120

Referer

顧名思義, Header將會包含referring url信息。

例如,我訪問Nettuts+的主頁並點擊了一個鏈結,這個Header資訊將會發送到流覽器:
Referer: http://net.tutsplus.com/

在PHP中,可以通過 $_SERVER[‘HTTP_REFERER’] 獲取該值。

if (isset($_SERVER[‘HTTP_REFERER’])) {
$url_info = parse_url($_SERVER[‘HTTP_REFERER’]);
// is the surfer coming from Google?
if ($url_info[‘host’] == ‘www.google.com’) {
parse_str($url_info[‘query’], $vars);
echo “You searched on Google for this keyword: “. $vars[‘q’];
}
}
// if the referring url was:
// http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http+headers&aq=f&oq=&aqi=g-p1g9
// the output will be:
// You searched on Google for this keyword: http headers

You may have noticed the word “referrer” is misspelled as “referer”. Unfortunately it made into the official HTTP specifications like that and got stuck.

Authorization

當一個頁面需要授權,流覽器就會彈出一個登入視窗,輸入正確的帳號後,流覽器會發送一個HTTP請求,但此時會包含這樣一個Header:

Authorization: Basic bXl1c2VyOm15cGFzcw==

包含在Header的這部分資訊是base64 encoded。例如,base64_decode(‘bXl1c2VyOm15cGFzcw==’) 會被轉化為 ‘myuser:mypass’ 。

在PHP中,這個值可以用$_SERVER[‘PHP_AUTH_USER’] 和 $_SERVER[‘PHP_AUTH_PW’] 獲得。

更多細節我們會在WWW-Authenticate部分講解。


HTTP Headers 中的 HTTP回應

現在讓我瞭解一些常見的HTTP Headers中的HTTP回應資訊。

在PHP中,你可以通過 header() 來設置Header回應資訊。PHP已經自動發送了一些必要的Header資訊,如 載入的內容,設置 cookies 等等… 你可以通過 headers_list() 函數看到已發送和將要發送的Header資訊。你也可以使用headers_sent()函數來檢查Header資訊是否已經被發送。

Cache-Control

w3.org 的定義是:“The Cache-Control general-header field is used to specify directives which MUST be obeyed by all caching mechanisms along the request/response chain.” 其中“caching mechanisms” 包含一些你ISP可能會用到的 閘道和代理資訊。

例如:

Cache-Control: max-age=3600, public

“public”意味著這個回應可以被任何人cache,“max-age” 則表明了該cache有效的秒數。允許你的網站被cache降大大減少下載時間和帶寬,同時也提高的流覽器的載入速度。

也可以通過設置 “no-cache”  指令來禁止緩存:

Cache-Control: no-cache

更多詳情請參見w3.org

Content-Type

這個Header包含了文檔的”mime-type”。流覽器將會依據該參數決定如何對文檔進行解析。例如,一個html頁面(或者有html輸出的php頁面)將會返回這樣的東西:

Content-Type: text/html; charset=UTF-8

‘text’ 是文檔類型,‘html’則是文檔子類型。 這個Header還包括了更多資訊,例如 charset。

如果是一個圖片,將會發送這樣的回應:

Content-Type: image/gif

流覽器可以通過mime-type來決定使用外部程式還是自身擴展來打開該文檔。如下的例子降調用Adobe Reader:

Content-Type: application/pdf

直接載入,Apache通常會自動判斷文檔的mime-type並且添加合適的資訊到Header去。並且大部分流覽器都有一定程度的容錯,在Header未提供或者錯誤提供該資訊的情況下它會去自動檢測mime-type。

你可以在這裏找到一個常用mime-type列表。

在PHP中你可以通過 finfo_file()來檢測檔的ime-type。

Content-Disposition

這個Header資訊將告訴流覽器打開一個檔下載視窗,而不是試圖解析該回應的內容。例如:

Content-Disposition: attachment; filename="download.zip"

他會導致流覽器出現這樣的對話方塊:

注意,適合它的Content-Type頭資訊同時也會被發送

Content-Type: application/zip
Content-Disposition: attachment; filename="download.zip"

Content-Length

當內容將要被傳輸到流覽器時,伺服器可以通過該Header告知流覽器將要傳送檔的大小(bytes)。

Content-Length: 89123

對於檔下載來說這個資訊相當的有用。這就是為什麼流覽器知道下載進度的原因。

例如,這裏我寫了一段虛擬腳本,來模擬一個慢速下載。

// it’s a zip file
header(‘Content-Type: application/zip’);
// 1 million bytes (about 1megabyte)
header(‘Content-Length: 1000000’);
// load a download dialogue, and save it as download.zip
header(‘Content-Disposition: attachment; filename="download.zip"‘);
// 1000 times 1000 bytes of data
for ($i = 0; $i < 1000; $i++) {
echo str_repeat(“.",1000);
// sleep to slow down the download
usleep(50000);
}

結果將會是這樣的:

現在,我將Content-LengthHeader注釋掉:

// it’s a zip file
header(‘Content-Type: application/zip’);
// the browser won’t know the size
// header(‘Content-Length: 1000000’);
// load a download dialogue, and save it as download.zip
header(‘Content-Disposition: attachment; filename="download.zip"‘);
// 1000 times 1000 bytes of data
for ($i = 0; $i < 1000; $i++) {
echo str_repeat(“.",1000);
// sleep to slow down the download
usleep(50000);
}

結果就變成了這樣:

這個流覽器只會告訴你已下載了多少,但不會告訴你總共需要下載多少。而且進度條也不會顯示進度。

Etag

這是另一個為緩存而產生的Header資訊。它看起來會是這樣:

Etag: “pub1259380237;gz"

伺服器可能會將該資訊和每個被發送檔一起回應給流覽器。該值可以包含文檔的最後修改日期,檔大小或者檔校驗和。流覽會把它和所接收到的文檔一起緩存。下一次當流覽器再次請求同一檔時將會發送如下的HTTP請求:

If-None-Match: “pub1259380237;gz"

如果所請求的文檔Etag值和它一致,伺服器將會發送304狀態碼,而不是200。並且不返回內容。流覽器此時就會從緩存載入該檔。


Last-Modified

顧名思義,這個Header資訊用GMT格式表明了文檔的最後修改時間:

Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT

$modify_time = filemtime($file);
header(“Last-Modified: " . gmdate(“D, d M Y H:i:s", $modify_time) . " GMT");

它提供了另一種緩存機制。流覽器可能會發送這樣的請求:

If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

在If-Modified-Since一節我們已經討論過了。

Location

這個Header是用來重定向的。如果回應代碼為 301 或者 302 ,伺服器就必須發送該Header。例如,當你訪問 http://www.nettuts.com 時流覽器就會收到如下的回應:

HTTP/1.x 301 Moved Permanently

Location: http://net.tutsplus.com/

在PHP中你可以通過這種方式對訪客重定向:
header(‘Location: http://net.tutsplus.com/&#8217;);

默認會發送302狀態碼,如果你想發送301,就這樣寫:

header(‘Location: http://net.tutsplus.com/&#8217;, true, 301);

Set-Cookie

當一個網站需要設置或者更新你流覽的cookie資訊時,它就會使用這樣的Header:

Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT
Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT

每個cookie會作為單獨的一條Header資訊。注意,通過js設置cookie將不會出現在HTTP頭中。

在PHP中,你可以通過setcookie()函數來設置cookie,PHP會發送合適的HTTP 頭。

setcookie(“TestCookie", “foobar");

它會發送這樣的頭資訊:

Set-Cookie: TestCookie=foobar

如果未指定到期時間,cookie就會在流覽器關閉後被刪除。

WWW-Authenticate

一個網站可能會通過HTTP發送這個Header資訊來驗證用戶。當流覽器看到Header有這個回應時就會打開一個彈出窗。

WWW-Authenticate: Basic realm="Restricted Area"

它會看起來像這樣:

PHP手冊的一章中就有一段簡單的代碼演示了如果用PHP做這樣的事情:

if (!isset($_SERVER[‘PHP_AUTH_USER’])) {
header(‘WWW-Authenticate: Basic realm="My Realm"‘);
header(‘HTTP/1.0 401 Unauthorized’);
echo ‘Text to send if user hits Cancel button’;
exit;
} else {
echo “<p>Hello {$_SERVER[‘PHP_AUTH_USER’]}.</p>";
echo “<p>You entered {$_SERVER[‘PHP_AUTH_PW’]} as your password.</p>";
}

Content-Encoding

這個Header通常會在返回內容被壓縮時設置。

廣告

2010 年 04 月 18 日

Http 運作的流程

Filed under: 網路基本服務原理 — nkongkimo @ 01:05:42

為一個軟體發展者,你一定會對網路應用如何工作有一個完整的層次化的認知,同樣這裏也包括這些應用所用到的技術:像本文將更深入的研究當你輸入一個網址的時候,後臺到底發生了一件件什麼樣的事~

1. 首先,你得在流覽器裏輸入網址:

2. 流覽器查找Domain nameIP位址

導航的第一步是通過訪問的Domain name找出其IP位址。DNS查找過程如下:

l 流覽器cache – 流覽器會cache DNS記錄一段時間。 有趣的是作業系統沒有告訴流覽器儲存DNS記錄的時間,這樣不同流覽器會儲存一個固定的時間(2分鐘到30分鐘不等)。

l 系統cache – 如果在流覽器cache裏沒有找到需要的記錄,流覽器會做一個系統調用(windows裏是gethostbyname)。這樣便可獲得系統cache中的記錄。

l 路由器cache– 接著,前面的查詢request發向router,router一般會有自己的DNScache。

l ISP DNS cache– 接下來要check的就是ISP DNS cache server。在這一般都能找到相應的cache記錄。

l 遞迴搜索– ISP的DNS server從root功能變數Name server開始進行遞迴搜索,從.com頂級Domain nameserver到Facebook的Domain nameserver。一般DNSserver的cache中會有.comDomain nameserver中的Domain name,所以到頂級server的匹配過程不是那麼必要了。

DNS遞迴查找如下圖所示:

DNS有一點令人擔憂,這就是像wikipedia.org 或者 facebook.com這樣的整個Domain name看上去只是對應一個單獨的IP位址。還好,有幾種方法可以消除這個issue:

  • 迴圈 DNS 是DNS查找時返回多個IP時的解決方案。舉例來說,Facebook.com實際上就對應了四個IP位址。
  • 負載平衡器 是以一個特定IP位址進行偵聽並將網路request轉發到一群server上。 一些大型的站點一般都會使用這種昂貴的高性能負載平衡器。
  • 地理 DNS 根據client所處的地理位置,通過Domain name映射到多個不同的IP位址提高可擴展性。這樣不同的server不能夠更新同步狀態,但mirror靜態內容的話就非常好。
  • Anycast 是一個IP位址映射多個物理主機的路由技術。 美中不足,Anycast與TCP協議適應的不是很好,所以很少應用在那些方案中。

大多數DNSserver使用Anycast來獲得高效低延遲的DNS查找。

3. 流覽器給web server發送一個HTTP request

因為像Facebook主頁這樣的動態頁面,打開後在流覽器cache中很快甚至馬上就會過期,毫無疑問他們不能從中讀取。

所以,流覽器將把一下請求發送到Facebook所在的server:

GET http://facebook.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, […]
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; […]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: facebook.com
Cookie: datr=1265876274-[…]; locale=en_US; lsd=WW[…]; c_user=2101[…]

GET 這個請求定義了要讀取的URL: “http://facebook.com/”。

流覽器自身定義 (User-Agent 頭), 和它希望接受什麼類型的回應 (Accept and Accept-Encoding頭).

Connection頭要求server為了後邊的請求不要關閉TCP連接。

請求中也包含流覽器存儲的Domain name的cookies。可能你已經知道,在不同頁面請求當中,cookies是與跟蹤一個網站狀態相匹配的鍵值。這樣cookies會存儲登錄用戶名,server分配的密碼和一些用戶設置等。Cookies會以文本文檔形式存儲在客戶機裏,每次請求時發送給server。

用來看原始HTTP請求及相觀的工具很多。作者比較喜歡使用fiddler,當然也有像FireBug這樣其他的工具。這些軟體在網站優化時會幫上很大忙。

除了獲取請求,還有一種是發送請求,它常在提交表單用到。發送請求通過URL傳遞其參數(e.g.: http://robozzle.com/puzzle.aspx?id=85)。發送請求在請求正文頭之後發送其參數。
像“http://facebook.com/”中的’/’是至關重要的。這種情況下,流覽器能安全的添加斜杠。而像“http://example.com/folderOrFile”這樣的位址,因為流覽器不清楚folderOrFile到底是檔夾還是檔,所以不能自動添加’/’。這時,流覽器就不加’/’直接訪問位址,server會回應一個重定向,結果造成一次不必要的握手。

4. facebook服務的永久重定向回應

圖中所示為Facebookserver發回給流覽器的回應:

HTTP/1.1 301 Moved Permanently
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Location: http://www.facebook.com/
P3P: CP="DSP LAW"
Pragma: no-cache
Set-Cookie: made_write_conn=deleted; expires=Thu, 12-Feb-2009 05:09:50 GMT;
path=/; domain=.facebook.com; httponly
Content-Type: text/html; charset=utf-8
X-Cnection: close
Date: Fri, 12 Feb 2010 05:09:51 GMT
Content-Length: 0

server給流覽器響應一個301永久重定向回應,這樣流覽器就會訪問“http://www.facebook.com/” 而非“http://facebook.com/”。

為什麼server一定要重定向而不是直接發會用戶想看的網頁內容呢?這個問題有好多有意思的答案。

其中一個原因跟搜索引擎排名有關。你看,如果一個頁面有兩個位址,就像http://www.litfresh.com/ http://litfresh.com/,搜索引擎會認為它們是兩個網站,結果造成每一個的搜索鏈結都減少從而降低排名。而搜索引擎知道301永久重定向是什麼意思,這樣就會把訪問帶www的和不帶www的位址歸到同一個網站排名下。

還有一個是用不同的位址會造成cache友好性變差。當一個頁面有好幾個名字時,它可能會在cache裏出現好幾次。


5. 流覽器跟蹤重定向地址

現在,流覽器知道了“http://www.facebook.com/”才是要訪問的正確位址,所以它會發送另一個獲取請求:

GET http://www.facebook.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, […]
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; […]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Cookie: lsd=XW[…]; c_user=21[…]; x-referer=[…]
Host: http://www.facebook.com

頭資訊以之前請求中的意義相同。

6. server“處理請求

server接收到獲取請求,然後處理並返回一個response。

這表面上看起來是一個順向的任務,但其實這中間發生了很多有意思的東西,就像作者博客這樣簡單的網站,何況像facebook那樣訪問量大的網站呢!

  • Web server軟體
    webserver軟體(像IIS和aprch)接收到HTTP請求,然後確定執行什麼請求處理來處理它。請求處理就是一個能夠讀懂請求並且能生成HTML來進行回應的程式(像ASP.NET,PHP,RUBY…)。

舉個最簡單的例子,需求處理可以以映射網站位址結構的檔層次存儲。像http://example.com/folder1/page1.aspx這個位址會映射/httpdocs/folder1/page1.aspx這個檔。webserver軟體可以設置成為位址人工的對應請求處理,這樣page1.aspx的發佈位址就可以是http://example.com/folder1/page1。

  • 請求處理
    請求處理閱讀請求及它的參數和cookies。它會讀取也可能更新一些資料,並把資料存儲在server上。然後,需求處理會生成一個HTML回應。

所有動態網站都面臨一個有意思的難點 – 如何存儲資料。小網站一半都會有一個SQL資料庫來存儲資料,存儲大量資料和/或訪問量大的網站不得不找一些辦法把資料庫分配到多台機器上。解決方案有:sharding (基於主鍵值將資料表分散到多個資料庫中),複製,利用弱語義一致性的簡化資料庫。

委託工作給批次處理是一個廉價保持資料更新的技術。舉例來講,Fackbook得及時更新新聞feed,但資料支援下的“你可能認識的人”功能只需要每晚更新(作者猜測是這樣的,改功能如何完善不得而知)。批次處理作業更新會導致一些不太重要的資料陳舊,但能使資料更新工作更快更簡潔。

7. server發回一個HTML響應

圖中為server生成並返回的回應:

HTTP/1.1 200 OK
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Expires: Sat, 01 Jan 2000 00:00:00 GMT
P3P: CP="DSP LAW"
Pragma: no-cache
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
X-Cnection: close
Transfer-Encoding: chunked
Date: Fri, 12 Feb 2010 09:05:55 GMT
2b3��������T�n�@����[…]

整個回應大小為35kB,其中大部分在整理後以blob類型傳輸。

內容編碼頭告訴流覽器整個回應體用gzip演算法進行壓縮。解壓blob塊後,你可以看到如下期望的HTML:

http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
lang="en" id="facebook" class=" no_js">

關於壓縮,頭資訊說明了是否cache這個頁面,如果cache的話如何去做,有什麼cookies要去設置(前面這個回應裏沒有這點)和隱私資訊等等。

請注意表頭中把Content-type設置為“text/html”。表頭讓流覽器將回應內容以HTML形式呈現,而不是以檔形式下載它。流覽器會根據表頭資訊決定如何解釋該回應,不過同時也會考慮像URL擴展內容等其他因素。


8. 流覽器開始顯示HTML

在流覽器沒有完整接受全部的HTML文檔時,它就已經開始顯示這個頁面了:

9. 流覽器發送獲取嵌入在HTML中的物件

在流覽器顯示HTML時,它會注意到需要獲取其他位址內容的標籤。這時,流覽器會發送一個獲取請求來重新獲得這些檔。

下面是幾個我們訪問facebook.com時需要重獲取的幾個URL:

· 圖片
http://static.ak.fbcdn.net/rsrc.php/z12E0/hash/8q2anwu7.gif

· CSS 式樣表
http://static.ak.fbcdn.net/rsrc.php/z448Z/hash/2plh8s4n.css
http://static.ak.fbcdn.net/rsrc.php/zANE1/hash/cvtutcee.css

· JavaScript 文件
http://static.ak.fbcdn.net/rsrc.php/zEMOA/hash/c8yzb6ub.js
http://static.ak.fbcdn.net/rsrc.php/z6R9L/hash/cq2lgbs8.js

這些位址都要經歷一個和HTML讀取類似的過程。所以流覽器會在DNS中查找這些Domain name,發送請求,重定向等等…

但不像動態頁面那樣,靜態檔會允許流覽器對其進行cache。有的檔可能會不需要與server通訊,而從cache中直接讀取。server的回應中包含了靜態檔保存的期限資訊,所以流覽器知道要把它們cache多長時間。還有,每個回應都可能包含像版本號一樣工作的ETag頭(被請求變數的實體值),如果流覽器觀察到檔的版本ETag資訊已經存在,就馬上停止這個檔的傳輸。

試著猜猜看“fbcdn.net”在地址中代表什麼?聰明的答案是"Facebook內容分發網路"。Facebook利用內容分發網路(CDN)分發像圖片,CSS表和JavaScript檔這些靜態檔。所以,這些檔會在全球很多CDN的資料中心中留下備份。

靜態內容往往代表站點的帶寬大小,也能通過CDN輕鬆的複製。通常網站會使用第三方的CDN。例如,Facebook的靜態檔由最大的CDN提供商Akamai來託管。

舉例來講,當你試著ping static.ak.fbcdn.net的時候,可能會從某個akamai.netserver上獲得回應。有意思的是,當你同樣再ping一次的時候,回應的server可能就不一樣,這說明幕後的負載平衡開始起作用了。

10. 流覽器發送非同步(AJAX)請求

在Web 2.0偉大精神的指引下,頁面顯示完成後用戶端仍與server端保持著聯繫。

以Facebook聊天功能為例,它會持續與server保持聯繫來及時更新你那些好友的狀態。為了更新這些亮著的好友狀態,在流覽器中執行的JavaScript代碼會給server發送非同步請求。這個非同步請求發送給特定的位址,它是一個按照程式構造的獲取或發送請求。還是在Facebook這個例子中,用戶端發送給http://www.facebook.com/ajax/chat/buddy_list.php一個發佈請求來獲取你好友裏哪個線上的狀態資訊。

提起這個模式,就必須要講講"AJAX"– “非同步JavaScript 和 XML”,雖然server為什麼用XML格式來進行回應也沒有個一清二白的原因。再舉個例子吧,對於非同步請求,Facebook會返回一些JavaScript的代碼片段。

除了其他,fiddler這個工具能夠讓你看到流覽器發送的非同步請求。事實上,你不僅可以被動的做為這些請求的看客,還能主動出擊修改和重新發送它們。AJAX請求這麼容易被騙,可著實讓那些計分的線上遊戲開發者們鬱悶的了。(當然,可別那樣騙人家~)

Facebook聊天功能提供了關於AJAX一個有意思的問題案例:把資料從server端推送到用戶端。因為HTTP是一個請求-回應協議,所以聊天server不能把新消息發給客戶。取而代之的是用戶端不得不隔幾秒就輪詢下server端看自己有沒有新消息。

這些情況發生時長輪詢是個減輕server負載挺有趣的技術。如果當被輪詢時server沒有新消息,它就不理這個用戶端。而當尚未超時的情況下收到了該客戶的新消息,server就會找到未完成的請求,把新消息做為回應返回給用戶端。

2010 年 03 月 31 日

ServerIron 筆記

Filed under: Foundry — nkongkimo @ 00:29:24

WSM(WEB Switching Managment)的比較

Capacity WSM6-1 WSM6-2 WSM6
concurrent session 5M 10M 15M
CPU Clocl speed 1GHz 1GHz 1GHz
Number of WSP’s 1 2 3
Packet Buffer Size 256MB 256MB 256MB

 

SLB(Server Load Balancing)

1.利用VIP來達到SLB的功能
2.有health Checks的機制 會自動偵測Real Server有沒有活著
3.提供dos、syn的攻擊

 

GSLB(Global Server Load Balancing)

1.需要有DNS的協助
2.利用在跨國的公司
3.最大的好處是可以跨國家
4.基本上第一次會走比較遠的路
5.當SI啟用GSLB時 dns的flash時間會被變更為5分鐘

 

Health Check的機制

L3:ARP or Ping
ARP:Real server 會被排除
Ping:使用ping去偵測Real server
每2秒Ping一次,連續4測沒有回應表示Real Server down
L4:TCP or UDP
TCP:當Real server被綁到VIP上面才會被偵測
TCP會只用3 way handshake的方式偵測:
1.SI會送出TCP SYN的封包
2.Real server會回TCP SYN+ACK的封包
3.SI接收到封包,會在回應TCP Reset的封包
UDP: 查看Real server有沒有回應ICMP Unreachable response的訊息
1.SI 會送出Garbage的封包給Real server
2.SI要是收到ICMP port Unreachable的封包表示Real Server目前down
3.SI要是沒有收到任何回應的訊息表示Real Server是alive的.
L7:Application Aware
1.SI會使用application Aware的方式針對已知的application,若是用戶自行定義的會用TCP or UDP的方式偵測
2.預測L7的偵測是關閉的,在定義的服務上使用keepalive的指令啟用L7的health check.

 

Health Check 的狀態

  Server Application
ENABLE 沒有link連到real server 沒有連到server
FAILED Real server沒有回應 L3的health check Application沒有回應 L4&L7的health check
TEST L3的health check有成功,但是L7的health check沒有回應 L3的health check有成功,但是L7的health check沒有回應
SUSPECT 增加最後回應與傳送的時間 增加最後回應與傳送的時間
GRACE_DN Gracefl Shutdown的訊息 Gracefl Shutdown的訊息
ACTIVE 全部的Server都完成檢測 Application都完成檢測
UNBND N/A Application 沒有綁到VIP上面

 

Application Security Function

DDoS攻擊的保護 SI可以當做SYN-Cookie 可以設定clint多久要回ACK
#ip icmp burst-normal 10 burst-max 100 lockuo 300
每秒10個ping 超過100個 300秒不收icmp的封包
Rate Limiting Connection的限制 可以限制connection的數量
SPAM的保護 要搭配sFlow

 

SLB Packet Walk

1.Dest MAC 會在第一個欄位,因為在sw的運作模式,會先看Dest MAC
2.基本上Src IP跟Dest IP都不會變,但是在經過SI時會被NAT,可以觀察第3跟第4流程.
3.Source NAT會發生在當real server要把封包送到SI的時候
4.基本上經過SI的VIP會被Dest NAT
5.若要多個VIP導到同一台real的同一個port可以使用no port http translate ,表示不管VIP的http bind那一個port 都會被導到http

 

DSR(Direct Server Return) Packet walk

1.會使用DSR是因為不想SI放在骨幹上,可能會是一個Bottleneck.
2.再來就是可能只需要導http or https的traffic
3.只需要在VIP上面輸入port http dsr即可,表示告知SI traffic只需要由外部來一次,不會再由SI流回去,看session table的時候不會有Return的traffic
4.需要在real-server設定loopback IP(IP相同VIP的ip)
5.DSR不需要設定Source-NAT
6.可以觀察到VIP的IP與Real-server的loopback介面相同,故再packet回去的時候不需要用到Source-NAT.
7.需要在router的介面上設定一個loopback ip

 

TCS(Transparent Cache Switching)

1.好處可以降低對外頻寬的使用率
2.可以使用多台cache達到load balance的效果
3.加速LAN瀏覽網頁的速度
4.可以使用cahe來filter網頁的內容
5.可針對ip URL 服務來做導向
6.可以降低server 查詢的loading
7.有外部進來的traffic也可以使用TCS,只有方向相反。
8.Cache必須接在SI上面
9.TCS最主要是針對Http & SSL的部份
10.TCS有防呆的機制,只要是cache server的IP不會有cache的機制,預設TCS會套用到所有的port
11.當所有的cache server都crash時,http/https會直接導到Internet
12.一台SI可以有4個cache-group
13.預設所有的port都套用cache-group 1
設定範例:
1.建立cache server:
   #server cache-name CS1 A.B.C.D
2.建議cache group
  #server cache-group 1
   #cache-name CS1
3.啟用TCS的功能
   #ip policy 1 cache tcp http global(local)
*global表示所有的port都套用
*local表示要手動對port宣告 那些port要使用cache
設定細節:
1.使用no-cache-group 定義這一個port不要啟用cache的服務
2.可以在cache server的設定模式下宣告:
   max-connction
   weight
   no port http keeplive
  description……等
3.可以是用hash mask來進行分流
IP Filter
使用Filter來過濾哪些要導到cache 哪些不導到cache
ip filter 1 deny any 目的地ip mask tcp eq http
ip filter 2 permit any any
套用到cache server上

2010 年 03 月 13 日

ARP 協定

Filed under: 網路基本服務原理 — nkongkimo @ 19:52:11

這裡我們要介紹的是 Address Resolution Protocol (ARP)。 ARP 是 TCP/IP 設計者利用乙太網的廣播性質﹐設計出來的位址解釋協定。它的主要特性和優點是它的位址對應關係是動態的﹐它以查詢的方式來獲得 IP 位址和實體位址的對應。它的工作原理非常簡單﹕

1. 首先﹐每一台主機都會在 ARP 快取緩衝區 (ARP Cache)中建立一個 ARP 表格﹐用來記錄 IP 位址和實體位址的對應關係。這個 Table 的每一筆資料會根據自身的存活時間遞減而最終消失﹐以確保資料的真實性。

2. 當發送主機有一個封包要傳送給目的主機的時候﹐並且獲得目的主機的 IP 位址﹔那發送主機會先檢查自己的 ARP 表格中有沒有該 IP 位址的實體位址對應。如果有﹐就直接使用此位址來傳送框包﹔如果沒有﹐則向網路發出一個 ARP Request 廣播封包﹐查詢目的主機的實體位址。這個封包會包含發送端的 IP 位址和實體位址資料。

3. 這時﹐網路上所有的主機都會收到這個廣播封包﹐會檢查封包的 IP 欄位是否和自己的 IP 位址一致。如果不是則忽略﹔如果是則會先將發送端的實體位址和 IP 資料更新到自己的 ARP 表格去﹐如果已經有該 IP 的對應﹐則用新資料覆蓋原來的﹔然後再回應一個 ARP Reply 封包給對方﹐告知發送主機關於自己的實體位址﹔

4. 當發送端接到 ARP Reply 之後﹐也會更新自己的 ARP 表格﹔然後就可以用此紀錄進行傳送了。

如果發送端沒有得到 ARP Reply ﹐則宣告查詢失敗。

ARP 的查詢過程可參考下圖﹕

 

前面說的 ARP 表格﹐只有在 TCP/IP 協定被載入核心之後才會建立﹐如果 TCP/IP 協定被卸載或關閉機器﹐那麼表格就會被清空﹔到下次協定載入或開機的時候再重新建立﹐而同時會向網路發出一個 ARP 廣播﹐告訴其它機器它的目前位址是什麼﹐以便所有機器都能保持最正確的資料。

然而﹐ARP cache 的大小是有所限制的﹐如果超過了界限﹐那麼越長時間沒被使用過渡資料就必須清理掉﹐以騰出空間來儲存更新的資料。所以﹐當機器收到 ARP equest 封包時﹐如果查詢對象不是自己﹐則不會根據發送端位址資料來更新自己的 ARP 表格﹐而是完全忽略該封包。同時﹐每筆存在 cache 中的資料﹐都不是永久保存的﹕每筆資料再更新的時候﹐都會被賦予一個存活倒數計時值﹐如果在倒數時間到達的時候﹐該資料就會被清掉。然而﹐如果該資料在倒數時間到達之前被使用過﹐則計時值會被重新賦予。

當然了﹐ARP 尚有一套機制來處理當 ARP 表格資料不符合實際位址資料的狀況(例如﹐在當前連線尚未結束前﹐收到目的端的位址資料更新訊息)﹔或是目的主機太忙碌而未能回答 ARP 請求等狀況。

ARP 和 RARP 之封包格式

讓我們溫習前面討論 OSI 層級時提到的乙太網路框包格式﹕

乙太網的框包格式

我們可以發現標準的乙太網框包其中有一段 46 到 1500 byte 長度的數據空間﹐假如這是一個 ARP 封包的話﹐那麼該段數據空間就用來包裝整個 ARP 封。ARP 和 RARP 的封包格式是一模一樣的﹕

ARP / ARAP 封包格式

下面我們就封包中每一欄位做一個簡單的說明﹕

Hardware Type

這是指網路界面卡的種類﹐如果該值為 1﹐則表示為乙太網 ( Ethernet )。

Protocol Type

這是指上層網路協定位址種類﹐如果該值為 0x0800﹐則表示為 IP 位址格式。

Hlen

這是指硬體位址長度(單位為 byte)﹐乙太網的位址長度為 6 。

Plen

這是指網路協定位址的長度(單位為 byte)﹐IP 協定位址長度為 4。

Operation

這是指封包類別﹐一共有四種﹕

1 ARP Request

2 ARP Reply

3 RARP Request

4 RARP Reply

Sender HA (Source MAC)

這是指發送端的實體位址﹐如果是乙太網的話﹐將會是一個 6 byte 長度的乙太網位址。

Sender IP(source IP)

這是指發送端的 IP 位址﹐會是一個 4 byte 長度的 IP 位址。

Traget HA(Destination MAC)

這是指目的端的實體位址﹐如果是乙太網的話﹐將會是一個 6 byte 長度的乙太網位址。

Target IP(Destination IP)

這是指目的端的 IP 位址﹐會是一個 4 byte 長度的 IP 位址。

ARP 之 RFC 文件

ARP 的詳細資料可以查詢 RFC-826﹑RFC-814﹑以及 RFC-1166 等文件。而 RARP 的資料則可以參考 RFC-903﹑RFC-906﹑還有 RFC-1293 等文件。

2010 年 01 月 18 日

Foundry ServerIron 匯入SSL憑證

Filed under: Foundry, 未分類 — nkongkimo @ 12:03:45

建立一個SSL Key
To generate a Secure Sockets Layer (SSL) key, follow these steps:
1.    Click the Security button in the context bar.

2.    進入 SSL Switching link.

3.    點選 SSL Keys tab

4.點選“ Key Generation on ServerIron”的箭頭,可以看到建立SSL的參數.

5.    輸入以下資訊:
•      Key File Name: For example, sslkey2

•      Encryption Algorithm: Only RSA is currently supported

•      Key Length: Choose from the entries in the drop down list. The default is 1024.

•      Password: For example, foundry will be the password for the key file.

6.    Click Generate.
若SSL Key建立成功會出現 "The operation was successful" 的文字並且會顯示在SSL Summary裡面.

2010 年 01 月 17 日

Foundry Note

Filed under: Foundry, 未分類 — nkongkimo @ 17:47:04

Web Switching Modules 6硬體架構

WSM6(Web Switching Modules)是Foundry網路設備的管理模組,Traffic從連接Port進入ServerIron後,會由WSM6模組接手,然後再將處理後的資料,透過連接埠輸出到其他網路設備。

WSM6上共有2種處理器模組,分別是BP(Barrel Processors)及MP(Management Processor),BP處理Layer 4~7層的封包資料,MP負責管理設備情況,而Layer 3的路由服務則可能是MP或BP處理,當我們進入管理介面時,都是由MP處理指令,然後再交給BP處理封包。

目前WSM6分為WSM6、WSM6-1及WSM6-2等3種模組,每個模組具備1個MP,差別在於WSM6有3個BP、WSM6-2有2個BP、WSM6-1有1個BP。

值得注意的是,WSM6還有整合SSL加速的模組WSM6-SSL-1(1個BP)及WSM6-SSL-2(2個BP),若不想讓WSM6板卡同時處理SSL加速,還可以額外採購獨立的SSL加速模組板卡,有助於專門處理SSL資料。

WSM7=有1個MP和3個BP,與WSM6相比只有BP的PROCESS處理效能比較好

SRVC-SSL6-1 Module 專注在SSL的服務有1個BP專門在處理SSL的Traffic

SRVC-SSL6-2 Module 專注在SSL的服務有2個BP專門在處理SSL的Traffic

建議事項

WSM6、7建議插在solt1的插槽上
若有2個WSM要插在同一個Chassis裡面必須要相同的行號
你不可混插IronCore和JetCore 在同一個Chassis的設備上
插2片WSM模組就有2倍的效能,加上Redundancy的效果
WSM6-1 and WSM6-2 支援 IronCore的模組

 

WSM模組的燈號狀況

Reset Button
在面板的右方有一個小凹洞就是Reset Burron的按鈕。

 

SRVC-SSL6 Module

 

更新硬體/軔體步驟:

詳細可以查看releaseNode會更清楚

1.Power down the chassis and remove the Web Switching Management Module from the chassis and place it  on a static-free work area.

  關閉電源移除WSM 並插入新的WSM

2.Copy the flash code and startup-config files that are currently in flash memory onto a TFTP server for backup.

  儲存Flash code和設定檔在TFTP Server

3. Copy the MP boot code and WSM CPU boot code onto a TFTP server to which the ServerIron has network access.

  儲存MP Boot code和CPU Boot code在TFTP Server

4.Enter the following command at the Privileged Exec level of the CLI to copy the MP boot code onto the ServerIron

  輸入指令把MP Boot code上傳到ServerIron 

  copy tftp flash <ip-addr> <image-file-name> boot

5. Enter the following command at the Privileged Exec level of the CLI to copy the WSM CPU boot code onto the ServerIron:

   輸入指令把WSM CPU boot code 上傳到 ServerIron

   wsm copy tftp flash <ip-addr> <image-file-name> boot

6. Enter the following command to at the Privileged Exec level of the CLI to copy the MP flash code onto the ServerIron:

   輸入指令把WSM MP flash code 上傳到 ServerIron

 copy tftp flash <ip-addr> <image-file-name> primary

7.Enter the following command to at the Privileged Exec level of the CLI to copy the WSM CPU flash code onto the ServerIron:

  輸入指令把WSM CPU flash code 上傳到 ServerIron 

  wsm copy tftp flash <ip-addr> <image-file-name> primary

8.Reload the software by entering the following command to at the Privileged Exec level of the CLI:

   reload   重開機

9.輸入指令把第2個WSM MP flash code 上傳到 ServerIron

  copy tftp flash <ip-addr> <image-file-name> secondary

2009 年 06 月 12 日

CCNP-BSCI Module 08 IPv6

Filed under: CCNP-BSCI Module 08 — nkongkimo @ 13:07:19

IPv6的好處

1.增加IP位址(32bits增加到128bits)
2.不需要NAT,達到真正的any-to-any,達到QoS的最佳化
3.Header比較簡單
4.增加anycast的功能,一個IP可以設在多各設備,達到傳輸最佳化
5.強制summary的機制

IPv6定址的概念

1. 由IPv4的主機位址改變成Interface ID
2. 加入Prefix ID 表示Network

IPv4 V.S IPv6 欄位的比較

image
*Option的欄位有資料都會送到Router CPU處理。
*Offset位差:用來重組封包使用
*一列32bits
*MTU由router處裡
image
*MTU由Client設備處理

IPv6表示方法 & 簡化的規則

1.表示方法 IPv6使用16進制,共有8組16進位的frame,每一組為4個16進位數,用":"隔開
2.簡化規則 (1)前面有0的可以刪除
(2)0000可已直接用":"表示
(3)至少要有一個0
(4)連續的0可用"::","::"只能表示一次
(5)"::"表示不知道IP時
(6)"::1"表示loopback0
範例

 

MTU Issues

IPv6 MTU預設1280bit
IPv6裡MTU由Source Client去偵測,不在經由Router去偵測。

 

IPv6 Addressing Model

*IPv6 Enable Interface 至少要有1個"Link Local Address"和"Loopback Address(::1/128)",
或多個Unicast、Anycast、 Multicast
Link-Local Address

1.是必要的位址
2.用於Autoconfiguration
3.用Neighbor Discovery來找出Router跟Prefix, 取代IPv4的ARP、ICMP redirect、IRDP
4.用於Routing Protocol時要指定外送介面

IPv6 Addressing Type

Unicast

1.一對一
2.可以出現在source跟destination的欄位

Multicast

1.一對多的
2.Channel比IPv4更多
3.只出現在Destination的欄位

Anycast

1.新增的Type
2.一對最近的
3.IPv6一個位址(Global & Unique local)可以設定在多個設備上,由Router去決定最佳路徑,達到傳輸最佳化。非常適合做Load balance
4.只出現在Destination的欄位

Multicast Address

Address

Multucast Group

FF02

(0表示固定的  2表示Link Local)

FF02表示是被保留下來的

FF02::1

All Multicast Host

FF02::2

All Multicast Router

FF02::5

OSPFv3 Router

FF02::6

OSPFv3 DR Router

FF02::9

RIPng Router

Anycast

 

Stateless Auto Configuration

 

EUI-64 Autoconfiguration

*把原本48位元的MAC address轉換成64位元的 Interface ID

Configuration IPv6 Address

config)#ipv6 unicast-routing———-啟動IPv6

config)#ipv6 cef———-啟動IPv6 cef

config-if)#ipv6 address IPv6 address/prefix length eui-64——設定IPv6位址

show ipv6 interface (breif)————可以看到EUI-64所給的IPv6位址

show ipv6 route ————可以看到路由表

 

IPv6 Routing Protocol

 

IPv6 Routing Protocol 比較

Routing protocol 內容
1.Ripng 1.與RIPv2相似只有Prefix不同
2.使用IPv6封包傳輸
3.使用FF02::9(All-Rip-router)的Multicast來傳送Update ,Topology是透過link-local來更新, Next-hop也是Link-Localaddress, Distance為FF02::9
4.Updates sent on UDP port 521
設定

2.IS-IS 1.Two new Type, Length,Value (TLV) attributes
(1)IPv6 Reachability
(2)IPv6 Interface address
3.MP-BGP 只要新增新的IPv6 Interface Address和Indentification即可
4.OSPFv3 1.與OSPFv2一樣但OSPFv3 的協定需要重寫
2.封裝在IPv6封包裡面
3.用Link-local的Address來當作Update的Source,Distance為FF02::5(All-OSPF-Router) 、FF02::6(OSPF DR Router).
4.設定上改由哪一個介面再那一個Area
5.同一個介面上可以不同的routing
6.Router-ID一樣為32Bits
7.DR與BDR目前改為用Router-ID識別
8.安全的部份用AH(Authentication Header)和ESP(Encapsulating Security Payload)來做,不用像OSPFv2設定在OSPF裡面
9.新增2個LSA:
(1)Link LSAs (type 8):
(2)Intra-area Prefix LSAs (type 9)
設定  
 
Router(config-if)# ipv6 ospf priority number——————-當需要選擇DR/BDR時,設定priority值
Router(config-if)# ipv6 ospf cost cost——————-修改cost值
show的觀察

 

IPv6 to IPv4 Transition

方法 內容
1.Dual Stack 1.較安全的轉換
2.須要考慮IPv4和IPv6的Routing table(各自分開不戶相干涉)
 
2.Tunnels 1.也是Dual stack的一種方法
2.會增加20bytes的header
3.類似GRE tunnel
4.當Tunnel數量變多時會有問題
5.雙方的設定要對偁
6.Protocol的號碼為11
設定 image
image  
3. 6 to 4 Tunnel 1.會自動建立tunnel,但必須Prefix是2002開頭的(特別保留給6to4的)
2.特別把IPv4的address 與IPv6的address 做對應,把IPv4的IP轉換成2進位填入32位元以16進位轉換
  image
4.NAT-PT 1.把IPv4與IPv6的Address做轉換
2.加入一個NAT的設備做轉換
  image

2009 年 06 月 09 日

CCNP-BSCI Module 03 OSPF (1)

Filed under: CCNP-BSCI Module 03 — nkongkimo @ 13:07:40

OSPF特性

1.IGP:Link-State Protocol
2.Classless 支援VLSM
3.AD值為110
   Cost=10的8次方/BW
4.收斂快,利用SPF演算法算出最佳路徑,利DR & BDR來速收斂。
5.在LAN的環境只跟Adjacency router(DR & BDR)交換路由資訊。
6.利用LSA(link state adj.)封包來建立完整Topology,但要在同一個AS裡,並每一個Router都有相同的LSDB(路由資料庫)。
7.利用SPF演算法算出最佳路徑。
8.3張表(鄰居表、拓樸表(database)、路由表)
9.使用SPF演算法,不會有迴圈。
10.採用階層式的架構設計,使網路更方便管理。
     分為2層-(1)Backbone(Transit):負責轉送其他區域封包的區域。代號為AS 0。
                   (2)Unbackbone(Regular):自己獨立的AS區域,代碼從1開始。
11.以介面來宣告區域,不看整個Router再哪一個區域。
12.只有ABR & ASBR可以做路由資訊的摘要。
13.Unbackbone的router若要跨Area傳輸需要透過Backbone Area,無法直接傳輸。

 

OSPF & EIGRP 的比較

  EIGRP OSPF
Hello interval 大BW=5sec
小BW=60sec
大BW=10sec
小BW=30sec
Hold-Time
(Dead-interval)
Hello*3(sec) Hello*4(sec)
Multucast Address 224.0.0.10 224.0.0.5(all ospf router)
224.0.0.6(all ospf DR router)
Form Adjacency 與Hello Interval&Hold Time無關
AS、K值、Subnet相同即可。
Hello、Interval&Hold Time、AS、Subnet必須相同。
路由改變時 利用Partial updates 不做週期更新 只要更新會通知整各topology的router
Timer Distance-Vactor timer
預設Hello Interval的3倍時間
Link-state timer
1.MaxAge=60min
2.Refresh=30min

 

OSPF & EIGRP Packets Type的比較

Type EIGRP OSPF 用途
1 Hello Hello 尋找、建立鄰居關係,並當作keepalive的功能
2 Update DBD(Datebase Description)
or
DDP(Datebase Desctiption Packet)
交換Link-State DataBase的摘要,並比對路由的資訊是否需要更新。
3 Query LSR(Link State Request) Router需要請求特定的封包時,會送出此訊息
4 Reply LSU(Link State Update) 對路由的狀態送出更新的資訊。
5 ACK ACK or LSACK 確認的訊息

*OSPF的封包中DBD / LSR / LSU 屬於可靠性傳輸(需要回覆ACK)。

OSPF 的 Area

1.Backbone(Transit):
*負責轉送其他Area的資料
*Area=0
*需要有延續性

2.Unbackbone(Regular):
*都要接到Backbone再轉送到其他Area區域,無法直接傳輸。
*分為5大區域:

區域 定義
(1)Normal(Regular) Area:標準的區域

*RFC定義
*收Type1~5,預設都是這種區域。
show ip route

(2)Stub Area:末梢區域

*RFC定義
*不收Type5,只收Type1~4,由ABR Inject Default Route給Stub Area 的Router。
*只要宣告自己為Stub Area ABR會自動送給他Default rout(Type 3 ,Default Cost=1) 。
*Stub Area 裡面的Router都要設定為Stub Router才會形成Adjacence的關係。
*在Stub Area裡面不行有ASBR的存在,也一定不可設定為Area 0。
*不可成為Transit Area。
*在路由表只會看到O*IA。

Stub Area設定方法:

Stub Area 範例與Show
(3)Not-So-Stubby Area(NSSA)

*運作類似Stub area
*RFC定義
*簡單來說就是Stub Area有ASBR Router的存在。(Stub area with "ASBR")
*主要用於不支援OSPF的AS要送資料到OSPF的AS使用。
*若要送到其他Area會由NSSA Area的ABR轉換成Type 5送出。
*不收Type5,只收Type1~4和7,由ABR 手動設定 Default Route給NSSA Area 的Router。

NSSA設定方法:

Not-So-Stubby Area(NSSA)範例
(4)Totally Stubby Area

*Cisco定義
*只收Type1、2,由ABR Inject Default Route給Totally Stub Area 的Router。
*只要宣告自己為Totally Stubby Area ABR會自動送給他Default route(Type 3 ,Default Cost=1) 。
*可手動調整Cost值,越小越好。
*在路由表只會看到O*IA
*與Stub Area的狀況類似。

Totally Stubby Area 設定的方式:
 

*ABR會自動濾掉Type3、4

Totally Stubby Area範例
show ip route
(5)NSSA Totally Stubby Area:

*Cisco定義
*運作與NSSA一樣。
*簡單來說就是Stub Area有ASBR Router的存在。(Stub area with "ASBR")
*主要用於不支援OSPF的就AS要送資料到OSPF的AS使用。
*若要送到其他Area會由NSSA Totally Atubby Area的ABR轉換成Type 5送出。
*只收Type1、2和7,由ABR 手動設定 Default Route給NSSA Totally Stubby Area 的Router。

 

OSPF Router 的種類

1.Backbone Router:所有的介面都在Area 0區域內,較特殊的router。
2.Internal Router:所有的介面都在同一個區域內。
3.ABR Router:跨在2個OSPF的區域中間的Router,可以做路由摘要。
4.ASBR Router:跨在2個不同路由協定的Router,可以做路由摘要。

 

OSPF Adjacencies 關係

*利用Hello(LSA)來建立Adjacencies的關係,當都建立完成後叫做Full Adjacencies。
*在Multi-Access架構中,利用DR/BDR來加速收斂。
*224.0.0.5 叫做All OSPF Router  (所有的OSPF router都會接收)
*224.0.0.6叫做All OSPF DR Router  (只有DR&BDR才會接收)

OSPF的計算方式和LSA運作方式

1.LSA會依尋split horizon規則,不會把由鄰居收到的路由資訊回傳。
2.LAS的運作方式

OSPF封包Header的類型

Type 1: Hello Packets 細部內容
Type 2: DBD(DB 描述) Packets 細部內容
Type 3: LSR(Link State Request) Packets 細部內容
Type 4: LSU(Link State Update) Packets 細部內容

註:詳細資訊可以參考 "OSPF Packet Type- LSU(LSA) Packet 的種類"
Type 5: LSACK(Link State ACK) Packets 細部內容

OSPF 建立連結的過程

Step1:
*先利用Hello的方式找鄰居
*狀態種類:

種類 定義
Down state 還沒有收到Hello的狀態
Init state: 收到Hello封包但未加入對方鄰居表的狀態
Two-Way 雙方建立鄰居關係的狀態

Step2:
*選擇DR / BDR的角色
*在Multi-Access的環境才需要,在Point-to-Point的環境不需要此程序直接成為Exchange state的狀態。
*狀態種類:

種類 定義
Exstart State 進入DR / BDR的選舉
Exchange State 完成DR / BDR選舉的程序,由Router-ID大的成為DR

Step3:
*確認路由資訊的完整性
*狀態種類:

種類 定義
Loading State 送出向DR需求的特定資訊的封包(LSU),就會進入此狀態
Full State 當DR把需要的資訊送給Router,並完成路由DB收斂後,就形成Full State的狀態

OSPF 溝通的狀態

DR/BDR selecte

1.選擇DR / BDR的架構
(1)Unbroadcast 的架構: 不支援廣播&群播,需要手動指定DR位址。
(2)Multi-Access的架構(表示網段裡面有3顆router以上): 支援廣播&群播,自動會選擇DR/BDR。
2.選擇順序:
(1)Priority最高的,預設值=1(0~255),每一個介面的priority可以不同。
(2)Router ID 大的成為DR
3.不具強制性,DR / BDR選好就不會變了,除非設備或topology重置。
4.DR/BDR 依網段去選擇的,所以不同網段Router可能是DR or BDR。
5.設定Priority值
6.Router 的角色:
(1)DR(Designated Router):委任路由器。
(2)BDR(Backup Designated Router):被援委任路由器。
(3)DROther:不是DR or BDR的Router。
7.DR使用的狀況:
(1)在FULL-Mesh的狀況下,效能最佳都做DR。
(2)在NBMA的架構下,當Hub的Router都當作DR。

 

LSA Sequence Number

*由0x80000001開始到0x7FFFFFFF,由負的開始到正的。每30分鐘reflash一次。

Config OSPF

 
EXP:

建立穩定的連線

 

Show的觀察

1.show ip ospf

image

2.show ip ospf neighbor
 
3.sh ip ospf neighbor detail
 
4.show ip route ospf
 
5.show ip ospf interface f0/0
6.debug ip ospf packet
7.show ip ospf database
*DataBase會自動以Area來區分
*OSPF路徑選擇的方法為LSA小的優先選擇,不管Cost值。
8.show ip ospf protocol
9.debug ip ospf hello

 

OSPF 3大網路類型

類型 內容 運用架構
Point-to-point *不需要選出DR/BDR
*利用Multicast OSPF Hello建立鄰居database
*容易建立鄰居關係
*架構簡單就只是點對點
PPP
HDLC
Broadcast
multiaccess
*需要選出DR/BDR
*利用Multicast OSPF Hello建立鄰居database
*在一個網路裡面超過2顆router的情況
*此架構本身就支援Broadcast / Multicast
LAN
Token Ring

Full-mesh
Partial-mesh

Nonbroadcast multiaccess
(NBMA)
*需要選出DR/BDR
*要用Unicast OSPF Hello建立鄰居表
*需要把Multicast轉成Unicast,所以鄰居需要手動建立。
*在一個網段上可有2個一上的Router
*不支援Broadcast的傳送
F.R
ATM
X.25

Full-mesh
Partial-mesh

 

Nonbroadcast Multiaccess (NBMA)的5種網路類型

類型 內容 架構
1.Nonbroadcast *需要選出DR/BDR
*要用Unicast OSPF Hello建立鄰居表
*需要把Multicast轉成Unicast,所以鄰居需要手動建立。

*傳統的NBMA
*不支援Broadcast的傳送
F.R
ATM
X.25
2.Point-to-Multipoint *不需要選出DR/BDR
*要用Multicast OSPF Hello建立鄰居表
*RFC2328定義
*都在同一個網段上
*使用Multicast OSPF Hello去自動建立鄰居表

Hub-and-Spoke
Partial-mesh
3.Point-to-Multipoint  
   Nonbroadcast
*Cisco專屬
*不需要選出DR/BDR
*要用Unicast OSPF Hello建立鄰居表
*點對多點,集中點需要變成DR
*不支援Broadcast的傳送
*需要把Multicast轉成Unicast,所以鄰居需要手動建立。
 
4.Broadcast *Cisco專屬
*需要選出DR/BDR
*要用Multicast OSPF Hello建立鄰居表
*須要Router把Broadcast的封包在每一個VC上複製在用Unicast的方式送出,來模擬Broascast的功能。
 
5.Point-to-Point *Cisco專屬
*不需要選出DR/BDR
*要用Multicast OSPF Hello建立鄰居表
*容易建立鄰居關係
*不同的網段在同一個介面上
*架構簡單就只是點對點
LAN
WAN

 

OSPF & EIGRP Hello的比較

OSPF Hello       EIGRP Hello    
Network type Hello interval Dead interval Network type Hello intercal Dead interval
Point-to-Point 10 sec 40 sec LAN 5 sec 15 sec
Broadcast 10 sec 40 sec WAN
(大BW)
5 sec 15 sec
NBMA 30 sec 120 sec WAN
(小BW)
60 sec 180 sec

 

NBMA(Nonbroadcast Multiaccess)鄰居的設定

1.NBMA Nonbroadcast 設定方式
 image
(1)neighbor只需要在DR的router指令即可
(2)neighbor後面的priority表示給對方的pri數值(0表示不競選DR)
(3)使用show ip ospf neighbor觀察競選的狀況
image
2.NBMA Point-to-Multipoint 設定方式
大部分用在hub-and-spoke
image
image
image 
3.Cisco’s Point-to-Multipoint Non-broadcaat 設定方法
*不支援Multicast傳送
*不需要選擇DR / BDR
*需要手動指定鄰居

R1(config-if)#ip ospf network point-to-multipoint non-broadcast
R1(config-router)#network 192.168.1.0 0.0.0.255 area 0
R1(config-router)#neighbor 192.168.1.1 cost 10 (需要手動設定鄰居)
R1(config-router)#neighbor 192.168.1.2 cost 20 (需要手動設定鄰居)

4.F.R上面用Sub-interface的模式:

(1).Point-to-Point Subinterface 設定方法
*不需要DR/BDR
*利用Multicast OSPF Hello建立鄰居database

2.Multipoint Subinterface 設定方法

*需要選擇DR/BDR
*利用Unicast OSPF Hello建立鄰居database,所以需要手動設定鄰居。

4.Cisco’s Broadcast mode
*需要選出DR/BDR
*要用Multicast OSPF Hello建立鄰居表
*需要在Full-Mesh的架構下

R3(config-if)#ip ospf network broadcast (宣告為Broadcast)
R3(config-router)#network 192.168.1.0 0.0.0.255 area 0 (宣告網段)
5.Cisco’s Point-to-Point mode
*不需要選出DR/BDR
*要用Multicast OSPF Hello建立鄰居表
*需要在Full-Mesh的架構下

R3(config)#interface serial 0/0.1 point-to-point (宣告為P2P介面)
R3(config-subif)#ip address 3.1.1.2 255.255.255.0
R3(config)#interface serial 0/0.2 point-to-point (宣告為P2P介面)
R3(config-subif)#ip address 4.1.1.2 255.255.255.0
R3(config-router)#network 3.1.1.0 0.0.0.255 area 0 (宣告網段)
R3(config-router)#network 4.1.1.0 0.0.0.255 area 0 (宣告網段)

 

OSPF & EIGRP Authentication Type的比較

  EIGRP OSPF

認證方式

1.Simple password                 

*較不安全,因用明文傳送。

1.Simple password                    

*較不安全,因用明文傳送。

2.MD5 authentication
*較安全,不會把key送出去。
*用key chain去管理key,認證時需告知key ID來進行認證。

2.MD5 authentication
*較安全,不會把key送出去。
*用key chain去管理key,認證時需告知key ID來進行認證。

 

Authentication的方法

1.Simple password Authentication 設定

(1)在介面上設定,範圍較小,只針對介面。

(2)在Area區域內設定,範圍較大,建議使用此方法。
2.MD5Authentication 設定

debug ip ospf

CCNP-BSCI Module 03 OSPF (2)

Filed under: CCNP-BSCI Module 03 — nkongkimo @ 13:01:49

OSPF Packet Type- LSU(LSA) Packet 的種類

LSU Packet種類 定義

1.Router LSA
(Router Link)

image
  1.描述Router的Links(介面網段)
2.在同一個Area中Flooding,不會跨Area。
3.Link-State ID=RID of the Origination Router(誰送出此LSA的資訊)
4.OSPF Link type:

Link type 描述 Link-ID

1

Point-to-Point interface

Neighboring router ID

2

Transit network(Multiaccess)

IP address of DR  (DR的IP)

3

Stub network

(no ospf neighbor Router)

ip network / subnet number

4

Virtual Link(類似Tunnel)

Neighboring router ID

5.show ip ospf database

 image
6.路由資訊的代號為: O

2.Network LSA
(Network Link)

  1.由DR產生Network LSA。
2.在同一個Area中Flooding,不會跨Area。
3.Show ip ospf database
 
4.路由資訊的代號為: O

3.Network Summary LSA

  1.由ABR產生Type 3封包
2.ABR把Type 1的內容轉成Type 3送到其他區域
3.可以做Summary再送出,預設沒有啟用Summary。
4.Type 3會在整個OSPF Dimain  Flooding。
5.show ip ospf database
 
6.路由資訊的代號為: OIA
4.ASBR Summary LSA
  1.ASBR Router要通知其他Area 1的Router有一個。
2.ABR Router 要把Type 1轉換成Type 4,並告知其他Router在Area 1有ASBR。
3.Type 4會在整個Routing Domain(AS) Flooding。
4.Type 4只用來說明ASBR的router在哪邊的資訊。
5.Type 4由ABR產生。
6.show ip ospf database
 
7.路由資訊的代號為: OIA
5.AS External LSA
  1.Type 5由ASBR產生,在整個Routing Domain Flooding(AS)。
2.Type 5的內容為外部路由的資訊。
3.Link state ID為外部網路的代號。
4.show ip ospf database
 
5.路由資訊的代號為: OE1/ OE2
6.Type 5會在整個AS flooding。
7.NSSA External LSA 1.Type 7由ASBR產生,只在NSSA Domain Flooding。
2.若要送到其他Area會由NSSA Area的ABR轉換成Type 5送出。
3.路由資訊的代號為: ON1/ ON2
 
 

*每一個LSA有"Link-state ID"來辨識並表示該LSA描述了Routing Dimain中那部份的訊息。

*Link-state ID的值會因不同的LSA Type而有不同內容的值。

 

OSPF路由資訊的種類

OSPF 代號種類:

種類 內容
1.O *OSPF Intra-Area Route(在區域內)
*Type 1&2都是用"O"表示。
2.OIA *OSPF Inter-Area Route(在區域與區域之間)
*Type 3&4都是用"OIA"表示。
3.OE1 *OSPF External AS Route(在區域外)
*計算外部成本加計內部成本。
*有多條link時建議使用OE1
4.OE2 *OSPF External AS Route(在區域外)
*計算外部成本,不加計內部成本。
*預設為OE2

OE1 & OE2的區別

 

OSPF Link-State DataBase 的防護機制

*用於LSA瞬間大量建立Adjacence的時候,把一些超額的LSA drop掉。
*建議盡量把adjacence的router變少。

調整OSPF Path Cost

*Cisco預設的成本為 10的8次方/BW(bps)=Cost
*10的8次方就是reference BW
種類 內容
1.修改Bandwidth的參數 *修改介面Bandwidth的參數
2.調整Reference Bandwidth的數字
(建議使用此項目調整)
*預設值為100
*在介面下設定
3.指定每一個介面的cost值 *範圍為1~65535
*較建議使用的方法
 

 

OSPF Virtual Link

*臨時建立用或備援用,無法長期使用
*類似利用Tunnel的方法,把資料都封裝在裡面,用unicast的方式送出去。
*因不是實體連線要盡量降低封包的傳送。
*利用DNA(DoNotAge)的機制來抑止過多的Hello flooding。
使用的情況:

1.連線中斷
2.沒有連續的Area 0 或有2個Area 0的情況:
設定的方法:
範例:
Show的觀察

show ip ospf virtual-link

Route Summarization

1摘要點為ABR & ASBR Router:
*ABR把資料轉成Type 3送進去
*ASBR把資料轉成Type 5送進去
*ABR & ASBR都需要手動設定summary,預設沒有啟動。
2.Summary的好處:
當發生Topology change只影響自己的區域,不會影響到整個OSPF Domain。
3.摘要的方法:
*摘要的內容在路由表中一定要有一筆以上符合摘要的路由資訊。

Example:
*ABR設定方法
*ASBR設定方法
 

OSPF Area Type 類型

1.Standard /Regular Area :
(1)不會自動產生Default Route
(2)以Type 5 Extranal LSA的方式inject
(3)指令: default-infotmation originate [always] / 或加入"always"此參數,需要本身有Default Route or加入"always"此參數。
(4)路由表預設已O*E2出現
 
2.Stub Area /Totally Stubby Area / NSSA Totally stubby Area:
(1)ABR會自動Inject Default Route進去
(2)以Type 3方式Inject
(3)以O*IA方式出現
(4)全部區域的Router都要設定Stub or Totally Stubby

Stub Area (1)只接收Type1~4的LSA封包
(2)只有一個出口的環境
(3)不可以是Area0
(4)不可以有其他路由協定
 image
Totally Stubby Area (1)只接收Type1&2的LSA封包,不收summary 的封包
(2)只有一個出口的環境
(3)不可以是Area0
(4)不可以有其他路由協定
(5)Cisco專屬的區域
(6)只需要在ABR Router設定即可
image
image
NSSA Totally stubby Area

(1)只接收Type1&2&7的LSA封包
(2)只有一個出口的環境
(3)不可以是Area0 
(4)Cisco專屬的區域
(5)只需要在ASBR Router設定即可

(6)ABR(R2)會自動inject  deafult route 給R1

R1#sh ip route

     172.17.0.0/24 is subnetted, 1 subnets
C       172.17.20.0 is directly connected, FastEthernet0/0
R    192.168.99.0/24 [120/1] via 192.168.1.2, 00:00:19, FastEthernet0/1
     10.0.0.0/32 is subnetted, 1 subnets
C       10.10.10.3 is directly connected, Loopback0
C    192.168.1.0/24 is directly connected, FastEthernet0/1
O*IA  0.0.0.0/0 [110/11] via 172.17.20.1, 00:00:36, FastEthernet0/0

   
3.NSSA Area Type:
(1)預設不會自動產生Default Route
(2)由NSSA ASBR 產生
(3)以Type 7方式送入
(4)預設以O*N2出現
(5)指令:area XX nssa default-information orignate
Example:

2009 年 06 月 06 日

CCNP-BSCI Module 02 LAB

Filed under: CCNP-BSCI Module 02 — nkongkimo @ 16:04:13
LAB 2-1 啟動EIGRP
Topology


題目要求

1.ASN為1
2.使用Key-Chain認證
3.手動建立Summary route
4.設定EIGRP Default-network
5.P1R3 / P1R4為Stub Router
6.P1R3 / P1R4中間不連接

Show的觀察

1.sh ip route eigrp

2.sh ip eigrp neighbor
 
3.sh ip eigrp neighboe detail
4.sh ip eigrp topology
5.sh ip protocols
6.sh ip eigrp interface
7.sh ip eigrp traffic
8.sh key chain
s
« Newer PostsOlder Posts »

在WordPress.com寫網誌.