Internet 最大特色,不可靠。所以封包會掉、頻寬不保證。loss & delay 是怎麼發生的,要怎麼解這個問題。
怎麼設計 protocal 讓 loss 與 delay 可以被控制。
網路是一個很大的系統,為了開發設計,我們會將他分層。課本分五層,分層的目的是為了讓設計結構化。可以抽掉一層的服務,他不會影響全部。就像程式設計裡面的模組化概念。
一、網路組成的基本要素
- hosts (end-systems):上面會 run net work app
- communication link (fiber光纖、銅線、衛星):重要參數是 transition rate,表示可以用多快速度傳送,簡稱 bandwidth ( 頻寬)
- routers (路由器):決定資料的路徑,目的是將封包做轉送的動作。透過 router 與 router 間的溝通建立傳送表,永遠維持最好的路徑表
- protocal:資料互丟,彼此要看的懂,牽涉到格式。control sending and receiving msgs, ex: TCP, IP, HTTP, FTTP, PPP
- Internet network of Internets: 為了好維護與方便後續設計,他是鬆散式階層式;public Internet VS private (如: 192.168.168,透過 nat 技術讓 public IP 底下可以有很多 private ip) intranent (如,企業內網)。
- Internet standard:沒有標準各做各的,連起來一定不通。訂標準的組織有:RFC (Request for comments), 他後面接代號,代表某個文件,如果要實作某個功能可以看這個文件,但即使有標準,不同的人寫出的程式可能也不相容,所以要相容測試;IETF (Internet Engernning Task Force) 制定網路上的 standard
Internet 重要的是 core 周邊的是 edge,edge 接起來的網路叫做 access network。
二、Internet 提供哪些服務
通訊基礎建設:讓分散式應用可以實現
技術上提供這些應用
- connectionless - 在應用程式上想用這個資料,不須建立連線 ex UDP,一般運用在 query,如 DNS
- connection oriented - 通訊之前要先建立連線 ex TCP,建立連線就是希望不 loss,然後 delay 可以 control;
Internet 的兩大特色:loss 與 delay
DNS (Domain Name Server)
在網路上傳送一定用 IP address。給一個 domain name 她就幫你查對應的 ip 然後將 ip 告訴你。不用建立連線,送一個封包去收一個封包回來
三、甚麼是協定
specific messages sent specific actions taken when messages reveived or other events. (在甚麼時間點,收到甚麼東西,你要做甚麼回應
協定要定義
- format - 定義好格式、欄位雙方才看得懂
- order of messages sent - 封包的順序很重要,網路不可靠封包可能會掉,溝通的順序也很重要
- actions taken on the transmission/ receipt of a messages - 收到訊息要給予甚麼樣的回應
ex - TCP 建立連線,就是三個封包建起來,連線建起來丟 DATA,按照順序丟。資料送完,將連線結束掉,CLOSE 一個 CONNECTION 也就是連線結束、結束、結束
ex - UDP 連線建好封包丟給你,一個封包就結束,你收到封包要回應,所以是一問一答,UDP 也可以不回答,網路不保證對方有無收到。如果資料比較重要,就要在上層再加點工。
TCP 建連線
動作一 : connection request
動作二:connection response (不)同意建連線
跳過中間小細節,假設同意,連線建立完成
動作三:再要檔案名稱
動作四:送 data
Network edge
General
- Network edge - 基本上是 hosts 上面跑 application
- Network core - Router / network of networks
- access network - 讓 edge 跟 core 連接起來的,中間會經過有線、無線的 communication links,也就是所謂的 physical media (實體媒介)
Network edge
end systems hosts 上面會跑很多 application。溝通方式分為兩種
- 主從結構(client/server model) - client hosts request receive service from always-on(待機不關) server. (Client 提出需求由 server 回應)
- peer-peer model - 盡量不用 server
在這兩個 host 之間溝通,網路給我甚麼樣的服務 ?
- 建立連線(connection oriented):因為需要資料傳送。在傳送前會有 hand shaking 的動作,目的是確保連線已經建立。ex- TCP (Transmission Control Protocal),他是整個 Internet 最經典的協定
- connection less service : UDP (User Datagram Protocal)
TCP 特色 (不可靠的環境需要設計出可靠的服務)
比較複雜,因為要求可靠
- 可靠 - 資料內容要對,不能多也不能少
- 順序要對
- 封包會掉 loss - 你回答我你收到沒,沒收到我就重送。acknowledgement and retransmissions
- 流量控制 (flow control) - sender 在不知道 reveiver 對方電腦等級的情況,一股腦的丟丟丟,對方可能會爆掉,他來不及收或來不及處理。sender won't overwhelm reveiver。處理機制:sender 能送多快由 receiver 告訴他。
- congestion control - 一台電腦可以建立好幾百個連線,網路上 TCP 的連線可能是好幾百萬。router 可能消化不了同一時間很大的流量。每個 link 都有一個頻寬,有線無線光纖,當資料量大於頻寬就沒辦法馬上消化,他就放在路由器的 queue 裡面慢慢地送,進來的量越來越大,出去就越來不及,最後就爆掉,爆掉後就開始掉封包。TCP 本身要求可靠,所以不能掉封包,面對擁擠的處理機制是放慢速度,sender slow down sending rate
不能把 receiver 灌爆,不能把網路灌爆。
TCP 怎麼知道網路現在是否壅擠 ? 如果封包掉了,就代表壅擠,我就降慢速度。sender 不知道到 receiver 中間的網路到底有多快,既然不知道就做冒險,一開始送一個封包、接著送兩個封包、平均每秒速率 double (指數上升),衝到封包掉了為止。TCP 連線速度會是鋸齒狀的。
應用 - HTTP (web) / FTP (File Transfer) / Telnet / SMTP (mail)
UDP 特色 (不管對方的接收能力,通通丟)
- 不可靠的資料傳輸
- no flow control
- no congestion control
應用 - streaming media 用頻寬換品質 / DNS (把 domain name 換成 IP,問了半天都沒回來,可能封包掉了就再問一次) / 網路電話 / 多媒體
網路核心
紅色部分是 router (稱之為路由器),路由器的連接沒有一定規定,但一般都連成 mesh (網狀),因為中間可能有的 router 會掛掉,有的線會被踢掉,mesh 表示兩個節點之間至少存在兩條路,這樣會比較穩健。
所以資料到底如何經由網路送給對方 ?
- circuit switching - dedicated circuit per call,如:telephone net
- packet switching - 將大的資料檔案切成一個一個小的 packet 傳送
circuit switching
host 與 server 要溝通,我先建立一個藍色的線,這些連線經由 router 送到 host。
end-end (末端的兩端) resources reserved for call,call 就是把它連起來的意思。因為要 call 所以會經過 router 跟網路線。
每個網路線的頻寬都是有限的,如果有很多 call 可能頻寬塞爆,有的 call 就過不去。
circuit switching 的動作就是在每個 link 上面,每一段的 link 都保留頻寬給他,讓你好像有一條專屬的線路,在這條線路上面,每一個頻寬都保留一個量給他。
- link bandwith, switch (設備) capacity,call 本身要先建連線,建起來相關資源就保留給他,
- dedicated resources: no sharing
- circuit-like guaranteed performance (專線,你不用別人也不能用)
- call setup required
作法:
將網路資源(頻寬)切成小片段,pieces 分配給不同的 call,每個 call 需要的 pieces 不同,有的多有的少,但我就分配給你。但當你的 resources pieces 是閒置,其他人也不能使用。
怎麼將 bandwidth 切成小片段 ?
- frequency division (FDMA) - Bandwidth 本身可以切成不同的頻寬,任何時間都可以用這個頻寬,這個頻寬是原來帶寬的 1/4 (下圖)
- time division (TDMA) - 藍色 user 若無資料要送,因為時間切割好,所以也不能讓其他 user 做使用
不需要競爭就可以送,已經經過 reservation,只能在分配好的時段送
結論:專屬(固定)線路、專屬資源、不共享
Packet switching
我就不要固定的線路、固定的時間。我將資料切成一個一個單位。(each end-end data stream divided into packet)
- 每個封包用網路全速來送 (use full link bandwidth)
- user A B packets share network resources (對照 circuit switching 不分享)
- resource contention - 我們都沒有分配,要送的話要來搶,搶的話整個頻寬都給你
resource contention 會發生的問題
- 想送的量大於頻寬
- 擁擠 - packets queue, wait for link use
- store and forward (先存起來再看看有沒有機會來傳送,如果前面有人排,就不能插隊,要排隊) - Internet 上面每一個 router 都是如此,transmit over link and wait turn at next link
(ex)
紫色是 router 中間有一個 link,假設這個 bandwidth 是 1.5 Mbs,不同顏色封包代表不同 host 丟出來
一般的 router 對來不及消化的會先 queue 起來。封包上出現 A B 的順序並沒有固定,因為有的時候要送有的時候不送,所以在 link 上看起來就像是 statistical multiplexing。長期來看,link 上面比較不會出現空閒。
結論:這個資源大家競爭,搶到就給你用
比較
35 個 user 爆掉機率萬分之四,所以大部分在網路上是 Packet switching
一、packet switch
- bursty data - resource sharing / simpler, no call setup
- excessive congestion - packet delay (queue 太久,因為封包有時效性,到對方手上也沒用了) / loss (router 負擔太大會掉封包),所以還有其他機制要設計進來,例如提供資料可靠傳輸、congestion control 的協定
- 怎麼在不可靠的 internet 上面,要到你要的頻寬 ? (ch6,仍然沒有很好的解),一樣也需要協定的幫忙
bursty(短暫而大量,爆發性、擁擠) data,因為不是一直爆發,彼此 bursty 的時間會錯開,如果不能錯開就讓他 queue 一下。queue 有點像是 buffer (緩衝,衝上去就讓他消化掉,若 bursty 的量大到 buffer 塞不住,router 就開始掉封包了,掉就給他掉,internet 的特性 unreliable),掉的人就很雖,但沒關係你有 TCP,TCP 如果掉封包他就會識別 congestion,他就會放慢腳步,沒有掉的就繼續衝。
如果要搶頻寬,connection 就建立多一點。一個掉了還有其他的一起衝。
(ex) 封包要維持大封包,還是切成小片段 ?
狀況一、維持大封包 ( 7.5 Mbits)
假設封包在左邊,長度 L,有兩個路由、三段,要從左邊送到右邊,假設頻寬速度為 R
L / R 表示送一個封包要花幾秒,7.5 / 1.5 = 5 (送一個封包要五秒)。送封包是一次送一個 bites,第一個 bites 開始送,到最後一個送完會花五秒,每一段都要送五秒,所以總共要十五秒
同一個時間只有一個 router 在送
狀況二、切成小片段
break up the message into 5000 packets. 每一個封包現在只有 1500 bits,速度是 1.5 Mbits,所以送一個封包的時間變成 1 msec at one link
pipelining - 平行處理 each link work in parallel
同一個時間可以多個 router 送。
不是切的越小越好。為了把資料丟過去,會在前面加一些封包的頭 header。封包很大但真正的 data 很少,效率也會打折扣。
router 很多、路徑也很多,到底封包的傳送從起點到終點要走哪條路 ? (ch4 routing alagorithm),而且 internet 的路徑是隨時在變,可能 link 一斷最好的路就變成最壞的路。所以怎麼知道 link 通、不通、擁不擁擠
- router 之間平常就會定時與不定時的交換資料,交換旁邊連線的 link 資料,所以一個 router 他會知道網路長甚麼樣子,當要從一個 node 到另一個 node 他會找到最佳路線 (shortest path),最短路徑找到後會進行記憶,然後幫你送過去。選擇也是一種學問,選經過 router 數最少,但未必最快,因為可能經過很慢的 link;也可以選一條都經過光纖的。
- datagram network - 一個 data 就是一個封包,封包上面就是他的一封信。router 會建立一個大表,藉由查表知道我的封包要去哪。但表會變。
- destination address (對方的 ip),將這個交給 router
- routes may change during session
- analogy - driving, asking direction
- virtual circuit network - 希望在不固定的狀態下走固定路線,不是專用的線路,但用人工的方式貼標讓你在傳送走固定的線路。假設路本身會事先選好,封包本身加上標籤 (virtual circuit id),router 看到標籤就知道要往哪裡去了。透過貼標進行路徑選擇。因為要走固定路徑,所以一定有 call setup time,連線建好以後就知道要往哪裡走,後面的封包就根據這個路徑走。router 要維護每個 call 的 state,藍色標籤的封包進來、紅色標籤的封包進來要往哪裡去。