計算機網路_CH2

26 April 2020

三種網路模式

  1. server & client
  2. p2p
  3. hybrid client & p2p

Server and Client:

server client
static IP Dynamic IP
always host client間不會互相溝通
要一直跑 斷斷續續連接

p2p:

  • Highly scalable but hard to manage
  • 成員間彼此斷斷續續連接而且可以是Dynamic IP

Hybrid of client-server and p2p:

幾乎都是server用來查詢客戶端ip

EX1: skype:

  • centralize server: 找遠端那人的address
  • p2p:客戶端互相連接 不透過server

EX2 : Instant message:

  • chatting between two users
  • server:user register with its ip address
  • user contact to server to find ip of client

傳輸服務

  1. Data loss: 多媒體可以忍受一些資料遺失,但像檔案傳輸就不能容忍資料遺失
  2. Timing: 規範資料傳輸幾秒內要把資料傳到client的socket(單位:msec),有些如直播、遊戲需要low delay
  3. Throughput: 多媒體有規範每一段時間資料流入的量的最低限度,不然會lag(單位:kbits/msec)
  4. security: 傳統網路沒有提供加密服務,資料會被看光 SSL:一種application layer的加密方式(幫助tcp加密,簽章等等),有自己的SSL socket

TCP & UDP

TCP:

  1. connection oriented : client和server先建好連結才傳資料(handshake),full duplex(雙向傳資料)
  2. reliable transport : 送出去跟接收端
  3. flow control : 傳送方不會一次傳送太多資料導致接收端overwhelm,能保證接收端收到的跟傳送端傳送的東西依樣
  4. congestion control: 如果網路擁塞時,會放慢傳送書度(為了整體網路好,不是為個人)
  5. 沒有 timing,security,minimum throughput(所以會lag)

UDP:

  1. light weight transport Protocol
  2. connetcionless(no handshake)
  3. unreliable data transfer : 不保證接收端依定收得到資料,就算收到,也不能保證順序正確

Web and Http

  • object: webpage,html,images,audio檔案都是object,藉由webserver將這些object傳給client
  1. TCP protocol: port 80
    • client透過 tcp 跟server連接
    • web client: web browser
  2. Stateless : server不儲存client的資訊(但後來有cookie)

  3. Nonpersistent and Persistent :
    • Nonpersistent : 一次connection只傳一次request和response,下次要再要求網頁時要跟web server重新建立連結
    • Persistent : 一次connection可以傳多次request和response
  4. RTT(response time per request) :
    • Nonpersistent : 2*RTT + time to transmit file,建立connection時一次RTT,送資料時一次RTT 但是速度不會太慢,可以pipeline送出第一次request後馬上處理第二份request,不用等到接收到資料才送第二個request
    • Persistent : 2*RTT + time to transmit file,只需要request一次不用每次都重新建立connection 通常是一段時間沒傳資料會connection lost
  5. upload data to web :
    • GET : 把傳送資料放在url一起傳過來
    • POST : 資料傳進來後適用response.body接收
    • PUT : 上傳檔案用post但是把儲存位置用get方式(存在url)傳送
    • DELETE : 把url裡面寫的path的檔刪掉
  6. response code :
    • 200 : OK
    • 301 : moved permanently(object被移到新地方)
    • 400 : Bad request(server看不懂request內容)
    • 404 : Not found
    • 505 : http version not support
    • Date : 紀錄response何時給的
    • Last-Modified : 紀錄上次修改這份object時間
    • Connection: 紀錄傳完這份response後,是否還會連線
  7. 傳送流程:
    1. client和server透過port 80建立連線
    2. client透過網址送出request
    3. HTTP server收到request去各處找Object(img,html)把他encapsulate後response
    4. HTTP server關閉TCP連線
    5. 直到client收到respons後才真的斷掉連線,把response裡面的Object擷取出來
    6. 假設response擷取到的object很多,那就會重複四部,因為一次只能拿一個object

  • Web browser based : 用web browser記錄不同client
  • 用來記錄使用者資訊,使用者pc會存ID
  • 可以用來記錄使用者的喜好
  • 對初次使用者,會在http response給他一個cookie ID
  • web broweser再接收到cookie ID時會把它寫入某個檔案裡面,並記錄這個server
  • 對初次的使用者,會給他一個ID,並把ID的entry存在server端的DB(DB可能存此client何時visit,看了哪些東西)
  • 之後當client再次連線時,web browser會把cookie對應到該server的ID透過http request傳給server,server就可以去db查此使用者的資訊、習慣
  • privacy issue : server端儲存一個人的帳號密碼,假設其他使用者得到自己的cookie拿這個cookie去造訪那個網頁,很有可能就會得到使用者的資訊(一來是帳密、二來自動登入…)

