因為最近沒有什麼比較軟的書可以讀了, 又需要用到網路的知識, 所以乾脆把這本讀了 1/3 的書一口氣讀完.
本書對於讀者建立網路的相關觀念很有幫助, 我就舉五個地方來做重點複習.
1 封包的觀念
網路上一筆 http 的 data, 會因為 MTU 或 MSS (maximum segment size) 的限制而切割在不同的 LAN 封包當中. 當路由器對 IP 的大小有所限制, 這些封包還會再切割一下, 並記錄在 IP header 裡面以便重組, 此時 TCP header 算是 IP data 的一部分, 所以 TCP header 可能會和 data 分在不同的 IP packet 裡面. 出了 LAN 之後, MAC address 和 Ethernet 的 preamble, start frame Delimiter, FCS 都沒有用了.
Preamble |
SFD |
MAC addr. |
IP Header |
TCP header |
data |
FCS |
|
MSS (e.g. 切割過的 http data)
|
|
|
|
可以打散再重組 |
|
|
MTU
|
|
如果用專線連接, 自然就不需要 MAC address, ARP (address resolution protocol) 了.
flag |
HDLC header |
PPP header |
IP Header |
TCP header |
data |
FCS |
flag |
[note] HDLC = high-level data link control
2. 轉址的觀念
無論路由器或是防火牆, 都具有轉址的觀念, 把內部的位置轉換為外部的位置. 那麼轉址的時候要不要轉通訊埠 ( port) 呢?
如果 port 不轉的話, 那麼內部位址和外部位址就只能是一對一了, 因此 port 也是要轉比較好 這麼一來, 雖然網際網路上的 port number 是 80, 但是到了 LAN 的裡面可能就變成 8080.
3. 撥接的觀念
使用電話撥接上網的那個年代, 通常用 PPP (point-to-point protocol) 進行通訊. 到了 ADSL 的時代, 上網的訊號大概經過幾個步驟:
PC |
|
IP+data |
路由器 (加 MAC header) |
MAC |
IP+data |
路由器 (去 MAC header, 加 PPP header) |
PPP |
IP+data |
ADSL modem |
ATM cell |
|
analog |
DSLAM 局端集合式數據機 (DSL acess Multiplexer) |
ATM cell |
ATM 網路 |
ATM cell |
BAS 寬頻存取 (路由器) |
PPP |
IP+data |
網際網路 |
(MAC) |
IP+data |
如果最後的網路網路換成 ethernet, MAC 才有需要.
ADSL modem 如果兼具 router 功能, 就可以省略掉額外的路由器. 如果家裡只有一台 PC, 那麼可以用橋接式 (bridge) 的 ADSL modem.
撥接的時候, 需要做 user name 和 password 的認證, 此時 PC + TA 數據機和遠端存取伺服器 (RAS) 之間, 就是使用 HDLC + PPP 的方式, 類似專線的連接.
但 ADSL 的認證就不一樣了. 在上面的表格中, RAS 放在 ATM 網路之上, 因此要經過漫長的轉換, 最後又轉回 PPP 才能認證成功. 這個過程叫做 PPPoA (PPP over ATM).
PPPoA 如果遇到橋接式 ADSL 會有點麻煩. 因為密碼認證之後, BAS 才會把全與網址等設定訊息放進 PPP, 因為橋接式是左手進右手出, 所以 PPP 的訊息就直接到了 PC. 此時 PC 需要設定全域的網址, 而且好像得認識 ATM cell.
上述的產品的確存在, 讓 PC 用 USB 連到橋接式的 ADSL modem. 但比較普及的方法是用 PPPoE (PPP over Ethernet). 也就是把 PPP 放進 Ethernet 裡面, 再把 Ethernet 送給 ATM. 至於路由器式的 ADSL modem, PPPoE 就沒有甚麼意義了.
[note] PPP 用來認證與設定網路. 除了 PPP 之外, 設定網路可以用大家熟知的 DHCP.
4. Proxy 的觀念
Proxy 是在 user 端還是伺服器端呢?
放在 user 端的叫做 forward proxy, 用途是減少網路上的資訊量, 但是伺服器端的 cache server 就完全用不到了.
伺服器端為了增加頻寬, 有時候會用多個 cache server 來加速 user 的存取. 但是這些 cache server 的 ip address 可以相同或是不同. 如果 ip address 不同, 則 server name 會相同. 這樣 user 連上 server 的時候, 並不知道自己連上那一個 ip address. 此時會遇到的問題是, 如果 user 正在網上購物, 最後要輸入信用卡的時候, CGI (common gateway interface) 已經換到另外一個 ip address 執行, 可能就會認證失敗.
如果派出一個固定 ip address 當代表註冊到 DNS, 則應該啟用 load balance 的功能, 讓不同的 user 固定存取到最適合的一台 server. 為了避免發生中途換 server 的問題, 只要是同一個事件, 不管 server 多忙, 都不會被切換走.
此外 forward proxy 導致 user 要自己設定 proxy 的訊息, 通常我們在 browser 裡面設定的 proxy 都是 forward proxy. 比方說交大, 可能就會提供一台 proxy server, 要求同學設定到他們的 browser 裡面. 不過設定 forward proxy 這件事並不是人人都會, 為了避免出問題, 所以產生了 reserve proxy.
reserver proxy 有很多方法可以直接連到 web server, 或者說 cache server. 比方說, 它可以偷看 IP 封包, 或者要求在 http 規格中加入 host 的標頭欄位, 如此一來, reserve proxy 就知道哪些 host 可以用外部的加速.
Proxy 放在 user 端, server 端, 甚至是 ISP 端, 或是 CDSP (content delivery service provider) 端都各有利弊.
5. 防火牆的觀念
防火牆的做法可以有很多種, 最常用的一種叫做 "封包過濾".
因為 router 中紀錄的 ip-router 對應表會因日久 (其實只要幾分鐘) 被刪除的關係,假如公司不讓外面的封包進到公司來,公司的 ip 也就連不出去了.
根據 source, destination 的ip 與 port number, 大致就可以設定出防火牆的 rule. 有一個很有趣的問題是, 假如公司設立了 web 網站, 當然希望大家來瀏覽, 所以 web server 可以對外通訊. 但是如果 web server 中毒了, 我們要避免 web server 亂發 connection 要怎麼辦呢?
因為 connection 的建立, 需要在 TCP 的控制位元裡面設定 SYN, ACK 才會開始. 因此第一個動作如果來自外部, 可以視為 user 看公司的網頁. 但是第一個動作是 web server 自己發的, 就應該要攔下來. 這個是我以前沒想過的, 相當有趣.