2012年11月30日 星期五

第十一週計算機網路

作業:
1.解釋3-way handshaking
三向交握 (Three-way handshake)

TCP 通訊協定是一種 connection-oriented 協定,它在實際資料傳送前,會在來源端與目的端主機以三向交握 (three-way handshake) 的方式先建立連線,所有屬於相同訊息的 TCP 封包,就利用此連線傳送,此種作法有助於資料傳輸的正確性。以下是三向交握的流程說明:
 
 
(1) 當傳送端想要與接收端連線時,同時會啟用一個大於 1023 的通訊埠作為溝通的介面,並且送出一個要求連線的 SYN 封包,此封包內帶有起始序號 (例如 100)。
(2) 接收端確認收到連線的 SYN 封包後,會回送一個 SYN+ACK 封包給傳送端,封包內則帶有回應號碼 (連線 SYN 封包的序號 + 1),以及接收端的起始序號 (例如 2200),等待傳送端的回應確認。
(3) 當傳送端收到來自接收端的回應號碼,確認之前的連線要求封包已被收到,便會再傳送一個 ACK 封包給接收端,封包內會帶有回應號碼 (SYN+ACK 封包的序號 + 1)。
 
待接收端收到帶有正確回應號碼的 ACK 封包,此連線便正式建立。在 TCP 封包內,有 8 個控制位元 (Control bits 或 Flags) 用來代表封包的主要動作:
 
Flags說    明
CWR
CWR (Congestion Window Reduced) flag 為 1 代表接到 ECE 旗標 為 1 的 TCP 封包。
ECEECE (ECN-Echo) flag 為 1 代表 TCP peer (對等體) 具備 ECN (Explicit Congestion Notification, 明確擁塞通知) 功能,同時 IP 封包中的 ECN 欄位被設定為 11。
URGURG (Urgent) flag 為 1 代表緊急封包,接收端應優先處理。
ACKACK (Acknowledgment) flag 為 1 代表此封包的 Acknowledgment Number 是有效的﹐是用來回應上一個封包。
PSHPSH (Push function) flag 為 1 代表此封包連同緩衝區的其它相關封包應立即進行傳送,而無需等待緩衝區滿了才送。
RSTRST (Reset) flag 為 1 代表馬上結束連線,無需等待終止確認手續。
SYNSYN (Synchronize) flag 為 1 代表要求雙方進行同步處理,也就是要求建立連線。
FINFIN (Finish) flag 為 1 代表資料傳送結束,等待結束回應,以便正式結束 TCP 傳送流程。
 
2.解釋ping
ping:一個電腦網路工具,用來測試特定主機能否通過IP到達。ping的運作原理是:向目標主機傳出一個ICMPecho要求封包,等待接收echo回應封包。程式會按時間和反應成功的次數,估計失去封包率(丟包率)和封包來回時間(網路時延)(Round-trip delay time)。

何謂ICMP:
網際網路控制消息協議Internet Control Message Protocol 或簡寫 ICMP)是網路協議族的核心協議之一。它用於 TCP/IP 網路中發送控制消息,提供可能發生在通信環境中的各種問題反饋,通過這些信息,令管理者可以對所發生的問題作出診斷,然後採取適當的措施解決。
ICMP [1] 依靠IP來完成它的任務,它是IP的主要部分。它與傳輸協議,如TCPUDP顯著不同:它一般不用於在兩點間傳輸數據。它通常不由網路程序直接使用,除了pingtraceroute這兩個特別的例子。

筆記:



2012年11月8日 星期四

第八週計算機網路

作業:
1:說明RS-232
RS-232 (Recommended Standard-232) 是由電子工業協會(Electronic Industries Association,EIA) 所制定的非同步傳輸(asynchronous transmission) 標準介面。

這也是許多個人電腦上的通訊介面之一,在IBM-PC 上,一般電腦 
可連接二至四個 RS-232 介面。一般又稱此介面為『序列埠』或『串列埠』(serial port),由於 RS-232 是由 EIA 所定義的,所以也常稱為 EIA-232,目前演進到第四代 RS-232D。 
通常 RS-232 介面以九個接腳 (DB-9) 或是二十五個接腳 (DB-25)的型態出現,一般個人電腦上會有兩組 RS-232 介面,分別稱為 COM1 和 COM2;此外,還可以連接 COM3 及 COM4,不過因為 COM1/COM3 共用 IRQ 4,而COM2/COM4 共用 IRQ 3,所以同時最多只能使用四個 COM ports 的其中兩個。