Proxy Server(Web cache) :

  • 能夠response client 而不用經過原本server(分散webserver壓力)
  • client先建立好和Proxy server的tcp連線
  • 儲存web server某個時間點的副本,有人來request時就把那個副本給他
  • 若Proxy server沒有該html的副本,就會和原本webserver建立連線下載該html的副本
  • 可以減少client要求object的response time
  • 通常學術機構等等機構會有proxy server
  • 減少網路traffic(透過機構內部LAN傳送object會比到外面抓資料快很多,避免在網際網路取資料產生bottle neck的問題)

  • conditional GET : 用於更新Web cache上的資料,Web cache會送一個request包含某物件的last modified time給 web server(包含If-modified-since的header),若資料沒變過,web server送304 not modified回來,若有modified則送變更後的資料給Web Cache,這是送一種特殊的封包

  • Traffic Intensity : 每秒幾個reqeust * 每次request傳的bits數/bandwidth 即代表網路在一秒內要傳資料的時間,表示網路有多忙

FTP server:

用於傳送檔案,採用client-server model,採TCP protocol port 21用來下達指令跟連線,傳檔案時會再開其他port

control connection data connection
一般指令(username,password),put/get 真的傳檔案
port 21 port 20

SMTP server:

  1. Three major component :

    • user agents: 就是user,負責修改讀寫mail

    • mail servers: a. mailbox : 郵箱(儲存進來的信件) b. message queue: queue出來的信件 c. 決定送信的地點

    • SMTP(protocol): 規範server如何送收信 client : 送信給server server :收信

  2. TCP協定,port 25
  3. 三步驟
    1. handshake(建立connection)
    2. 傳送資料
    3. 中斷連結
  4. 舉例:假設Alice 要傳檔案給Bob 1.Alice用user agent將mail寫好上傳 2.SMTP server把mail放入message queue李 3.server發現message queue有檔案,建立與Bob SMTP server的TCP連線 4.建立好後把資料傳過去,Bob的SMTP server把mail存在mailbox內
  5. 格式
    • header : 放TO,FROM,SUBJECT
    • body : 訊息內容(ascii)
  6. Mail access protocol:
    • POP3:
      1. authorization : 登入,輸入帳號密碼
      2. transaction : 進入收信,可以選擇刪除mail之類的
      3. update :當離開pop3時,會把第二步驟delete的mail真的刪除
      4. stateless 缺點: 資料不是存在server上,所以不能remote access
    • IMAP:
      1. 有指令可以移動存放信件且信件都存在server上,能remote access
      2. 可以只讀mail的片段(如header)
      3. 存state(folder name,username message在哪個folder)
      4. 信件原本放在INBOX資料夾 使用者可自行移動

SMTP 和 HTTP 不同處

HTTP SMTP
pull protocol(從server拿資料) push protocol(上傳資料)
ascii編碼 ascii編碼
一次只能傳一個object 直接把所有object放在response body

DNS Server

port 53
package UDP
layer application layer
  1. Why not centralized:
    1. single point failure
    2. 不好維護
    3. traffic
    4. 很難擴充
  2. 流程:
    1. client輸入hostname時,瀏覽器把hostname取下來送給DNS client
    2. DNS client把結果發給DNS server,server找到對應ip發回去給DNS client
    3. browser可以藉由ip/port連上特定服務
  3. 功能:
    1. host alias:可以改自己的hostname名字
    2. load distribution:因為有些網站像google.com有很多server每台ip不同,所以輸入google.com時DNS server會回傳所以google server的ip的list
  4. 種類: 因為centralized不好,故分成以下架構
    1. Root Server:全世界13台,第一階段查詢
    2. TLD(Top-level-Domain) Server:處理像是.com、.tw、.org…..
    3. Authorative DNS:組織、ISP建的DNS但應該要跟TLD註冊,
    4. Local Nameserver:不算在架構裡,但ISP,像是學校、、公司都會有自己的DNS server,有點像是proxy的感覺
  5. Local DNS流程: 1.client向本地端DNS server發起query 2.若Local DNS看不懂他會query root server 3.root server假設看得懂tw,他會回傳list of TLD server ip 4.Local DNS收到TLD server ip 發起query問TLD server 5.假設有ntu,TLD server看得懂發送Authorirty server ip給local dns server 6.local dns Server這樣遞迴查詢直到找到為止
  6. DNS Caching: 原因:query很花時間要到處找 所以cache查詢過的紀錄,可以是authorirty server或者是desired的server ip或者是TLD server ip,但是清掉,畢竟是caching

  7. Resource Record:

