2016年7月18日 星期一

OSI Model L4-L1筆記

壹、前言:


最近突然發現一些對網路架構觀念不清楚的地方,複習東光老師上課內容的同時順便做一個小筆記整理一下自己的思緒,在成為自己小抄的同時希望也可以給其他人在有需要的時候的作為一個簡單參考依據。

這篇文章只會包含幾個對我個人比較容易混淆的部分,也因為自己能力尚且不足,所以並不會對OSI七層作一個全盤的介紹,只將重點主要放在傳輸層、網路層、資料鍵結層、實體層這四個部分。

由於這篇文章最初的用意是一個快速複習筆記,因此並不會對部分功能做詳細的說明,而這些部分的運作流程將在未來的其他主題中進行討論。


貳、正文


一、傳輸層 (Transport Layer)


封包名稱:Segment

主要工作:
1. 資料的切割與重組 (segmenting data and reassembling data)
2. 提供上層 (application layer in TCP/IP model) 多工的網路使用環境
>>因為有把應用層傳下來的資料切小片,因此不用擔心特定應用卡住整個頻寬
3. 確定資料流 (identifying and tracking individual communication)
>>透過port number,知道封包是哪個"應用"傳來的,確認傳到哪個"應用" 
>>不是IP位址,確定IP是網路層的工作

主要協定
1. 傳輸控制協定 (TCP, transmission control protocol)
2. 用戶資料報協定 (UDP, user datagram protocol)

TCP與UDP都支援:
1. Segmentation and Reassembly
2. Conversation multiplexing
>>來源應用與目標應用之間的資料流稱為conversation
>>由底下兩個封包表頭可以發現,兩者皆有Source Port與Destination Port

TCP封包:

UDP封包:

TCP特性:
1. 連線導向 (connection-oriented conversation)
>>傳輸資料前先進行三方交握(three-way handshake)
>>UDP為非連線導向 (connectionless)
2. 建立可靠的資料傳輸 (reliable delivery)
>>將封包編號(sequence number)
>>收到封包後給予正向回應(ACK)
>>如未收到正向回應,重送
3. 流量控制 (flow control)
>>控制window size

使用TCP的時機:
(key: TCP由傳送端決定是否重送)
1. 需要知道有無傳送成功
2. 如果沒成功會自動重送
3. 資料可以照順序 (in order) 的傳送

使用UDP的時機:
(key: UDP由接收端決定是否重送)
1. 追求速度
2. 消耗較少的資源 (low overhead)
3. 不需要回應是否收到
4. 不需要重送遺失的資料
5. 資料一但送出皆視為傳送成功

二、網路層 (Network Layer)

封包名稱:Packet
主要工作:
1. 定義網路位址與電腦位址 (addressing)
2. 幫封包找路 (routing)
>>由以上兩點可以知道,對網路層而言路由器與IP是最重要的兩項元素

主要協定:
1. 網際協定 (IP, internet protocol)
>>分為IPv4 (最常用) 與IPv6 (最新)
2. 網路控制消息協定 (ICMP, internet control message protocol)
>>隨著IP的版本分為ICMPv4與ICMPv6
3. 路由協定 (routing protocal)
>>產生路由表的協定
>>種類五花八門,隨著不同品牌或使用環境等使用不同的協定

IPv4特性:
1. 不需要為了傳封包而是先建立連線 (connectionless)
>>如果有需要事先建立連線的需求,將在傳輸層完成
>>如果有封包丟失重送的需求,將在傳輸層完成
>>不用為了保證連線在PDU (protocol data unit) 加上更多欄位,可以減少overhead
2. 不保證送到 (best effort)
>>IP沒有能力管理或恢復不見的封包
>>但是在特殊情況下,例如使用ping或tracert時,會由ICMP進行回報
3. 不需要理會訊號的載具 (media independent)
>>但是如果Router要將MTU (maximum transmission unit) 由較大MTU設備傳來的封包傳到較小MTU設備上就要將封包切片 (fragment the pocket)
>>data link layer會將MTU大小告知network layer,因此network layer可以依據這項資訊來切割封包
>>MTU: 媒介可傳送的最大PDU,e.g. 乙太網路的MTU為1500byte

IPv4表頭重點欄位:



1. Source Address/Destination Address: 顧名思義,將在這兩欄位填上來源與目的地的IP
2. Time To Live (TTL) : 表示封包最多可以經過的路由器數
>>每經過一個路由器將TTL減1,並在TTL歸0時由接收到的路由器丟棄該封包。
>>假如路由器不小心組成迴圈而封包永遠無法送達目的地,TTL可以避免封包永遠在這些路由器之間傳送,不斷浪費資源與時間。
3. Protocal: 指出此封包是使用哪一種協定,e.g. TCP, UDP, ICMP....etc
4. Type of Service: 為了保證QoS (quality of service) 所保留的欄位,目的在於控制封包優先權,優先權高的封包將由路由器優先處裡
5. (Header) Chechsum 確保這個封包是正確的,沒有損毀
>>重點:這不表示IP保證可靠的資料傳輸,可靠的資料傳輸是保證封包沒有遺失,而IP是保證資料沒有損毀

三、資料鍵結層 (Data Link Layer)

