08. 網路通訊

【活動一、網路中的路由與死結】

當有很多人同時使用同一個資源(例如很多車擠在道路上,或很多訊息要透過網路傳送),有可能會造成「死結」而影響過程的進行。因此,為了避免這種狀況發生,就需要協同作業。

【水果遊戲1】

1.單向

(1) 數個人圍成一個圓圈,指定其中一人當發號施令者A。開始遊戲前,先指定傳送訊息的方向為順時針或逆時針。

(2) A對下一個人B說「這是香蕉」, B回應「什麼?」,A回答「香蕉」,B回應「謝謝」。至此完成第一步驟。

(3) B對C說「這是香蕉」,C回應「什麼?」,B回問A「什麼?」,A回答「香蕉」,B回答「香蕉」,C說「謝謝」,B說「謝謝」。至此完成第二步驟。

(4) 在過程中有人犯錯,則需全部重來。

(5) 直到A再次完成「香蕉」的訊息問答後,遊戲即算完成。

(6) 思考一下,如何能讓遊戲進行得更順利。

<第一回合>

<第二回合>

<第三回合>

2. 雙向

(1) 同單向玩法,改成發號施令者A在開始時對右手邊說「這是香蕉」、對左手邊說「這是蘋果」,同時傳送兩個水果出去。

(2) 同時傳遞兩個水果時,在進行時將會遇到有一人同時要處理兩個水果的問答

(3) 直到A再次完成兩邊的問答,遊戲即算結束

(4) 思考如何能讓遊戲進行得更順利,像是哪個位置的人比較容易處理訊息,那個位置的人比較複雜且最關鍵。

【水果遊戲2】

1. 每個人擁有同樣的水果牌兩張,以及對應水果牌第一個英文字母的標籤卡一張

2. 每組至少5人,坐成一圈。

3. 指定其中一人只使用一張水果牌,其餘人使用兩張

4. 開始遊戲時,將被指定的標籤卡放在自己前面,水果牌則隨機重新分配到每個人的手上(有一個人手上只會有一張水果牌)。

5. 按照以下兩條規則傳遞手上的水果牌

(1) 一隻手只能拿一張牌

(2) 只有在旁邊的人手上空著的時候才能傳遞水果牌。(傳遞手上的哪一張牌,可以自由選擇)

6. 遊戲目標是每個人都能拿到與自己標籤對應的所有水果牌

7. 思考該如何讓遊戲可以順利的進行。

8. 讓每組人數變多,或是改變坐法,看看需要什麼不同的策略。

路由和死結是在許多網路中都會遇到的問題,像是道路系統、電話或電腦網路系統等等。工程師們往往要花上大量的時間,試圖搞清楚該如何解決這些問題,以及如何設計網路,好讓這些問題更容易被解決。

路由,擁塞和死結可以在不同的網路裡造成許多令人沮喪的問題。想想看,有沒有遇過大塞車?或是有沒有看過在小巷子裡幾台車進退不得,每台車都無法動彈的狀況?

有時,電腦會在商業活動中「當機」(像是銀行)。這個問題是因為通訊網路的「死結」所引起的。如何設計網路,讓路由的選擇更容易、更高效和盡可能避免阻塞的狀況,是許多工程師所面臨的棘手問題。

有時不止一個人想要在同一時間取得相同的資料。如果一些資料(例如某個客戶的銀行戶頭餘額)更在更新,那在更新過程中把它「鎖定」是很重要的事。如果沒有把它鎖定,別人可能也會在同一時間進行更新,那戶頭的餘額可能就會出錯。但是,如果鎖定的項目被另一個鎖定的項目所干擾,這時就可能會發生死結。

在電腦的設計中,一項最令人振奮的發展是平行計算的發明。我們可能把數百個或數千個類似個人電腦的處理器在網路中組合,就變成相當於一台功能強大的電腦。而這些電腦在平行運作時,想像一下,就好像這些電腦同極快的速度在玩水果遊戲一樣。

【活動二、網路通訊協定】

電腦通過訊息在網路網路上傳遞來彼此溝通。然而,網際網路有時卻不是很可靠,可能會遭遇到延遲甚至是遺失訊息的機會。因此,我們可以透過在這些要被傳遞的訊息中做點什麼處置,來確保訊息可能成功地被發送與接收。這些處置就被叫做「協定」

網路通訊協定遊戲

http://bk.chjh.hc.edu.tw/html5/html5_network_protocols/network_protocols.html

【基本玩法】

1. 兩人一組,一人為發送者,一人為接收者

2. 發送者會拿到一張隨機的訊息,上面寫有數個字元的英文字母(並非有意義的單字或句子)

3. 第一回合,發送者指定程式中的網路環境為「可靠網路」

(1) 按照手上的訊息,決定總共需要幾張訊息卡片(每張訊息卡片至多只能輸入5個字元)。

(2) 編輯訊息卡的內容

(3) 開始發送程序。

4. 訊息卡的傳送過程中,會通過稱為「網路機會」的路由,將決定這張訊息卡會被「順利傳送」「被迫等待」或是「被丟棄」

5. 發送者傳送完所有訊息卡後,請接收者過來抄寫最後程式接收到的訊息,並試圖拼湊出正確的結果。

6. 發送與接收者交換,進行第二回合與第三回合。重新拿取隨機的訊息,分別指定網路環境為「延遲網路」「不可靠網路」,分別再進行一次遊戲。

【進階玩法】

1. 指定程式上方「ACK signal」狀態為「ON」,再按基本玩法的流程進行遊戲。

2. ACK signal的用途:接收端在接收到訊息卡片後,會回傳一張稱為ACK的確認卡片回去,發送端在接到ACK後,才能再發送下一張訊息卡

3. 訊息卡若在傳送時進入等待區或被丟棄,因為沒有收到ACK確認,在計時一段時間後必須重新傳送一次這張訊息卡

4. ACK的傳送過程中,一樣會通過網路機會路由,若抽到「被迫等待」或是「被丟棄」,則必須重新傳送一次ACK

5. 同樣在三種不同狀態的網路環境中進行遊戲。

6. 討論ACK功能存在的意義,與該如何修正能讓過程更為順利。


在網路上資料是被分割成許多封包來傳送。但是這些封包傳輸時經過的管道不一定一直都是穩定的。個別的封包有時會受損、遺失或不照順序送達。

在「網路通訊協定遊戲」中,每張訊息卡片就被視為一個封包,而在訊息卡片中被輸入的文字就是資料。在遊戲過程中,由於網路狀況的不同,封包也許會不按順序抵達接收端。因此,我們會嘗試在每個封包中加入被稱為「標頭資訊」的內容,讓接收者能藉由安排正確的封包順序,來還原原本的訊息內容。但是,因為每個封包(訊息卡)的大小是有限制的,標頭資訊的多寡會影響每張訊息卡能被放入的資料量,所以發送者必須衡量標頭資訊與內容資訊的平衡點。

我們會發現,在開始傳送前,發送者跟接收者若能事先溝通出一個交換資料的方法,包括標頭資訊的編碼方式,與遇到突發狀況時的處理方法,這樣就能讓訊息傳遞的過程更為順利。真正的網際網路通訊協定有很多種,像是TCP、UDP等,協定本身的設計就會考慮平衡種種的因素,來建立一個可信賴且有效率的資料傳輸協定。