Network Notes
Last Update: 2007 - 12 - 22
網路簡介
資料連結層
網路層
傳輸層
應用層
多媒體網路
網路安全
網路簡介
- 在開始將封包的第一個位元傳送到外部連結之前,必須先接收完整的封包後才能轉送
- 可以利用 pipeline 方式來傳送訊息,縮短傳輸時間
- 減少端點對端點的傳送延遲
- 訊息有錯誤時,不必全部重頭傳送,只需傳送有錯誤的封包
- 缺點:有標頭資訊(header)的額外負擔
- Datagram networks
- 根據目的端的位址來轉送封包
- Internet
- 交換器不需維護連線的狀態資訊(state information)
- 連線導向或非預接式服務
- Virtual circuit networks
- 根據虛擬線路編號來轉送封包
- X.25、Frame Relay、ATM
- 交換器需維護連線的狀態資訊(state information)
- 連線導向服務
- Processing Delay:處理檢查封包時間
- Queuing Delay:佇列等待時間
- Transmission Delay:封包傳送時間
- Propagation Delay:連線傳遞時間
資料連結層
- 訊框化(Framing):將網路層資料封裝在連結層訊框內.訊框由資料欄位和標頭欄位所組成
- 連結存取(Link Access):媒體存取控制(MAC,Media Access Control)協定指定訊框在連結上傳送所使用的規則
- 可靠的傳輸服務(Reliable delivery):通常用於高錯誤率的連結(如無線連結),在發生錯誤的連結上更正錯誤資料,而非如傳輸層重新傳送資料
- 可以避免連結的傳送節點傳輸量太大,而讓接收節點的緩衝區溢滿
- 由傳送端節點設定訊框中的錯誤偵測位元,接收端節點執行錯誤檢查
- 接收端節點不僅可以偵測訊框中的錯誤,也能更正這些錯誤
- Parity Check(同位檢查)
- 最簡單的錯誤偵測模式
- two-dimensional parity(二維同位)
- Checksum(檢查和)
- CRC Cyclic Redundancy Check(循環沉餘檢查)
- polynomial codes
- 通常用於連結層,在網路卡的硬體中實作
- channel partitioning protocols(通道分割協定)
- TDMA(分時多重存取)
- FDMA(分頻多重存取)
- CDMA(分碼多重存取)
- random access protocols(隨機存取協定)
- Slotted ALOHA:所有節點傳送需同步化
- ALOHA:所有節點傳送不需同步化
- CSMA Carrier Sense Multiple Access(載波感測多重存取):CD collision detection(碰撞偵測)、偵測到碰撞立即中止傳送
- taking-turns protocols(輪流存取協定)
- polling protocols(輪詢協定)
- 設某一節點為主要節點,循環詢問其他節點
- 避免碰撞
- 會產生輪詢延遲
- 主要節點故障整個網路即停擺
- token-passing protocols(記號傳遞協定)
- 需有 Token 才能傳送資料
- 任一節點故障整個網路即停擺
- 長度為 6 Bytes:有 2 的 48 次方個可能的 LAN address,以 16 進位表示,每組有 12 bits,如 1A-23-F9-CD-06-9B
- 燒錄在轉接卡的 ROM 中
- LAN broadcast address:FF-FF-FF-FF-FF-FF
- 負責將 IP 位址解析成 LAN 位址
- 只解析同一 LAN 節點的 IP 位址
- ARP Packet
- 負責詢問所要解析IP位址的對應LAN位址(ARP Table 沒有對應 LAN 位址資料時)
- 用 broadcast address(FF-FF-FF-FF-FF-FF)傳送
- 若欲傳送的目的端不在同一 LAN,LAN 位址通常填入該LAN的路由器介面轉接卡的 LAN 位址,再由路由器負責填入目的端的 LAN 位址或另一個 LAN 的路由器 LAN 位址
- Data Field(46 到 1500 個 Bytes)
- 載送 IP 資料段
- MTU maximum transfer unit(最大傳輸單位):IP 資料段最大不能超過 1500 個 Bytes,否則必須分割
- IP 資料段最小不能低於 46 個 Bytes,否則必須填塞到 46 個 Bytes,網路層會根據IP資料段標頭內的length field移除填塞位元
- Destination Address(6 個 Bytes)
- Source Address(6 個 Bytes)
- Type Field(2 個 Bytes)
- Cyclic Redundancy Check(4 個 Bytes)
- Preamble Field 前置位元欄位(8 個 Bytes)
- 前 7 個 Bytes 皆為 10101010
- 最後 1 個 Bytes 為 10101011
- 用來通知接收端轉接卡準備接收資料
- 如果轉接卡感測到通道是閒置的,就開始傳送訊框.如果感測到通道是忙碌的狀態,會等待直到沒有訊號能量為止,然後再開始傳送訊框
- 在傳送訊框時,轉接卡會監控是否有其他訊號能量出現!如果出現,會立刻停止傳送訊框,並送出一個 48 位元的擁擠訊號(jam signal)
- 在中止傳送後,轉接卡會進入 exponential backoff(指數退回)階段。一般來說,在該訊框經歷第 n 次碰撞後,轉接卡會從(0、1、2、3、4、5…2 的 m 次方減一)中隨機挑選出一個數值為 K 值,其中 m = min(n,10)。然後等待 K*512 個位元時間,再重新偵測通道是否閒置
- 功能跟 Repeater 類似,比 Repeater 多了網路管理功能
- 所有區域網路都屬於相同的碰撞區域
- 可連結不同區域網路
- 每個區域網路都是獨立的碰撞區域
- 有 Filtering(過濾)和 Forwarding(轉送)功能,藉由 bridge table 來達成
- 具有 self-learning 功能,能自行維護 bridge table 的資料
- 為 plug-and-play devices,不需要設定
- 常使用 Spanning Tree Protocol:避免迴圈結構的拓樸會帶來循環傳遞和倍數複製的問題
- 高效能多重介面的 Bridges(Bridges 一般 2 到 4 個介面,Switches 有數十個)
- 能以全雙工模式(full-duplex-mode)運作
- 仍無法防止 broadcast storm
- Switches 通常採用 Cut-Through Switching,routers,Bridges 採用 store-and-forward
- 這兩種只有在輸出緩衝區為空時才有差異,而且差異小到並不重要
- 802.11a:54Mbps,5~6GHz
- 802.11b:11Mbps,2.4GHz
- 802.11g:54Mbps,2.4GHz
- basic service set network(BSS):包含一個或多個無線基地台,以及一個中央基地台(base station)
- ad hoc network:幾個無線網路節點彼此群聚,沒有中央控制,也沒有連線到外部網路
- 採用 CA 不用 CD 的原因
- 具備碰撞偵測的功能之成本很高
- 即使擁有碰撞偵測的功能,傳送前沒有偵測到碰撞,還是有可能會發生碰撞,如:hidden terminal problem
- 即使擁有碰撞偵測的功能,但碰撞發生了,可能還是沒法偵測到,因為無線訊號強度會隨著距離而衰減
- 節點 A 傳送資料給節點 B,,可能節點 C 也在傳送資料給節點 B,但因為無線通道的性質,訊號被障礙物擋住或訊號衰減,節點 A 無法偵測到節點 C,因此節點 B 發生碰撞
- 傳送端發送 RTS 或資料前所等待的時間
- 如果發生碰撞,在等待 DIFS 一段時間後,也會進入類似 Ethernet 的 exponential backoff 階段
- 接收端附近的節點會收到接收端傳送的 CTS,可以避免 hidden terminal problem 以及訊號衰減的問題
- RTS/CT S都很小,即使發生碰撞,也不會持續太久,當 RTS/CTS 能正確地傳送後,接著的 Data 和 Ack 就不會產生碰撞
- 定義特殊控制用的脫序位元組,加入脫序位元組以表示後續的資料是真正的資料,而非某個被指定的值.接收端發現脫序位元組後,會移除該位元組,以重建原始資料。用來避免某個資料被誤認為旗標欄位的值,而誤判該訊框的結束位置
網路層
- Path determination:決定封包傳送的路由或路徑
- Forwarding:將封包傳到適當的輸出連結(路由器內部)
- Call setup:IP 層無此功能,但某些網路層架構(ATM),傳送前會做類似 TCP 的交握動作
- 網路層協定:定址方式,資料段格式,封包處裡原則
- 路由協定:路徑選擇
- 錯誤和資訊回報協定
- Datagram 利用 TCP 建立連結程序,且只牽涉到兩個終端主機,VC 則則靠網路層建立連結程序,且除了兩個終端主機外,也包含傳送路徑上的封包交換器
- VC 上的封包交換器需保有相關 VC 狀態資訊,Datagram 則不用
- VC 是一種連結導向的服務(connection-oriented service);IP 則為非預接式服務(connectionless service)
- global routing algorithm vs. decentralized routing algorithm(整體路由演算法 vs. 分散式路由演算法)
- global:利用網路的整體連線狀態資訊,計算出來源端到目的端的最小成本路徑,相關的演算法有 link state routing algorithm
- decentralized:沒有任何節點擁有網路的整體連線狀態資訊,經由反覆計算與相鄰節點之間的資料交換,計算出到某些目的端的最小成本路徑,相關的演算法有 distance vector algorithm
- static vs. dynamic(靜態 vs. 動態)
- static:路徑隨時間緩慢地改變,且經常人為介入
- dynamic:可以週期性地執行,或隨拓樸,連結成本等改變而間接地執行
- load-sensitive vs. load-insensitive(負載敏感 vs. 非負載敏感)
- load-sensitive:連結成本會動態地改變,以反應當時連結的擁塞程度
- load-insensitive:連結成本無法反應當時連結的擁塞程度
- Dijkstra algorithm
- 會有 Oscillations(擺動)問題
- Bellman-Ford algorithm
- 網際網路的主流演算法
- distance table、forwarding table
- 與某節點連結成本改變,或它從相鄰節點接收到更新訊息時,該節點會更新它的 distance table,如果某些最小成本資訊因此改變了,該節點必須將新的最小成本資訊告知相鄰節點
- 好消息傳得快,壞消息傳得慢,會有 count-to-infinity(計算到無限大)問題
- LS:新的連結成本必須傳送至所有節點;DV:只有新的連結成本改變最小成本路徑,才會傳遞新的連結成本至相鄰節點
- LS:節點各自計算成本路徑,維持一定的健全性;DV:不正確的最小成本路徑可能廣播到全部網路
- 階層式路由的兩個重要原因
- 擴充性:同一等級網路若主機太多會造成路由器資源負擔及增加路由計算的複雜度
- 自治管理權:某些網路有"對外"隱藏內部網路組織的需求
- intra-autonomous system routing protocol
- 同一的 autonomous system 下執行相同的路由演算法
- 如 RIP(Routing Information Protocol),OSPF(Open Shortest Path First)
- inter-autonomous system routing protocol
- 在不同的 AS 之間尋找路徑的路由演算法
- 如 BGP(Border Gateway Protocol)
- gateway routers:負責將封包從某一個 AS 傳送到另一個 AS,常同時使用 intra-AS 與 inter-AS 協定,建立轉送表項目
- 不同的 AS 之間路由常是策略導向,可以控制它與其他 AS 之間的資料流,連結成本為次要考量
- 彈性分配 classful addressing 所區分的IP位址數目,不致造成浪費 IP 位址過多
- Version number 欄位長度為 4 位元,說明 IP 協定版本
- header length 欄位長度為4位元,用來指定 IP 的標頭長度,因為有 Options 欄位,所以 IP 的標頭長度可以變動,Options 通常是空的,所以標頭長度一般為 160 位元(20 個位元組)
- Type of service(服務類型)欄位長度為 8 位元,以區別不同種類的資料段
- datagram length 欄位長度為 16 位元,代表IP資料段的總長度(標頭加上資料),單位為 Bytes
- identifier 欄位長度為 16 位元,flags 欄位長度為 3 位元,fragmentation offset 欄位長度為 13 位元,皆與 IP 資料段的分割重組有關(PS:IPv6 不允許在路由器上進行分割)
- Time-to-live 欄位長度為 8 位元,用來確保資料段不會在網路上循環傳送
- Protocol 欄位長度為 8 位元,用來表示封包使用哪一個傳輸層協定
- Header checksum(標頭檢查和)欄位長度為 16 位元,偵測 IP 資料段的標頭位元錯誤
- source and destination IP addresses 欄位長度皆為 32 位元
傳輸層
- UDP
- 不用建立連線就直接傳送資料:不會產生延遲
- 不必維持連線狀態,也不紀錄連線資訊:應用伺服器可服務較多的用戶端
- 封包標頭的資源負擔較少(每個封包有 8 位元組的 header)
- 不提供可靠的資料傳輸
- 有較佳的資料傳輸速率:串流多媒體大多採用
- TCP
- 傳送資料前需進行 Three-way handshake
- 需維持連線狀態及紀錄連線資訊
- 封包標頭的資源負擔較多(每個封包有 20 位元組的 header)
- 提供可靠的資料傳輸
- 因有 Congestion Control 機制,有時會降低資料傳輸速率
- source and destination port number 長度皆為 16 位元
- length 欄位長度為 16 位元,用來指定包含標頭的 UDP 封包長度
- checksum 欄位為 16 位元,用來提供錯誤偵測的功能
- UDP 提供錯誤偵測,並不提供錯誤回復的功能
- 傳送端送出資料封包後,在等待接收端的確認封包前,不會再傳送新的資料封包
- stop-and-wait 的網路使用率極低
- 可用管線化(pipelining)改善,但會有序號範圍和緩衝區的需求,也因此衍生兩種錯誤回復機制(Go-Back-N 與 Selective Repeat 協定)
- 採累積式確認(cumulative acknowledgements),收到序號為 n 的封包,表示接收端已收到序號小於或等於 n 的封包
- 接收端會捨棄順序不正確的封包:優化接收端的緩衝機制
- 缺點是即使接收端收到序號大於 n 的封包,若沒收到序號等於 n 的封包,傳送端仍需重新傳送序號大於 n 的封包,造成浪費.(單一封包的錯誤可能導致重新傳送大量的封包)
- 讓傳送端只重新傳送發生錯誤或遺失的封包
- 順序不正確的封包會存入接收端的緩衝區
- 要注意 Window Size 與序號範圍之間的關係(Go-Back-N 最大的 Window Size 為序號空間減一,Selective Repeat 則是序號空間的一半)
- source and destination port number 長度皆為 16 位元
- sequence number 和 acknowledgement number 欄位長度皆為 32 位元
- sequence 通常放第一個位元組串流編號,如有一封包編號為 1000~1499,則放 1000
- acknowledgement 通常放預期接收到下一個位元組串流編號,如已收到一封包編號為 1000~1499,則放 1500
- header length 欄位長度為 4 位元,用來指定 TCP 的標頭長度,因為有 Options 欄位,所以 TCP 的標頭長度可以
- flag 欄位長度為 6 位元,分為
- URG:表有緊急的資料,與 urgent data pointer 欄位配合使用
- ACK:用來指出 acknowledgement number 欄位內的數值是正確的
- PSH:表應該立即將資料送給上層
- PST:用於連線設定與中斷
- SYN:用於連線設定與中斷
- FIN:用於連線設定與中斷
- receive window 欄位長度為 16 位元,用於 Flow Control
- checksum 欄位與 urgent data pointer 欄位長度皆為 16 位元
- PSH,URG,urgent data pointer 一般都不會使用到
- 若發生 Timeout 事件,則把等待時間 Double,所以逾時間隔在每次重新傳送後會呈指數成長,算是某種的 Congestion Control
- 接收到三次重複 ACK 事件時,立即重新傳送該遺失的封包
- 採累積式確認(cumulative acknowledgements)
- TCP 實做時可選擇是否捨棄順序不正確的封包
- 混合 Go-Back-N 與 Selective Repeat 協定
- 接收端利用 receive window 欄位告知傳送端目前接收端有多少可用的緩衝空間,receive window 數值經常是變動的,傳送端需控制 "已傳送未確認" 的資料量在 receive window 數值以下
應用層
- 一個小封包由用戶端傳到伺服端,再由伺服端回應到用戶端所花的時間
- 一個完整檔案所花的時間為兩次 RTT 加上檔案傳輸時間
- 每條 TCP 連線只傳送一次請求和回應訊息,比如請求某個網頁,而這網頁包含 10 個檔案,則總共會建立 11 條 TCP 連線
- 每次物件需經歷兩次 RTT,一次 TCP 連線,一次請求和接收物件
- 每次 TCP 連線須分配 TCP 緩衝區,並紀錄一些 TCP 的變數,造成伺服器很大的負擔
- 建立 TCP 連線後,一旦閒置超過某個間隔,才會自動關閉 TCP
- Without pipelining
- 一旦 TCP 連線建立後,每個物件只需一次 RTT
- TCP 連線在等待下一個請求前,會處於閒置狀態
- With pipelining
- 一旦 TCP 連線建立後,所有物件只需一次 RTT
- GET:跟 Web Server 請求網頁資料
- POST:傳送資料至 Web Server
- HEAD:Web Server 會回應 HTTP 訊息,忽略所請求的物件,用來進行程式除錯
- PUT:上傳物件至 Web Server
- DELETE:刪除 Web Server 上的物件
- 使用兩條平行的 TCP 連線
- control connection:用來傳送控制資訊如帳號,密碼,指令等
- data connection:用來傳送檔案(屬 Nonpersistent Connections,每次傳送檔案需先建立 TCP 連線)
- HTTP
- pull protocol:向伺服器取回資訊
- 資料需為 7 位元的 ASCII 編碼格式
- SMTP
- push protocol:將檔案送至伺服器
- 資料編碼格式無限制
- SMTP 只支援 7 位元的 ASCII 格式,為了可以傳送其他格式物件的 mail,故定義出 MIME,將其他格式物件編碼為 ASCII 格式後傳送.收件者的郵件軟體會根據 MIME 提供的訊息將物件還原成原來的格式
- 提供的功能
- 主機名稱轉換成位址(Hostname-to-IP-address)
主機別名(Host aliasing)- 郵件伺服器別名(Mail Server aliasing)
- 負載分配(Load distribution):主機名稱可以對應好幾組 IP 位址,根據網路流量來給予某個 IP 位址
- 分散式資料庫的實例
- DNS 種類
- Local name Servers(區域名稱伺服器)
- Root name Servers(根名稱伺服器)
- Authoritative name Servers(管控名稱伺服器)
- 將內容複製到網路上的多台伺服器,以及讓請求主機能找到可以最快回應所需內容的伺服器
- 三大機制
- Web caching(proxy Server)
- 能減少用戶端發出請求後的回應時間
- 降低網路的整體流量
- 能快速分發內容,滿足大量使用者的需求
- CARP(Cache Array Routing Protocol):快取伺服器常用的協定,採雜湊路由法(hash routing)決定哪一台快取伺服器回應給 Browser
- content distribution networks(CDN)
- peer-to-peer file sharing
- centralized directory(集中式目錄):Napster
- decentralized directory(非集中式目錄):kaZaA
- Query Flooding:Gnutella
多媒體網路
- Delay-sensitive(延遲敏感性)
- Loss-tolerant(遺失容忍性)
- Streaming Stored Audio and Video
- Streaming Live Audio and Video
- Real-Time Interactive Audio and Video
- 當用戶端從伺服器尚未下載完全部檔案內容時,就可以開始播放前面已下載的部份內容, 亦即邊下載邊播放,常應用在音訊和視訊檔案
音訊和視訊的串流播放尚未整合到 Browser,須透過 Helper application 來播放,亦即 Media player
通常具三大功能:- Decompression(解壓縮):解壓縮音訊和視訊檔案
- Jitter removal(移除時基誤差):暫存放緩衝區,等封包都到齊再播放
- Error correction(錯誤更正):透過幾種方法來恢復遺失的資料
- 允許讓 Media player 控制媒體串流傳送的協定,類似於一般 CD 或 DVD Player 的功能如播放、暫停、快轉、倒回等
- 跟FTP一樣,屬於 out-of-band,控制資訊與媒體內容分別使用不同的連線
- Packet Loss:多媒體網路大多使用 UDP 傳送封包,封包遺失率過高會影響播放品質
- End-to-End Delay:延遲過長會嚴重妨礙多媒體的互動性
- Packet Jitter:因為網路上的延遲,造成封包到達接收端的時間順序都不一定,此現象為 Jitter,若忽略 Jitter 就播放,會讓播放內容難以理解
- Sequence number:每產生一個封包,就將序號加一
- TImestamp:將資料的產生時間,標示在封包的 Header
- Playout delay:將播放時間延後,以讓播放前能接收到大部份的封包
- FEC(Forward Error Correction向前錯誤更正):將多餘的資料加入原始的封包串流中,缺點是增加傳輸頻寬和 delay,有兩種作法
- 類似檢查和編碼作法,將一定封包數目作運算後,將所得的編碼資料加入原始的封包串流,若遺失任一個封包,接收端仍可完整重建該遺失的封包,然而若遺失封包過多,就無法完整重建
- 將較低解析度的資料加入原始的封包(高解析度的資料)串流中,若遺失某一個封包,則拿該封包的較低解析度的資料來代替播放
- Interleaving(交錯分割):傳送端在傳送資料前,會將資料重新排序,使得原本相鄰的資料單位,會在傳送串流中分開相當距離,可以減輕封包遺失的影響,維持串流播放品質,不會增加頻寬但會增加 delay
- 上述方法皆以傳送端為主,接收端則可採用 packet repetition(封包重複)和 interpolation(插補)方法來修復遺失的封包
- 用來即時互動應用的協定
- 使用 UDP 來裝 RTP 封包,位置在應用層和 UDP 的中間
- RTP Packet Header Fields
- payload type(承載資料類型):用來表示資料所使用的編碼類型
- sequence number:每傳送一個 RTP 封包,序號就加一
- timestamp
- SSRC Synchronization source identifier(同步來源端識別碼):用來識別 RTP 串流的來源端,類似 IP,由來源端隨機產生數字
- 用來傳送串流播放或接收的相關訊息(如已傳送封包數量、遺失封包數量、Packet、Jitter),協助應用程式彈性處理串流資料,常與 RTP 結合使用
- 提供透過 IP 網路,在呼叫者和被呼叫者之間建立通話的機制以及通話管理的機制屬於out-of-band
- 屬於 out-of-band
- 類似 SIP,也是即時音訊的常見標準,另外也包括視訊會議
- 除涵蓋 Internet 外,也包括如何與一般電話網路的電話進行通話
- H.323 是廣泛的標準,內容多且複雜,SIP 較簡單單純
- 封包分類讓路由器可以分辨屬於不同流量類型的封包
- 能在幾個流量中提供某種程度的隔離,讓某個流量不會受到其他不正常流量的影響
- 當流量之間提供隔離時,能夠儘可能地有效使用資源
- 流量宣告它自己所需要的服務品質需求,然後讓網路接受流量進入,或阻斷使用該網路
- 到達的封包會進行分類,並依適當類別的等待區域中排隊等候,WFQ 排程會以循環方式服務每個類別,然而會依每個類別權重的不同,處理每個類別不同數量的封包,廣泛應用在企業內部網路的路由器
- RSVP 能讓在主機上運作的應用程式可以為它們的資料流保留頻寬,提供 QoS 保證,此協定須在傳送端,接收端以及路由器中
執行,有時也稱為 signaling protocol(訊號協定),所發出的訊息為 reservation message - RSVP的兩個特性
- 提供群播樹的頻寬保留(reservations for bandwidth in multicast trees)
- 以接收端為導向(receiver-oriented)
- 兩大重點
- Reserved Resources
- Call setup
- 兩種類型
- guaranteed service(保證服務):對封包在路由器的佇列延遲提供明確的限制
- controlled-load service(控制負載服務):當網路沒有負載時,應用程式會執行的很好,當負載增加時,效能會快速降低
- 用來解決 Intserv 擴充性和彈性服務模式不足的問題
- 兩組功能元件
- Edge functions(邊界功能):packet classification(封包分類)、traffic conditioning(流量調整),將經過的封包分類並標示,指出該封包屬於何種流量類型,不同類型的流量,會在核心網路中接受不同的服務
- Core functions(核心功能):forwarding(轉送),採用 PHB(per-hop behavior)模式,依據封包的流量類型,傳送到不同的轉送點
網路安全