1. 結構體系
1.1. CS結構
- 單個數據
數據中心web
1.2. P2P
1.2.1. 特性
自擴展性數據庫
1.2.2. 挑戰
- ISP友好(不對等網絡)
- 安全性
激勵用戶編程
2. 進程間通訊
2.1. message
2.2. socket
進程經過socket軟件接口向網絡發送message。socket被稱爲應用程序編程接口(API)。後端
2.3. 進程尋址
- 主機地址(IP+端口號)
主機中接收進程的標識符瀏覽器
2.4. 運輸服務
- 可靠數據傳輸
- 吞吐量:具備吞吐量需求的應用稱爲帶寬敏感的應用,反之爲彈性應用
- 定時:捨棄較長時延
安全性:運輸協議對發送的數據進行加密緩存
2.5. 傳輸層相關協議
2.5.1. TCP和UDP
2.5.1.1. TCP
- 面向鏈接,全雙工
- 可靠,無丟失和冗餘
不管TCP仍是UDP都沒有提供加密,於是產生了新的層次SSL(Secure Sockets Layer),用SSL增強TCP。安全
2.5.1.2. UDP
- 不可靠傳輸
無鏈接服務器
2.6. 應用層協議
- 交換的報文類型
- 各類報文的語法
- 字段的語義
進程發送報文的方法,報文響應的規則cookie
2.6.1. WEB和HTTP
HTTP是WEB協議的核心
無狀態網絡
2.6.1.3. 非持續鏈接
每次請求先後建立/關閉TCP鏈接。是一種並行鏈接,能夠提升效率。第一次握手請求發送一小段報文,服務器返回一個狀態(HTTP響應頭的第一行狀態碼),而後第三次握手時發送HTTP請求報文,收到後服務器開始返回資源,資源傳輸完成後,關閉TCP鏈接。非持續鏈接必須爲每個請求維護一個新的鏈接,在客戶和服務器中都須要分配TCP緩衝區和保持TCP變量,增長了Web服務器的負擔。
2.6.1.4. 持續鏈接
服務器在發送響應後保持TCP鏈接打開,相同客戶端的後續請求可以經過相同的鏈接進行傳送。若是一段時間一個鏈接沒有被使用則自動關閉。HTTP默認使用帶流水線的持續鏈接。
2.6.1.5. 結構
2.6.1.5.1. 請求報文
GET /someUri HTTP/1.1
Host:www.someHost.com
Connection:close
User-agent:Mozilla/5.0
Accept-language:zh
{
"someParam":"someValue"
}
- 請求行:請求方法,URI,HTTP版本。
- 首部行:能夠添加大量請求信息。如指明Host(這樣URI能夠是相對URI),指定是否持續鏈接,指明客戶端,指明語言等。
實體:與首部行以一個空行分割,使用GET方法時沒有實體,使用POST方法時使用實體,GET變量加在URI中。
2.6.1.6. 響應報文
和請求報文相似,包括:
- 狀態行:HTTP版本,返回值,返回信息(200 OK,301 Moved Permanently等)
- 首部行
實體
2.6.1.7. cookie
在客戶端記錄用戶的狀態。
- 響應報文中的cookie首部行。(如Cookie:JSESSIONID)
- 用戶系統中由瀏覽器管理的cookie文件。
- 請求報文中的cookie首部行。
Web站點的後端數據庫。(如Session)
2.6.1.8. web緩存
也叫代理服務器,可使用戶的全部訪問先指向Web緩存器,如有資源,則直接獲取,若無資源,由Web緩存器發起向目標的TCP鏈接,並在本地存儲獲取到的資源的副本,並向用戶發送這個資源的副本。延伸:CDN(內容分發網絡)
- 目的:高效利用局域網。
問題:數據同步問題。
2.6.1.8.1. 條件GET
HTTP針對Web緩存器數據同步問題的解決方案,即在用戶訪問時,Web緩存器發送一段沒有實體的GET請求到遠端服務器並在請求報文首部行中加入"If-Modified-Since:",其內容是上次從互聯網中獲取的響應報文首部行中"Last-Modified:"中的value。若是該值小於遠端服務器的"Last-Modified"時間,則能獲取一個304響應報文。
2.6.2. FTP
用戶向遠程主機訪問,創建一個TCP鏈接併發送驗證(口令/SSL),經過後,開啓TCP鏈接。FTP有兩個並行的TCP鏈接:
- 控制鏈接:用戶標識,口令,改變遠程目錄,存放,獲取口令。
數據鏈接:實際發送一個文件(隨文件的發送打開鏈接關閉鏈接)。
2.6.3. SMTP
比HTTP歷史悠久,SMTP通常不使用中間郵件服務器發送郵件,而是兩個郵件服務器直接創建TCP鏈接。HTTP是一個拉協議,SMTP是一個推協議。SMTP要求報文使用7比特ASCⅡ編碼,並把全部報文對象(圖片等流媒體)放在一個報文中,而HTTP對於每一個報文對象有單獨的響應報文。
2.6.3.1. SMTP報文
From:xxx@xxx
To:yyy@yyy
Subject:(可選)標題行
ASCⅡ報文體
2.6.4. 郵件訪問協議
SMTP是推協議,不能用於客戶端訪問郵件,此時須要新的協議。
客戶端->主機名->DNS服務器->ip地址->客戶端->發起TCP鏈接。
2.6.5.1. DNS層次
- 根DNS服務器
- 頂級域DNS服務器
- 權威DNS服務器
本地DNS服務器
2.6.5.2. DNS緩存
各級DNS服務器在查詢後存儲查詢到的信息。
2.6.5.3. DNS資源記錄RR
(Name,Value,Type,TTL)
Type:A,NS,CNAME,MX
2.6.5.4. DNS報文
2.6.5.5. DNS插入數據
2.6.6. P2P
2.6.6.1. 文件分發
2.6.6.1.1. BitTorrent
- 對等方
- 洪流
- 塊
P2P直播,下載
2.6.6.2. 分佈式散列表
- key:文件(副本)
value:對等方
2.6.6.2.1. 環形DHT
2.7. UDP/TCP套接字編程
2.7.1. UDP
2.7.1.3. DatagramSocket
- DatagramSocket():用於客戶端初始化。
- DatagramSocket(int portNumber):用於服務端初始化。
- send(DatagramPacket sendPacket):用於發送內容。
receive(DatagramPacket receivePacket):用於接收內容。
2.7.1.4. DatagramPacket
- DatagramPacket(byte[] context,long length,InetAddress hostName,int portNumber):一般用於send。
DatagramPacket(byte[] context,long length):一般用於receive。
2.7.2. TCP
2.7.2.1. ServerSocket
- ServerSocket(int portNumber):服務端初始化。
- accept():獲取和Server鏈接的下一個Socket對象。
close():關閉服務器。
2.7.2.2. Socket
- Socket(String host,int post):新建一個鏈接向服務端的Socket。
- getInputStream():獲取Socket的輸入流,用於讀取。
- getOutputStream():獲取Socket的輸出流,用於寫入。
close():關閉服務器。