Ch2

  • 連線模式 :
    • Client - Server
    • Peer - Peer
  • Process :
    • 在Host中運行的程式
    • 兩Process連絡差異 :
      • 在同個Host : 靠Inter-Process Communication(defined by OS)
      • 在不同Host : 靠交換messages
    • Client-Server :
      1. Client Process : 發起溝通的程式
      2. Server Process : 等待連接的程式
    • Peer-Peer : 以上兩個Processs都有
  • Socket :
    • Transport Layer Security (TLS) :
      • 提供加密的TCP連接
      • 實作於應用層

  • HTTP(Hypertext Transfer Protocol) :
    • Client-Server模型 :
      • Client : 用於請求、接收與顯示Web Objects的瀏覽器
      • Server : 發送Web Objects以回應請求
    • 使用TCPport number = 80
    • Stateless : Server不持有過去Client請求過的資訊
    • ==Non-persistent HTTP== :
      • 每發送一個東西就要開關TCP Connection一次
      • RTT : Packet從Client到Server再返回的時間
      • Non-persistent HTTP response time = 2RTT+ 檔案傳輸時間
        1. one RTT : 啟動TCP Connection
        2. one RTT : 發送Http Request
        3. 檔案傳輸時間
      • 每次TCP Connection都會花費OS
    • ==Persistent HTTP(HTTP1.1)== :
      • 一個TCP Connection可以傳輸多個檔案
      • Server開啟後就保持其狀態
      • 後續傳輸一個檔案只需花費一個RTT
    • HTTP請求方法 :
      • GET : 請求指定的頁面信息,並返回物件
      • HEAD : 類似於get請求,只不過回應訊息中只有Header
      • POST : 向指定資源提交數據以進行處理請求(例如提交表單或者上傳文件)
      • PUT : 從Client向Server傳送的數據取代指定文檔的內容
    • HTTP回應狀態碼 :
      • 200 : OK
      • 301 : Moved Permanently
      • 400 : Bad Request
      • 404 : Not Found
      • 505 : HTTP Version Not Supported
  • Cookies :
    • 使用原因 : HTTP為Stateless
    • 在第一次傳送Request訊息時,Server會回傳一個獨特的ID(aka Cookie),並在後端資料庫新增一個實體
    • 之後Client若有變更資料,只需依照Cookie的ID去資料庫存取資料
  • Web Cache(網頁快取) / Proxy Server(代理服務器) :
    • 瀏覽器將所有HTTP請求送進Proxy Server,如果物件在Cache中,則將物件返回給Client;不然就向Origin Server請求,將物件傳回給Client
    • 可同時充當Client與Server
    • 通常由ISP會安裝
    • 優點 :
      1. 減少Client Request的回應時間
      2. 減少Link上的流量
    • ==Condition GET== :
      • 當Web Cache再次收到同個Request時,Web Cache會觸發up-to-date check,向Origin Server發出一筆condition GET夾帶If-modified-since
      • 若Origin Server判斷無modified的話,則會回傳 304 not modified
      • 若Origin Server判斷有modified的話,則會回傳200 OK與更新檔
  • HTTP版本 :
    • HTTP 1.1 :
      • 一個TCP Connection會出現了多個pipelined GETs
      • Server採用FCFS,因此會出現Head-of-line/HOL Blocking (隊頭阻塞)(小物件必須等待大物件)
      • Loss Recovery : 重傳遺失的TCP封包 → 使傳輸進度停滯
    • HTTP/2 :
      • Client可以指定Server處理的優先順序
      • 將物件切成frames,並利用Scheduling frames以減輕HOL Blocking
    • HTTP/3 : 增加安全性、新增UDP中的錯誤與擁塞控制

  • Email :
    • 主要組成 :
      • User Agent :
        1. 撰寫、編輯、閱讀郵件
        2. 儲存在Serevr上的input、output messages
      • Mail Servers : 處理Outgoing信件的Queuing
      • SMTP protocol : Email Servers之間發送Emails
    • 使用TCP Connection將Email從Client(Sending Server)傳輸到Receiving Server (port number = 25)
    • HTTP vs SMTP
      • 共同點 :

        1. 都使用TCP Connection
        2. Persistent connections(維持連線暢通)
      • 相異點 :

        HTTP SMTP
        Protocol性質 Pull protocol,因為Sender想要獲取檔案而主動發起 Push protocol,因為Sender想要發送資訊給Receiver
        訊息封裝差異 一個Response訊息只能裝一個物件 一個Response訊息可以裝多個物件
    • IMAP : 提供Server上儲存訊息的檢索、刪除…等功能

  • DNS(Domain Name System) :
    • 資料庫為分散式、階層式
      • 不用集中式之原因 :
        1. 單點故障分險
        2. 流量會爆炸
        3. 距離太遠
        4. 難以維護
    • 實作於Application Layer,透過Host與Name Server間的溝通以解析Name與IP Address
    • 分類 :
      • Root Server :
        • 階層的最基層
        • 非常重要之網路功能
        • 由ICANN管理
      • Top-Level Domain (TLD) servers :
        • com、edu…
        • cn、ca、tw…
      • Authoritative DNS servers :
        • 組織自己的DNS服務器,由組織本身或服務提供商維護
      • Local DNS servers :
        • 每個ISP都有一個
        • 具有最近 Name-to-Address Translation Pairs的本地緩存(但可能已過期)
        • 類似Proxy Server,將查詢轉發到以上層次結構中
    • Query分類 :
      • Iterated query(交談式) : 我不知道這個名字,但是問這個服務器
      • Recursive query(遞迴式) : 要查詢的封包送出去問,就等待正確名稱的正確回應
    • Resource Records(RR) :
      • 格式 : (name, value, type, ttl)
      • Type A : (Hostname, IP Address , …, …)
      • Type NS : 哪個伺服器包含實際DNS記錄
      • Type CNAME : (別名, 真名, …)
      • Type MX : 處理發往Receiver網域名的Email Server
    • DNS Query和Reply訊息,都是相同的格式
    • DDoS攻擊 :
      • 攻擊Root Server
        • 迄今未成功
        • 利用流量過濾 : 由於Local DNS Server會緩存TLD Server的IP,進而讓其攻擊繞過Root Server

  • Peer-to-peer (P2P) :
    • Server無保持在線
    • 任意End Systems可以直接溝通
    • Self Scalability(自我可擴展性) : 新的Peer帶來新的服務能力與新的服務需求
    • 管理相當複雜
    • EX:文件共享(BitTorrent)、串流(KanKan)、VoIP(Skype)
    • Torrent : 交換一個文件所有Chunks的Peer Group
    • Tracker : 追蹤參加Torrent的Peers
    • Requesting chunks:
      • 會定期向每個Peer詢問他們擁有的Chunks列表
      • Rarest First : 根據每個Chunk在網路中的普遍度,優先選擇下載網路中最稀少的片段,藉此來減低發生斷頭問題的機率
    • Sending chunks (tit-for-tat) :
      • 自己將Chunks發送給當前以最高速率發送Chunks給自己的前四Peers
        • 其他Peers就被choked(不會從自己這收到Chunks)
        • 每10秒重新評估前4名
      • 每30秒將隨機選擇另一個Peer,並開始發送Chunks :
        • 為主動unchoke此Peer
        • 此Peer可能會進入前4名

  • Streaming :
    • CBR(Constant Bit Rate) : 為一致性的壓縮位元率,省效能、速度快
    • VBR(Variable Bit Rate) : 照當前影格去分析可能投入多少資源來壓縮較恰當,以最終不超過指定容量限制為主
    • Streaming : Client播放影片的前半部,而Server仍在傳輸影片的後半部
    • 連續播放限制 : 網絡延遲是可變的,因此需要Client Buffer來滿足播出要求
    • ==DASH (Dynamic Adaptive Streaming over HTTP)== :
      • Server :
        • 將影片文件分成多個Chunks
        • 儲存的每個Chunk以不同的速率編碼
        • 提供不同Chunks的URL
      • Client :
        • 定期測量Client至Server的頻寬
        • 由Client決定 :
          1. 何時請求Chunks : 以免發生Buffer Starvation或Overflow
          2. 請求哪種編碼率 : 頻寬越大,品質越好
          3. 何處請求塊 : 可以向較靠近Client或具有較大可用頻寬的URL Server請求
    • ==CDNs(Content Distribution Networks)== :
      • 在各地儲存/提供多個影片副本
      • 若使用者發出請求 :
        • 定向到附近的副本,並回送其內容
        • 如果網路路徑擁塞,則可以選擇其他副本

  • Socket Programming :
    • Socket定義 : 應用程式與Transport Protocol之間的門
    • ==UDP== :
      • Client與Server之間無連接 :
        • 傳送Data前無Handshaking
        • 每個Packet都附上IP目標Address與Port Number
      • 傳輸的Data可能會丟失或不照順序獲得
      • 提供Unreliable Transfer

        雙方在獲得對方資料時,需使用recvfrom(),進而獲知是誰送資料過來

    • ==TCP== :
      • 提供Reliable、有序Byte流Transfer
      • Client必須連接Server
      • 順序 :
        1. Server必須先建立好TCP Welcoming Socket
        2. Server建立connectionSocket;Client建立clientSocket,完成TCP connection setup
        3. Client傳輸請求,Server回應請求,Client收到資料
        4. 雙方close
          1. serverSocket為保持server開啟用
          2. connectionSocket為每新增一條連線時會被創建,該連線結束後會被close掉
          3. 雙方在獲得對方資料時,需使用recv(),因為先前已經知道對方是誰了