此介面通常用來連接數據機、序列滑鼠 (PS/2 滑鼠不佔用 COM port)、條碼機 、簡單的工業控制組件、串列埠列表機(一般印表機只支援傳輸速度較快的平行埠傳輸),但是因為序列傳輸是每次傳送一個位元,比平行埠傳輸 (一次傳送八個位元) 要慢許多,因此連接其它電腦和印表機的工作大多由平行埠來代替。

2.用筆記上的end-to-end與point-to-point的圖,利用該圖的概念找出實際例子

end-to-end :間接相連(跨網路相連)






應用:SSL/TLS
安全套接層Secure Sockets LayerSSL)是網景公司(Netscape)在推出Web瀏覽器首版的同時提出的協議。SSL採用公開密鑰技術,保證兩個應用間通信的保密性可靠性,使客戶與伺服器應用之間的通信不被攻擊者竊聽。可在伺服器和客戶機兩端同時實現支持,目前已成為網際網路上保密通訊的工業標準,現行Web瀏覽器亦普遍將HTTP和SSL相結合,從而實現安全通信。此協議和其繼任者傳輸層安全Transport Layer SecurityTLS)是為網路通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網路連接進行加密。

point-to-point:
直接相連(實體相連)







應用:P2P


群對群技術(peer-to-peer, 簡稱P2P)又稱對等網際網路技術,是一種網路新技術,依賴網路中參與者的計算能力和頻寬,而不是把依賴都聚集在較少的幾台伺服器上。請注意與point-to-point之間的區別,peer-to-peer一般譯為端對端或者群對群,指對等網中的節點;point-to-point一般譯為點對點,對應於普通網路節點。P2P網路通常用於透過Ad Hoc連線來連線節點。這類網路可以用於多種用途,各種檔案分享軟體已經得到了廣泛的使用。P2P技術也被使用在類似VoIP等即時媒體業務的資料通訊中。
純點對點網路沒有客戶端或伺服器的概念,只有平等的同級節點,同時對網路上的其它節點充當客戶端和伺服器。這種網路設計模型不同於客戶端-伺服器模型,在客戶端-伺服器模型中通訊通常來往於一個中央伺服器。


3.解釋Encapsulation
封裝(Encapsulation)是物件導向中四大特色之一,簡單來說封裝就是適度的將資訊隱藏(Information Hiding),避免外界不當使用。在抽象化的過程,善加將定義類別中的屬性跟方法封裝,有利於日後系統維護時造成的許多不必要的問題喔。

為什麼需要將資料隱藏或加以封裝?
舉一個例子:一個Person的類別中,若有一屬性為心跳,如果今天心跳沒有宣告成private(即類別獨自私有,外界不得使用),代表外界可以直接取得某人的心跳屬性,如此當我在某天跟你吵架我就直接取用你的心跳屬性特定:setHeart(0),那恭喜你,你得躺平囉!由此應該可以感受到適度進行封裝的效用了吧~

封裝手法:提供受控制的間接操作取代不受控制的直接存取。在系統中最怕的就是不受控制的狀態發生,這對日後的維護非常頭疼,邏輯錯誤在龐大的程式當中要找出來,有時還真的像是大海撈針。如何避免這種不必要的問題發生,我想適度封裝是一個不錯的解決方案喔,舉例而言:若有一個Person的類別,當中有身高、體重兩個屬性,若不將他們宣告成private,那外部類別可以直接取得並設定如下,試想身高設定成-100是什麼樣的狀況又是否合理?但只要你允許外面存取,就無法保證外界是否會對你的屬性做此類愚蠢的設定。

身高 = -100;

針對上述該如何處理呢?建議作法如下:

        private 身高;

        public boolean set身高(int h) {

          if(h<0) return false;

          else 身高 = h;
        }

我們可以藉由將身高封裝,並提供一個外部的設定管道,然而此管道是可受控制的,如此必可確保身高的設定不會有不合邏輯的情況發生。

封裝最主要的兩個優勢:
避免不必要的資料存取現象發生。利用封裝可以適度的將資料進行適度資訊隱藏。如此避免不必要的存取,進而發生問題。
適度將製作細節封裝可以降低ripple effect(漣波效益),避免日後修改一問題所帶來的連帶效應過大。如此在日後可增加系統的可擴充性、易維護性。對維修工程師將是一大福音喔~


筆記: