計算機網路_CH2
26 April 2020
三種網路模式
- server & client
- p2p
- 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
傳輸服務
- Data loss: 多媒體可以忍受一些資料遺失,但像檔案傳輸就不能容忍資料遺失
- Timing: 規範資料傳輸幾秒內要把資料傳到client的socket(單位:msec),有些如直播、遊戲需要low delay
- Throughput: 多媒體有規範每一段時間資料流入的量的最低限度,不然會lag(單位:kbits/msec)
- security: 傳統網路沒有提供加密服務,資料會被看光 SSL:一種application layer的加密方式(幫助tcp加密,簽章等等),有自己的SSL socket
TCP & UDP
TCP:
- connection oriented : client和server先建好連結才傳資料(handshake),full duplex(雙向傳資料)
- reliable transport : 送出去跟接收端
- flow control : 傳送方不會一次傳送太多資料導致接收端overwhelm,能保證接收端收到的跟傳送端傳送的東西依樣
- congestion control: 如果網路擁塞時,會放慢傳送書度(為了整體網路好,不是為個人)
- 沒有 timing,security,minimum throughput(所以會lag)
UDP:
- light weight transport Protocol
- connetcionless(no handshake)
- unreliable data transfer : 不保證接收端依定收得到資料,就算收到,也不能保證順序正確
Web and Http
- object: webpage,html,images,audio檔案都是object,藉由webserver將這些object傳給client
- TCP protocol: port 80
- client透過 tcp 跟server連接
- web client: web browser
-
Stateless : server不儲存client的資訊(但後來有cookie)
- Nonpersistent and Persistent :
- Nonpersistent : 一次connection只傳一次request和response,下次要再要求網頁時要跟web server重新建立連結
- Persistent : 一次connection可以傳多次request和response
- 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
- upload data to web :
- GET : 把傳送資料放在url一起傳過來
- POST : 資料傳進來後適用response.body接收
- PUT : 上傳檔案用post但是把儲存位置用get方式(存在url)傳送
- DELETE : 把url裡面寫的path的檔刪掉
- 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後,是否還會連線
- 傳送流程:
- client和server透過port 80建立連線
- client透過網址送出request
- HTTP server收到request去各處找Object(img,html)把他encapsulate後response
- HTTP server關閉TCP連線
- 直到client收到respons後才真的斷掉連線,把response裡面的Object擷取出來
- 假設response擷取到的object很多,那就會重複四部,因為一次只能拿一個object
Cookie :
- 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:
-
Three major component :
-
user agents: 就是user,負責修改讀寫mail
-
mail servers: a. mailbox : 郵箱(儲存進來的信件) b. message queue: queue出來的信件 c. 決定送信的地點
-
SMTP(protocol): 規範server如何送收信 client : 送信給server server :收信
-
- TCP協定,port 25
- 三步驟
- handshake(建立connection)
- 傳送資料
- 中斷連結
- 舉例:假設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內
- 格式
- header : 放TO,FROM,SUBJECT
- body : 訊息內容(ascii)
- Mail access protocol:
- POP3:
- authorization : 登入,輸入帳號密碼
- transaction : 進入收信,可以選擇刪除mail之類的
- update :當離開pop3時,會把第二步驟delete的mail真的刪除
- stateless 缺點: 資料不是存在server上,所以不能remote access
- IMAP:
- 有指令可以移動存放信件且信件都存在server上,能remote access
- 可以只讀mail的片段(如header)
- 存state(folder name,username message在哪個folder)
- 信件原本放在INBOX資料夾 使用者可自行移動
- POP3:
SMTP 和 HTTP 不同處
HTTP | SMTP |
---|---|
pull protocol(從server拿資料) | push protocol(上傳資料) |
ascii編碼 | ascii編碼 |
一次只能傳一個object | 直接把所有object放在response body |
DNS Server
port | 53 |
---|---|
package | UDP |
layer | application layer |
- Why not centralized:
- single point failure
- 不好維護
- traffic
- 很難擴充
- 流程:
- client輸入hostname時,瀏覽器把hostname取下來送給DNS client
- DNS client把結果發給DNS server,server找到對應ip發回去給DNS client
- browser可以藉由ip/port連上特定服務
- 功能:
- host alias:可以改自己的hostname名字
- load distribution:因為有些網站像google.com有很多server每台ip不同,所以輸入google.com時DNS server會回傳所以google server的ip的list
- 種類:
因為centralized不好,故分成以下架構
- Root Server:全世界13台,第一階段查詢
- TLD(Top-level-Domain) Server:處理像是.com、.tw、.org…..
- Authorative DNS:組織、ISP建的DNS但應該要跟TLD註冊,
- Local Nameserver:不算在架構裡,但ISP,像是學校、、公司都會有自己的DNS server,有點像是proxy的感覺
- 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這樣遞迴查詢直到找到為止
-
DNS Caching: 原因:query很花時間要到處找 所以cache查詢過的紀錄,可以是authorirty server或者是desired的server ip或者是TLD server ip,但是清掉,畢竟是caching
- 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處理
- 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 |
- 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就好。