【上課筆記】電腦網路概論 - Ch2
Ch2
- 連線模式 :
- Client - Server
- Peer - Peer
- Process :
- 在Host中運行的程式
- 兩Process連絡差異 :
- 在同個Host : 靠Inter-Process Communication(defined by OS)
- 在不同Host : 靠交換messages
- Client-Server :
- Client Process : 發起溝通的程式
- Server Process : 等待連接的程式
- Peer-Peer : 以上兩個Processs都有
- Socket :
- Transport Layer Security (TLS) :
- 提供加密的TCP連接
- 實作於應用層
- Transport Layer Security (TLS) :
- HTTP(Hypertext Transfer Protocol) :
- Client-Server模型 :
- Client : 用於請求、接收與顯示Web Objects的瀏覽器
- Server : 發送Web Objects以回應請求
- 使用TCP,port number = 80
- Stateless : Server不持有過去Client請求過的資訊
- ==Non-persistent HTTP== :
- 每發送一個東西就要開關TCP Connection一次
- RTT : Packet從Client到Server再返回的時間
- Non-persistent HTTP response time = 2RTT+ 檔案傳輸時間
- one RTT : 啟動TCP Connection
- one RTT : 發送Http Request
- 檔案傳輸時間
- 每次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
- Client-Server模型 :
- 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會安裝
- 優點 :
- 減少Client Request的回應時間
- 減少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中的錯誤與擁塞控制
- HTTP 1.1 :
- Email :
- 主要組成 :
- User Agent :
- 撰寫、編輯、閱讀郵件
- 儲存在Serevr上的input、output messages
- Mail Servers : 處理Outgoing信件的Queuing
- SMTP protocol : Email Servers之間發送Emails
- User Agent :
- 使用TCP Connection將Email從Client(Sending Server)傳輸到Receiving Server (port number = 25)
- HTTP vs SMTP
共同點 :
- 都使用TCP Connection
- 為Persistent connections(維持連線暢通)
相異點 :
HTTP SMTP Protocol性質 Pull protocol,因為Sender想要獲取檔案而主動發起 Push protocol,因為Sender想要發送資訊給Receiver 訊息封裝差異 一個Response訊息只能裝一個物件 一個Response訊息可以裝多個物件
- IMAP : 提供Server上儲存訊息的檢索、刪除…等功能
- 主要組成 :
- DNS(Domain Name System) :
- 資料庫為分散式、階層式
- 不用集中式之原因 :
- 單點故障分險
- 流量會爆炸
- 距離太遠
- 難以維護
- 不用集中式之原因 :
- 實作於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,將查詢轉發到以上層次結構中
- Root 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
- 攻擊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名
- 自己將Chunks發送給當前以最高速率發送Chunks給自己的前四Peers
- 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決定 :
- 何時請求Chunks : 以免發生Buffer Starvation或Overflow
- 請求哪種編碼率 : 頻寬越大,品質越好
- 在何處請求塊 : 可以向較靠近Client或具有較大可用頻寬的URL Server請求
- Server :
- ==CDNs(Content Distribution Networks)== :
- 在各地儲存/提供多個影片副本
- 若使用者發出請求 :
- 定向到附近的副本,並回送其內容
- 如果網路路徑擁塞,則可以選擇其他副本
- Socket Programming :
- Socket定義 : 應用程式與Transport Protocol之間的門
- ==UDP== :
- Client與Server之間無連接 :
- 傳送Data前無Handshaking
- 每個Packet都附上IP目標Address與Port Number
- 傳輸的Data可能會丟失或不照順序獲得
- 提供Unreliable Transfer
雙方在獲得對方資料時,需使用recvfrom(),進而獲知是誰送資料過來
- Client與Server之間無連接 :
- ==TCP== :
- 提供Reliable、有序Byte流Transfer
- Client必須連接Server
- 順序 :
- Server必須先建立好TCP Welcoming Socket
- Server建立
connectionSocket;Client建立clientSocket,完成TCP connection setup - Client傳輸請求,Server回應請求,Client收到資料
- 雙方close
serverSocket為保持server開啟用connectionSocket為每新增一條連線時會被創建,該連線結束後會被close掉- 雙方在獲得對方資料時,需使用recv(),因為先前已經知道對方是誰了
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Robin's Tech Blog!