DNS裡面的資料記錄
<NAME,VALUE,TYPE,TTL>

| type | INTRO | | ———- | — | | A | 記錄某個hostname對應到哪個ip | | NS | 記錄某個domain name要交由哪個Authorirty server處理 | | CNAME | 讓hostname有不同名字 | | MX | 主要是記錄hostname對應到哪個mailserver | 若某個hostname不是那個Authority server的domain,交由NS處理

  1. DNS protocol: reply 和send是同樣的format

field INTRO
identification identify query
flag query or reply,recursion available,desired,reply is authoraty?
Questions 紀錄被問的東西、type
Answer RR的response
Authority Records of other Authority
  1. Insert record into DNS: 假設今天建立新的網頁,作法是把自己的Authority server name放到TLD server裡面 (networkutopia.com, dns1.networkutopia.com, NS) (dns1.networkutopia.com, 212.212.212.1, A) 再來就是建立自己的Aauthority server並把RR設好 (a.netwrok.utopia.com,A,110.110.110.110)

P2P structure

server client model: 假設一個檔案F bits,要送給N個client,Us是server upload speed,Ds是client Download speed 總共要花 N*F/Us上傳 F/min(Ud) 下載

p2p structure: server至少上傳完整資料一次: F/Us client拿下來 F/min(Ud) 總共有NF bits要傳遞給每個人,上傳速度Ua = Us+U1+U2+U3…+Un(大家幫忙傳) NF/Ua 所花時間:max{ F/Us, F/min(Ud), NF/Ua }

結構介紹: 每個使用者加入一個torrent後可以從其他人那邊下載file chunk(256K),但下載的同時也會把自己的給別人下載

tracker: torrent裡面的結構,負責監控目前的參與者,當有人加進來torrent時,會告訴tracker

下載資料方法: 當加入torrent時,tracker自動把client分配到一組,一組內每個人都有不同的chunks,然後組員是搖動的(有人進有人出),這時他有兩個選擇: 1.要選哪個自己沒有的chunks 2.要跟誰要這個chunks 系統決定是 raerest the first,最少的那個chunks先下載,這樣chunks數目就會維持平衡

分享資料方法: 系統會判斷說,誰傳給我最多的chunk,那前四名就是VIP(unchoked)那他們就有較高的priority能夠下載我的資料,另外會選一個幸運兒(optimistically unchoked)傳給他資料,這樣才有可能讓每個人的前四名VIP換人,不然就永遠只跟自己人互傳資料了

以上分享資料放是叫做tit for tat

DHT(Distributed hash table)

就像一般DB依樣要用key來查詢value

進行方式: 假設Bob和Clock有某個chunk(idol) 那DHT就會紀錄(key,value) => (idol,Bob clock ip) 並把這兩筆記錄記錄在Dave的DHT內,當Alice要這個Chunk時就會找到Dave有做這個紀錄,然後去那兩個ip其中一個把他載下來

Identifiers: 並把每個key做hash,把這個hash直當作key

assign key to client: 先決定一個fix n並決定整數range[0:2^n-1],並把其中的整數分配給client 每個client也會有一個整數,當把上面的字串做hash當作key時,會找client整數離這個key的直最近的人要把它存下來(若key大於分配給client的整數,會做mod)

Circular DHT: 剛剛說分配時是找離key直最近的人,但是這不好找,所以用circular DHT 把人排成圓形,每個人只知道自己的前後(predeccessor,successor)的ip 但是一次只記錄自己前後假設有N個人,最差要傳N/2次才能找到key要給誰 但是紀錄太多人雖然能夠傳比較少次,但是紀錄負擔就大 因此發明了shortcut的方法 在n=4的狀況 userid range[0:16]

Peer Churn: 因為p2p network是會有人進有人出,因此要隨時監控有誰進有誰出來update整個DHT 作法: 每個人記錄自己後面兩個successor,以4而言,就是紀錄5和8,3就是紀錄4,5 假設5離開了,3,4都會意識到(因為ping以後沒回應),所以4就把他第一個successor更新成8 在問8他的第二個successor是誰。3同理更新

當有人要加入時假設是13,他一定有認識DHT上某個點,假設是1他就會不斷找,找到12和15之間時,13知道自己要插在那裡,12就更新他的successor就好。