自頂向下方法學習筆記:應用層

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等)
  • 首部行
  • 實體

    在客戶端記錄用戶的狀態。
  • 響應報文中的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是推協議,不能用於客戶端訪問郵件,此時須要新的協議。

  • POP3:極爲簡單,三階段工做:特許,事務處理,更新
  • IMAP:將報文與文件夾聯繫,容許文件組命令
  • HTTP:略

    2.6.5. DNS

    主機名轉爲IP地址的服務。一般由其餘應用協議所使用。

客戶端->主機名->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():關閉服務器。

相關文章
相關標籤/搜索