封包名稱:Frame

主要功能 (在網路卡中進行):
1. 加框 (framing)
>>讓封包在不同媒體(媒介、載具)上傳輸時不會造成損壞
2. 媒體存與控制 (MAC, media access control)
>>為了避免封包碰撞 (collision),訊號重疊造成資料損毀或是網路效能低落等問題
>>使用時要考慮到該載具是shared media還是non-shared media

在shared media中的MAC實作:
1. 乙太網路使用的CSMA/CD
>>過去在使用hub的環境下使用,但在交換器 (switch) 發明之後幾乎用不到了
2. 無線網路使用的CSMA/CA
>>CS (carrier sense):偵測媒體使用狀況
>>MA (multiple access):多點傳輸→資料透過廣播方式送出,對有線網路來說會產生碰撞,對無線網路而言可能會產生干擾
>>CD (collision detection):如果偵測到由封包碰撞產生的frequency ripple,所有設備停止傳送封包,並在隨機的時間 (random delay time ) 後重送
>>CA (collision avoidance):先偵測媒體使用狀況,如果媒體無人使用,便向無線接收器 (AP, access point) 發送RTS (require to send),當收到來自AP的CTS (clear to send) 後,便開始傳送封包,如未收到CTS就不能傳送→重點:由AP控制能否傳送封包

在non-shared media (point-to-point)中的MAC實作需要考量的點:
1. 全雙工 (full-duplex) 環境:
>>可同時進行收或送
>>雙絞線開起了全雙工的時代
2. 半雙工 (half-duplex) 環境:
>>可以進行收,也可進行送,但不可同時進行
>>過去使用的同軸電纜就是如此

影響封包長度的因素:
1. 網路環境:
>>shared media與non-shared media
2. 傳輸媒介:
>>fragile (易碎的) environment,需要控制的因素太多→表頭與表尾較長,較消耗資源,傳輸速率較低
>>protect environment,需要控制的因素較少→表頭表尾較短,較節少資源,傳輸速率較高

四、實體層 (Physical Layer)


主要功能:
1. Encoding:
>>將資料轉換為是先定義好的二進位形式
2. Signaling:
>>將數位資料 (010101) 轉換為適合不同媒介的形式
>>e.g. 無線電波
3. 定義不同的接頭標準
>>e.g. RJ-45
4. 分辨那些訊號是屬於哪一個Frame
>>透過事先定義好的二進位格式可以知道在一連串的訊號中,Frame的開頭與結尾在哪裡

參、結語


在寫這篇筆記,對我而言真的是受益良多,在編輯的過程中,加強了過去不完整的概念,同時也將新發現的一些問題順勢解決掉,並且全部想過一次後,更加強了自己的印象,但最大的願望還是希望不要再有把這份筆記拿出來看的一天。

2016年7月5日 星期二

Cassandra Tutorial - 安裝篇


壹、環境

1. 作業系統:CentOS 7
2. Cassandra版本:DataStax Distribution of Apache Cassandra 3.2
看到這邊可能很多人會想說好好的官方版本不用,幹嘛用別的商業公司開發的版本?這有兩個原因:

  1. DataStax維護的版本可以用Yun下載,不管是安裝還是維護都很方便(Apache的版本則無)
  2. 對比過DataStax官方文件Apache官方文件後,應該沒有甚麼人會想使用Apache的版本


3. Java版本:務必確認Java版本為Oracle Java 8或是 OpenJDK 8 (1.8.x) 以上版本
#java -version

貳、步驟

一、建立Cassandra的Repos設定檔
因為CentOS預設的Yum軟體庫中沒有Cassandra軟體庫(Repository)的相關資訊,因此必須先新增Cassandra的Repos設定檔
#vim /etc/yum.repos.d/datastax.repo
[datastax-ddc]  
name = DataStax Repo for Apache Cassandra 
baseurl = http://rpm.datastax.com/datastax-ddc/3.2 
enabled = 1 
gpgcheck = 0
二、安裝Cassandra
# yum install -y datastax-ddc
此時會安裝兩個檔案:datastax-ddc與datastax-ddc-tools

三、執行Cassandra
#service cassandra start

2016年7月1日 星期五

我的第一支Shell Script

前言

因為研究計畫需要,不得不面對自己長久以來一直逃避的Shell Script,但真的開始寫之後,不得了,似乎可以體會到學長以前跟返校演講時說過的一句話:「越厲害的MIS越輕鬆」這句話的涵義了。

介紹

這次計畫需要用到的功能有以下幾點
1. 刪除a0001~a0400這400個資料夾裡面的所有檔案
2. 刪除完之後在每個目錄中建立www資料夾
3. 改變權限讓該目錄用戶可以存取

程式碼

#!/bin/bash
#Introduction: This program has 3 main functions
#       1. remove all files in home directory belong to specific users
#       2. create a directory named www in each home directory
#       3. change the owner of www
#First Release: 20160628
#Last Update: 20160629 - add chown and comment
#By: NCUE IM Li-heng, Chou
dir='/home/'
for number in $(seq -f 'a%04g' 1 400)
do
        cd ${dir}${number}
        rm -rf *
        mkdir www
        chown ${number}:students www
done