第2 ç« æç¨å±¤.pdf
第2 ç« æç¨å±¤.pdf
第2 ç« æç¨å±¤.pdf
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 1
第 二 章 : 應 用 層我 們 的 目 標 : 網 路 應 用 協 定 的 概 念 及實 作 傳 輸 層 服 務 模 型 用 戶 端 – 伺 服 端 模式 對 等 式 架 構 藉 著 驗 證 常 用 的 應 用 層協 定 來 學 習 協 定 HTTP FTP SMTP / POP3 / IMAP DNS 撰 寫 網 際 網 路 應 用 程 式 socket API2: Application Layer 2
一 些 網 路 應 用 程 式 電 子 郵 件 Web 即 時 訊 息 Remote login 對 等 式 檔 案 分 享 多 使 用 者 網 路 遊 戲 串 流 式 儲 存 視 訊 片 段 網 際 網 路 電 話 即 時 視 訊 會 議 大 量 平 行 計 算2: Application Layer 3
產 生 一 個 網 路 應 用 程 式撰 寫 一 個 程 式 在 不 同 的 終 端 系 統 上 執 行 且 透 過 網 路 通 訊 e.g., Web: Web 伺 服 器 軟 體與 瀏 覽 器 軟 體 通 訊為 網 路 核 心 裝 置 撰 寫 小 軟 體 網 路 核 心 裝 置 不 執 行 使 用 者應 用 程 式 碼 終 端 系 統 的 應 用 程 式 允 許 快速 應 用 的 建 置 與 傳 遞應 用 層傳 輸 層網 路 層連 結 層實 體 層應 用 層傳 輸 層網 路 層連 結 層實 體 層應 用 層傳 輸 層網 路 層連 結 層實 體 層2: Application Layer 4
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 5
應 用 程 式 架 構 主 從 式 架 構 對 等 式 架 構 (P2P) 主 從 式 和 對 等 式 二 者 混 合 式 的 架 構2: Application Layer 6
主 從 式 架 構伺 服 器 : 隨 時 服 務 固 定 IP 位 址 伺 服 器 農 場 for scaling用 戶 端 : 與 伺 服 器 通 訊 也 許 是 間 斷 地 連 結 也 許 有 動 態 IP 位 址 不 會 直 接 彼 此 通 訊2: Application Layer 7
純 對 等 式 架 構 沒 有 隨 時 服 務 的 伺 服 器 任 意 的 終 端 系 統 直 接 通 訊 對 等 點 間 斷 地 連 結 和 更 換IP 位 址 例 如 : Gnutella很 高 的 擴 張 性但 是 難 以 管 理2: Application Layer 8
主 從 式 和 對 等 式 二 者 混 合 式 的 架 構Napster 點 對 點 的 檔 案 傳 輸 中 央 式 的 檔 案 搜 尋 :即 時 訊 息• 對 等 點 在 中 央 伺 服 器 註 冊 內 容• 對 等 點 向 同 一 個 中 央 伺 服 器 查 詢 以 找 出 內 容 兩 個 使 用 者 的 交 談 是 對 等 式 的 存 在 的 偵 測 / 尋 找 是 中 央 式 的 :• 當 使 用 者 上 線 時 , 會 將 它 的 IP 位 址 跟 中 央 伺 服 器 註 冊• 使 用 者 與 中 央 伺 服 器 連 繫 以 取 得 好 友 的 IP 位 址2: Application Layer 9
行 程 通 訊行 程 : 在 主 機 內 執 行 的 程 式 在 同 一 個 主 機 中 , 兩 個 行程 以 行 程 內 通 訊 機 制 來 互相 通 訊 ( 被 作 業 系 統 管 制 ) 在 不 同 的 主 機 間 , 行 程 透過 交 換 訊 息 來 通 訊用 戶 端 行 程 : 初 始 產 生 通 訊的 行 程伺 服 端 行 程 : 等 待 被 連 接 的行 程 注 意 : 在 對 等 式 架 構 中 ,應 用 程 式 擁 有 用 戶 端 行 程以 及 伺 服 端 行 程2: Application Layer 10
Sockets 行 程 傳 送 / 接 收 訊 息 給 / 從它 的 socket主 機 或伺 服 器主 機 或伺 服 器 socket 好 比 是 「 門 」 傳 送 端 行 程 將 訊 息 推 出 它 的門行 程socket由 應 用 程 式開 發 者 控 制行 程socket 傳 送 端 行 程 依 靠 門 另 一 端 的運 輸 架 構 , 將 訊 息 帶 到 接 收端 行 程 的 socket擁 有 緩 衝區 和 各 種變 數 的 TCPInternet擁 有 緩 衝區 和 各 種變 數 的 TCP由 作 業系 統 控 制 API: (1) 選 擇 傳 輸 協 定 ; (2) 修 改 少 數 參 數 的 能 力 ( 後 面 會詳 細 討 論 )2: Application Layer 11
行 程 定 址 為 了 讓 行 程 接 收 訊 息 , 它必 需 有 一 個 識 別 碼 一 台 主 機 有 一 個 唯 一 的32 位 元 IP 位 址 問 : 在 行 程 執 行 的 主 機 上,IP 位 址 足 夠 用 來 識 別 行程 嗎 ? 答 : 不 行 , 可 能 有 許 多 行程 在 同 一 台 主 機 上 執 行 識 別 碼 包 含 了 IP 位 址 以及 埠 號 , 後 者 屬 於 主 機上 的 行 程 埠 號 的 範 例 : HTTP 伺 服 器 : 80 Mail 伺 服 器 : 25 還 有 更 多 會 在 後 面 探 討2: Application Layer 12
應 用 層 協 定 的 定 義 所 交 換 訊 息 的 類 型 , 例 如請 求 訊 息 和 回 應 訊 息 各 種 訊 息 類 型 的 語 法 , 例如 訊 息 中 的 欄 位 以 及 如 何描 述 這 些 欄 位 。 欄 位 的 語 意 , 意 指 欄 位 內的 資 訊 所 代 表 的 意 義 。 決 定 行 程 何 時 傳 送 訊 息 和回 應 訊 息 , 以 及 如 何 傳 送訊 息 和 回 應 訊 息 的 規 則 。公 眾 領 域 的 協 定 : 定 義 在 RFC 中 允 許 可 互 通 性 e.g., HTTP, SMTP私 有 的 協 定 : e.g., KaZaA2: Application Layer 13
應 用 程 式 需 要 哪 些 傳 輸 服 務 ?資 料 遺 失 某 些 應 用 程 式 ( 例 如 : 語 音 )可 以 忍 受 一 些 遺 失 其 它 的 應 用 程 式 ( 例 如 : 檔案 傳 輸 , telnet) 要 求 100%可 靠 的 資 料 傳 輸時 序 某 些 應 用 程 式 ( 例 如 : 網際 網 路 電 話 , 互 動 遊 戲 )需 要 低 的 延 遲 以 確 保 效能頻 寬 某 些 應 用 程 式 ( 例 如 : 多媒 體 ) 有 最 小 頻 寬 的 需 求以 確 保 效 能 其 它 的 應 用 程 式 ( 彈 性 使用 的 應 用 程 式 ) 使 用 它 們可 以 取 得 的 任 何 頻 寬2: Application Layer 14
常 見 應 用 程 式 的 傳 輸 服 務 需 求應 用 程 式資 料 遺 失頻 寬對 時 序 的 敏 感 性檔 案 傳 輸電 子 郵 件Web 文 件即 時 影 音預 儲 影 音互 動 遊 戲即 時 訊 息無 遺 失無 遺 失無 遺 失可 容 忍 遺 失可 容 忍 遺 失可 容 忍 遺 失無 遺 失彈 性 使 用彈 性 使 用彈 性 使 用音 訊 : 5kbps-1Mbps視 訊 :10kbps-5Mbps同 上幾 個 kbps 以 上彈 性 使 用無無無有 , 數 百 毫 秒有 , 幾 秒 鐘有 , 數 百 毫 秒可 有 可 無2: Application Layer 15
網 際 網 路 傳 輸 層 協 定 的 服 務TCP 服 務 : 連 線 導 向 服 務 : 在 用 戶 端 和 伺 服端 行 程 之 間 需 要 準 備 設 定 可 靠 的 傳 輸 服 務 在 傳 送 端 和 接收 端 行 程 之 間 流 量 控 制 : 傳 送 端 不 會 超 過 接 收端 壅 塞 控 制 : 當 超 過 負 荷 時 , 將 傳送 端 減 速 沒 有 提 供 : 時 序 , 最 小 頻 寬 的 保證UDP 服 務 : 傳 送 端 和 接 收 端 行 程 之間 不 可 靠 的 資 料 傳 輸 不 提 供 : 連 接 設 定 , 可 靠性 , 流 量 控 制 , 時 序 , 或頻 寬 保 證Q: 為 什 麼 困 擾 ? 為 什 麼會 有 UDP ?2: Application Layer 16
網 際 網 路 應 用 : 應 用 程 式 , 傳 輸 協 定網 路 應 用電 子 郵 件遠 端 終 端 機 存 取Web檔 案 傳 輸遠 端 檔 案 伺 服 器網 際 網 路 電 話應 用 層 協 定SMTP [RFC 2821]Telnet [RFC 854]HTTP [RFC 2616]FTP [RFC 959]proprietary( 例 如 RealNetworks)通 常 是 私 有 協 定( 例 如 Vonage,Dialpad)底 層 傳 輸 協 定TCPTCPTCPTCPTCP 或 UDP一 般 是 UDP2: Application Layer 17
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 應 用 架 構 應 用 需 求 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 18
Web 和 HTTP首 先 是 一 些 述 語 網 頁 由 物 件 所 組 成 物 件 可 能 是 HTML 檔 案 , JPEG 影 像 , Java applet, 聲音 檔 案 ,… 網 頁 由 基 本 的 HTML 檔 案 和 幾 個 參 考 物 件 所 組 成 每 個 物 件 由 一 個 URL 來 定 址 範 例 URL:www.someschool.edu/someDept/pic.gif主 機 名 稱路 徑 名 稱2: Application Layer 19
HTTP 綜 觀HTTP: 超 文 件 傳 輸 協 定(hypertext transferprotocol) Web 的 應 用 層 協 定 用 戶 端 / 伺 服 端 模 型 用 戶 端 : 瀏 覽 器 , 用 來 請求 、 接 收 及 「 顯 示 」Web物 件 伺 服 端 : Web 伺 服 器 , 依請 求 回 應 並 傳 送 物 件 HTTP 1.0: RFC 1945 HTTP 1.1: RFC 2068執 行 Explore的 電 腦執 行 Navigator的 Mac 電 腦HTTP 請 求HTTP 回 應HTTP 請 求HTTP 回 應執 行 Apache 的Web 伺 服 器2: Application Layer 20
HTTP 綜 觀 ( 續 )使 用 TCP: 用 戶 端 先 建 立 與 伺 服 端 的 TCP連 線 ( 產 生 socket), port 80 伺 服 端 接 受 來 自 用 戶 端 的 TCP連 線 HTTP 訊 息 ( 應 用 層 協 定 訊 息 )在 瀏 覽 器 (HTTP 用 戶 端 ) 和Web 伺 服 器 (HTTP 伺 服 端 )之 間 交 換 TCP 連 線 結 束HTTP 是 “ 無 狀 態 的 ” 伺 服 端 不 會 儲 存 用 戶 端過 去 的 請 求 資 訊離 題 話能 儲 存 “ 狀 態 ” 的 協 定 是 複 雜 的 ! 過 去 的 歷 史 ( 狀 態 ) 必 需 被 儲存 假 如 伺 服 端 / 用 戶 端 當 機 , 他們 的 「 狀 態 」 資 訊 可 能 會 不一 致 , 必 需 再 調 整 使 它 們 一致2: Application Layer 21
HTTP 連 線非 永 久 性 HTTP 一 個 TCP 連 線 上 最 多 傳送 一 個 物 件 HTTP/1.0 使 用 非 永 久 性HTTP永 久 性 HTTP 在 客 戶 端 和 伺 服 端 之 間的 單 一 TCP 連 線 上 , 可以 傳 送 多 個 物 件 HTTP/1.1 預 設 使 用 永 久性 連 線2: Application Layer 22
非 永 久 性 HTTP假 設 使 用 者 輸 入 URLwww.someSchool.edu/someDepartment/home.index( 包 含 文 字 , 以 及 10 個jpeg 影 像 的 參 考 )時 間1a. HTTP 用 戶 端 利 用 埠 號 80 建 立 與www.someSchool.edu 伺 服 器 的TCP 連 線 。2. HTTP 用 戶 端 透 過 TCP 連 線 的socket, 傳 送 一 個 HTTP 請 求訊 息 給 伺 服 器 。 這 個 訊 息 指出 用 互 端 需 要 物 件/someDepartment/home.index。1b. 位 於 www.someSchool.edu 的HTTP 伺 服 器 主 機 等 待 埠 號 80 的TCP 連 線 。「 接 受 」 連 線 並 通 知用 戶 端 。3. HTTP 伺 服 器 收 到 請 求 訊 息 ,產 生 回 應 訊 息 , 內 含 所 請 求 的物 件 , 並 將 此 訊 息 送 到 它 的socket2: Application Layer 23
非 永 久 性 HTTP ( 續 )4. HTTP 伺 服 器 關 閉 TCP 連 線 。時 間5. HTTP 用 戶 端 收 到 回 應 訊 息 ,其 中 包 含 html 檔 , 顯 示 html。 解 析 html 檔 , 找 到 10 個參 考 的 jpeg 物 件 。6. 對 10 個 jpeg 物 件 , 每 個 都 重 複步 驟 1-5。2: Application Layer 24
回 應 時 間 模 型RRT 的 定 義 : 一 個 小 封 包 由用 戶 端 傳 送 到 伺 服 端 , 然後 再 回 來 所 經 歷 的 時 間 。回 應 時 間 : 一 個 RTT: 初 始 化 TCP 連線 一 個 RTT:HTTP 請 求 以及 回 傳 的 HTTP 回 應 訊 息 的前 幾 個 位 元 組 檔 案 傳 輸 時 間總 計 = 2RTT+ 傳 輸 時 間建 立 TCP連 線RTT請 求RTT接 收 到檔 案時 間時 間傳 送 檔 案所 耗 費的 時 間2: Application Layer 25
永 久 性 HTTP非 永 久 性 HTTP 的 問 題 : 每 個 物 件 都 需 要 2 個 RTT 每 個 TCP 連 線 都 造 成 OS 的 額外 負 擔 瀏 覽 器 通 常 會 開 啟 平 行 的 TCP連 線 以 取 得 參 考 物 件永 久 性 HTTP 在 傳 送 回 應 之 後 , 伺 服 器 會 持續 保 留 該 條 連 線 在 相 同 的 用 戶 端 / 伺 服 端 之 間, 後 續 的 HTTP 訊 息 會 經 由 此開 啟 的 連 線 傳 送無 管 線 的 永 久 性 : 只 有 在 接 收 到 前 一 個 回 應 後, 用 戶 端 才 會 發 出 新 的 訊 息 每 個 參 考 物 件 需 要 一 個 RTT管 線 化 的 永 久 性 : HTTP/1.1 的 預 設 模 式 當 用 戶 端 遇 到 一 個 參 考 物 件時 , 會 立 即 傳 送 出 請 求 所 有 的 參 考 物 件 可 能 只 需 要一 次 RTT2: Application Layer 26
HTTP 請 求 訊 息 兩 種 HTTP 訊 息 : 請 求 , 回 應 HTTP 請 求 訊 息 : ASCII ( 人 類 可 閱 讀 的 格 式 )請 求 列(GET, POST,HEAD 命 令 )歸 位 ,換 行表 示 訊 息 的 尾 端標 頭 列GET /somedir/page.html HTTP/1.1Host: www.someschool.eduUser-agent: Mozilla/4.0Connection: closeAccept-language:fr(extra carriage return, line feed)2: Application Layer 27
HTTP 請 求 訊 息 : 一 般 格 式2: Application Layer 28
上 傳 表 單 的 輸 入Post 方 法 : 網 頁 通 常 包 含 表 單 的 輸入 使 用 資 料 主 體 將 輸 入 上傳 到 伺 服 器URL 方 法 : 使 用 GET 方 法 使 用 請 求 列 的 URL 欄 位將 輸 入 上 傳 :www.somesite.com/animalsearch?monkeys&banana2: Application Layer 29
方 法 的 類 型HTTP/1.0 GET POST HEAD 請 伺 服 器 忽 略 所 請 求 的 物件HTTP/1.1 GET, POST, HEAD PUT 在 資 料 主 體 中 上 傳 檔 案 到URL 欄 所 指 定 的 目 錄 DELETE 刪 除 URL 欄 所 指 定 的 檔 案2: Application Layer 30
HTTP 回 應 訊 息狀 態 列( 協 定狀 態 碼狀 態 訊 息 )資 料 , 例 如 ,請 求 的HTML 檔 案標 頭 列HTTP/1.1 200 OKConnection closeDate: Thu, 06 Aug 1998 12:00:15 GMTServer: Apache/1.3.0 (Unix)Last-Modified: Mon, 22 Jun 1998 …...Content-Length: 6821Content-Type: text/htmldata data data data data ...2: Application Layer 31
HTTP 回 應 狀 態 碼伺 服 端 -> 用 戶 端 回 應 訊 息 的 第 一 行幾 個 狀 態 碼 的 例 子 :200 OK 請 求 成 功 , 請 求 的 物 件 包 含 在 此 訊 息 的 後 方 。301 Moved Permanently 請 求 的 物 件 已 經 搬 移 ; 新 的 位 置 指 定 在 此 訊 息 的 後 方(Location:)。400 Bad Request 伺 服 器 無 法 了 解 請 求 訊 息404 Not Found 請 求 的 文 件 不 存 在 於 該 伺 服 器505 HTTP Version Not Supported2: Application Layer 32
你 可 以 自 己 試 驗 HTTP ( 用 戶 端 )1. Telnet 登 入 你 喜 歡 的 Web 伺 服 器 :telnet cis.poly.edu 80在 cis.poly.edu 開 啟 埠 號 80 的 TCP 連 線( 預 設 的 HTTP 伺 服 器 埠 號 )輸 入 任 何 訊 息 傳 送 到 cis.poly.edu 的 埠 號 802. 輸 入 一 個 GET HTTP 請 求 :GET /~ross/ HTTP/1.1Host: cis.poly.edu藉 著 輸 入 這 個 訊 息 ( 按 下 歸 位 鍵 兩 次 )你 傳 送 了 這 個 最 小 的 ( 但 卻 是 完 整 的 )GET 請 求 到 HTTP 伺 服 器3. 觀 察 HTTP 伺 服 器 傳 送 的 回 應 訊 息 !2: Application Layer 33
讓 我 們 觀 察 HTTP 的 運 作 telnet 範 例 Ethereal 範 例2: Application Layer 34
使 用 者 - 伺 服 器 狀 態 : cookies許 多 主 要 的 網 站 都 使 用cookies四 種 元 件 :1) HTTP 回 應 訊 息 的 cookie標 頭 列2) HTTP 請 求 訊 息 的 cookie標 頭 列3) 保 留 於 使 用 者 終 端 系 統 上的 一 份 cookie 檔 案 , 並 且由 使 用 者 瀏 覽 器 管 理4) Web 網 站 的 後 端 資 料 庫(back-end database)範 例 : Susan 都 是 使 用 同 一 台 PC來 存 取 網 際 網 路 她 第 一 次 拜 訪 某 個 電 子 商務 網 站 當 初 始 的 HTTP 請 求 到 達網 站 時 , 網 站 會 產 生 一 個唯 一 的 識 別 號 碼 , 並 在 它的 後 端 資 料 庫 上 為 此 識 別碼 建 立 一 筆 紀 錄2: Application Layer 35
Cookies: 儲 存 “ 狀 態 ”( 續 )Cookie 檔 案ebay: 8734客 戶 端一 般 http 請 求 訊 息一 般 http 回 應 +Set-cookie: 1678伺 服 端伺 服 器 為 使 用 者建 立 ID 1678後 端 資 料 庫的 紀 錄Cookie 檔 案amazon: 1678ebay: 8734一 週 後 :一 般 http 請 求 訊 息cookie: 1678一 般 http 回 應 訊 息Cookie 特 定的 動 作存 取存 取Cookie 檔 案amazon: 1678ebay: 8734一 般 http 請 求 訊 息cookie: 1678一 般 http 回 應 訊 息Cookie 特 定的 動 作2: Application Layer 36
Cookies ( 續 )cookies 能 帶 來 什 麼 : 授 權 購 物 車 推 薦 使 用 者 會 談 狀 態 (Webe-mail)Cookies 以 及 隱 私 :離 題 話 cookies 允 許 網 站 知 道你 的 許 多 事 情 你 可 能 將 名 字 和 電 子 郵件 提 供 給 網 站 搜 尋 引 擎 使 用 重 新 導 向以 及 cookies 甚 至 學 習 到更 多 廣 告 公 司 越 過 網 站 取 得資 訊2: Application Layer 37
Web 快 取 ( 代 理 伺 服 器 )目 標 : 滿 足 用 戶 端 的 請 求 , 且 不 牽 涉 到 來 源 伺 服 器 使 用 者 設 定 瀏 覽 器 :Web 經 由 快 取 伺 服 器存 取 瀏 覽 器 傳 送 所 有 的HTTP 請 求 到 快 取 伺服 器 在 快 取 伺 服 器 中 的 物 件 :快 取 伺 服 器 會 回 傳 物 件 否 則 快 取 伺 服 器 會 向 來源 伺 服 器 請 求 物 件 , 接著 將 物 件 回 傳 給 用 戶 端用 戶 端用 戶 端HTTP 請 求HTTP 回 應HTTP 請 求HTTP 回 應代 理伺 服 器HTTP 請 求HTTP 回 應來 源伺 服 器來 源伺 服 器2: Application Layer 38
更 多 關 於 Web 快 取 快 取 伺 服 器 同 時 扮 演 了用 戶 端 以 及 伺 服 器 的 角色 通 常 ISP 會 安 裝 快 取 伺 服器 ( 大 學 , 公 司 , 家 用 型ISP)為 什 麼 要 使 用 Web 快 取 ? 降 低 用 戶 端 發 出 請 求 後 的 回應 時 間 減 少 機 構 連 結 到 網 際 網 路 的流 量 具 有 高 密 度 快 取 伺 服 器 的 網際 網 路 可 使 得 「 差 的 」 節 目提 供 者 能 夠 有 效 率 地 提 供 節目 ( 而 P2P 分 享 也 是 一 樣 )2: Application Layer 39
快 取 的 範 例假 設 平 均 物 件 大 小 = 100,000 個 位 元 機 構 的 瀏 覽 器 到 來 源 伺 服 器 的 平均 請 求 速 率 = 15/sec 從 機 構 的 路 由 器 到 任 何 來 源 伺 服器 再 回 來 的 延 遲 時 間 = 2 sec結 果 LAN 的 利 用 率 = 15% 存 取 連 結 的 利 用 率 = 100% 全 部 的 延 遲 = 網 際 網 路 延 遲 + 存 取延 遲 + LAN 延 遲= 2 秒 + 幾 分 鐘 + 幾 毫 秒機 構 網 路公 眾 網 際 網 路1.5 Mbps存 取 連 結來 源 伺 服 器10 Mbps LAN機 構 快 取2: Application Layer 40
快 取 的 範 例 ( 續 )可 能 的 解 決 方 案 增 加 存 取 連 結 的 頻 寬 , 比 如 說10 Mbps結 果 LAN 的 利 用 率 = 15% 存 取 連 結 的 利 用 率 = 15% 全 部 的 延 遲 = 網 際 網 路 延 遲 + 存 取 延遲 + LAN 延 遲= 2 秒 + 數 毫 秒 + 數 毫 秒 升 級 通 常 是 相 當 昂 貴 的機 構 網 路公 眾 網 路10 Mbps存 取 連 結來 源 伺 服 器10 Mbps LAN機 構 快 取2: Application Layer 41
快 取 的 範 例 ( 續 )安 裝 快 取 伺 服 器 假 設 命 中 率 為 0.4結 果 40% 的 請 求 會 被 立 即 滿 足 60% 的 請 求 被 來 源 伺 服 器 滿 足 存 取 連 結 的 利 用 率 減 為 to60%, 變 成 幾 乎 可 以 忽 略 的 延遲 ( 比 如 說 10 毫 秒 ) 總 計 的 平 均 延 遲 = 網 際 網 路 延遲 + 存 取 延 遲 + LAN 延 遲 =.6*(2.01) 秒 + .4* 毫 秒 < 1.4秒機 構 網 路公 眾 網 際 網 路1.5 Mbps存 取 連 結來 源 伺 服 器10 Mbps LAN機 構 快 取2: Application Layer 42
條 件 式 的 GET 目 標 : 假 如 快 取 伺 服 器 中 有 最 新的 快 取 版 本 , 則 不 傳 送 物 件 快 取 : 在 HTTP 請 求 訊 息 中 指 出快 取 複 本 的 日 期If-modified-since: 伺 服 器 : 假 如 快 取 複 本 是 最 新 的, 則 回 應 中 不 包 含 物 件HTTP/1.0 304 NotModified快 取 伺 服 器HTTP 請 求 訊 息If-modified-since:HTTP 回 應 訊 息HTTP/1.0304 Not ModifiedHTTP 請 求 訊 息If-modified-since:伺 服 器物 件沒 有 更 新物 件 已 更 新HTTP 回 應 訊 息HTTP/1.0 200 OK2: Application Layer 43
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 44
FTP: 檔 案 傳 輸 協 定使 用 者或 主 機FTP使 用 者 介面FTP用 戶 端本 地 檔案 系 統檔 案 傳 輸FTP伺 服 端遠 端 檔 案 系 統 傳 輸 檔 案 到 / 從 遠 端 主 機 用 戶 端 / 伺 服 端 模 型 用 戶 端 : 開 始 傳 輸 的 那 一 邊 ( 不 管 是 到 / 從 遠 端 ) 伺 服 端 : 遠 端 主 機 ftp: RFC 959 ftp 伺 服 器 : 埠 號 212: Application Layer 45
FTP: 分 離 的 控 制 、 資 料 連 結 FTP 客 戶 端 以 埠 號 21 聯 繫 FTP伺 服 端 , 指 定 TCP 為 傳 輸 協 定 用 戶 端 經 由 控 制 連 線 取 得 授 權 用 互 端 經 由 控 制 連 線 傳 送 命 令來 瀏 覽 遠 端 目 錄 當 伺 服 器 收 到 檔 案 傳 輸 的 命 令時 , 伺 服 器 會 為 用 戶 端 開 啟 一個 TCP 的 資 料 連 線 在 傳 輸 一 個 檔 案 之 後 , 伺 服 器會 關 閉 該 連 線FTP客 戶 端TCP 控 制 連 線的 埠 號 為 21TCP 資 料 連 線的 埠 號 為 20FTP伺 服 端 伺 服 端 開 啟 第 二 個 TCP 資 料 連 線以 傳 送 另 一 個 檔 案 控 制 連 線 : “ 不 同 頻 帶 ” FTP 伺 服 器 會 維 護 “ 狀 態 ”: 目 前的 目 錄 、 之 前 的 授 權2: Application Layer 46
FTP 指 令 , 回 應範 例 命 令 : 經 由 控 制 頻 道 , 以 ASCII 文字 傳 送 USER username PASS password LIST 回 傳 目 前 目 錄 下 的檔 案 清 單 RETR filename 取 得 ( 意 指get) 檔 案 STOR filename 將 檔 案儲 存 ( 意 指 put) 到 遠 端 主 機範 例 回 應 碼 : 狀 態 碼 和 資 料 ( 類 似 HTTP) 331 Username OK,password required 125 data connectionalready open;transfer starting 425 Can’t open dataconnection 452 Error writingfile2: Application Layer 47
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 48
電 子 郵 件三 個 主 要 元 件 : 使 用 者 代 理 器 郵 件 伺 服 器 簡 單 郵 件 傳 輸 協 定 : SMTP使 用 者 代 理 器 又 稱 “ 郵 件 伺 服 器 ” 撰 寫 , 編 輯 , 讀 取 郵 件 訊 息 e.g., Eudora, Outlook, elm,Netscape Messenger 寄 出 , 收 取 伺 服 器 上 的 訊 息郵 件伺 服 器SMTP郵 件伺 服 器使 用 者代 理 器使 用 者代 理 器SMTPSMTP使 用 者代 理 器寄 出 的訊 息 佇 列使 用 者 郵 件 信 箱郵 件伺 服 器使 用 者代 理 器使 用 者代 理 器使 用 者代 理 器2: Application Layer 49
電 子 郵 件 : 郵 件 伺 服 器郵 件 伺 服 器使 用 者代 理 器 郵 件 信 箱 保 存 了 使 用 者收 到 的 信 件 訊 息 佇 列 內 含 要 出 去 的 (將 要 寄 出 的 ) 郵 件 訊 息 SMTP 協 定 在 郵 件 伺 服器 之 間 傳 送 電 子 郵 件 訊 息 用 戶 端 : 傳 送 電 子 郵 件的 伺 服 器 伺 服 端 : 接 收 電 子 郵 件的 伺 服 器郵 件伺 服 器SMTP郵 件伺 服 器使 用 者代 理 器SMTPSMTP使 用 者代 理 器郵 件伺 服 器使 用 者代 理 器使 用 者代 理 器使 用 者代 理 器2: Application Layer 50
電 子 郵 件 : SMTP [RFC 2821] 使 用 TCP, 埠 號 25, 從 用 戶 端 到 伺 服 端 可 靠 地 傳 輸電 子 郵 件 訊 息 直 接 傳 輸 : 從 傳 送 伺 服 器 到 接 收 伺 服 器 傳 輸 的 三 個 階 段 交 握 ( 自 我 介 紹 ) 傳 送 訊 息 關 閉 指 令 / 回 應 的 互 動 指 令 : ASCII 文 字 回 應 : 狀 態 碼 和 資 訊 訊 息 必 須 是 7 個 位 元 的 ASCII2: Application Layer 51
狀 況 : Alice 傳 送 訊 息 給 Bob1) Alice 執 行 使 用 者 代 理 器 , 編寫 一 份 訊 息 寄 給bob@someschool.edu2) Alice 的 使 用 者 代 理 器 傳 送 訊息 到 她 的 郵 件 伺 服 器 , 此 訊息 被 放 置 在 訊 息 佇 列 中3) Client side of SMTP 用 戶 端開 啟 TCP 連 線 , 連 結 到 Bob 的郵 件 伺 服 器4) SMTP 透 過 TCP 連 線 傳 送Alice 的 訊 息5) Bob 的 郵 件 伺 服 器 將 訊 息 放置 在 Bob 的 郵 件 信 箱 中6) Bob 執 行 他 的 使 用 者 代 理 器來 閱 讀 訊 息1使 用 者代 理 器郵 件伺 服 器2 34郵 件伺 服 器56使 用 者代 理 器2: Application Layer 52
範 例 SMTP 互 動S: 220 hamburger.eduC: HELO crepes.frS: 250 Hello crepes.fr, pleased to meet youC: MAIL FROM: S: 250 alice@crepes.fr... Sender okC: RCPT TO: S: 250 bob@hamburger.edu ... Recipient okC: DATAS: 354 Enter mail, end with "." on a line by itselfC: Do you like ketchup?C: How about pickles?C: .S: 250 Message accepted for deliveryC: QUITS: 221 hamburger.edu closing connection2: Application Layer 53
試 著 自 己 與 SMTP 互 動 : telnet servername 25 觀 察 來 自 伺 服 器 的 220 回 應 輸 入 HELO, MAIL FROM, RCPT TO, DATA, QUIT指 令上 述 動 作 讓 你 傳 送 電 子 郵 件 , 而 不 需 使 用 電 子 郵 件 用 戶端 ( 檢 視 器 )。2: Application Layer 54
SMTP: 結 語 SMTP 使 用 永 久 性 連 線 SMTP 要 求 訊 息 ( 標 頭 及主 體 ) 必 須 是 7 位 元 的ASCII 格 式 SMTP 伺 服 器 用CRLF.CRLF 來 決 定 訊 息的 尾 端與 HTTP 的 比 較 : HTTP: 取 回 (pull) SMTP: 送 出 (push) 都 有 ASCII 指 令 / 回 應的 互 動 , 狀 態 碼 HTTP: 每 個 物 件 都 封 裝在 它 自 己 的 回 應 訊 息 中 SMTP: 多 個 物 件 以 一 個多 重 訊 息 來 傳 送2: Application Layer 55
郵 件 訊 息 格 式SMTP: 交 換 郵 件 訊 息 的 協 定RFC 822: 文 字 訊 息 的 格 式 標 準 : header lines, e.g., To: From: Subject:與 SMTP 命 令 不 同 ! 本 體 “ 訊 息 ”, 僅 ASCII 字 元headerbodyblankline2: Application Layer 56
訊 息 格 式 : 多 媒 體 延 伸 MIME: multimedia mail extension, RFC 2045, 2056 訊 息 標 頭 中 額 外 的 文 字 列 宣 告 了 MIME 的 content typeMIME 的 版 本將 資 料 編 碼所 使 用 的 方 法多 媒 體 資 料 型 態 、子 型 態 、 參 數 宣 告編 碼 後 的 資 料From: alice@crepes.frTo: bob@hamburger.eduSubject: Picture of yummy crepe.MIME-Version: 1.0Content-Transfer-Encoding: base64Content-Type: image/jpegbase64 encoded data ....................................base64 encoded data2: Application Layer 57
郵 件 存 取 協 定SMTP SMTP 存 取使 用 者代 理 器協 定使 用 者代 理 器傳 送 端 的郵 件 伺 服 器接 收 端 的郵 件 伺 服 器 SMTP: 傳 送 / 儲 存 到 接 收 端 的 郵 件 伺 服 器 郵 件 存 取 協 定 : 從 伺 服 器 取 得 POP: Post Office Protocol [RFC 1939]• 授 權 ( 代 理 器 伺 服 器 ) 與 下 載 IMAP: Internet Mail Access Protocol [RFC 1730]• 更 多 功 能 ( 更 複 雜 )• 在 伺 服 器 上 操 作 儲 存 的 訊 息 HTTP: Hotmail , Yahoo! Mail, 等 等2: Application Layer 58
POP3 協 定授 權 階 段 用 戶 端 指 令 : user: 宣 告 使 用 者 名 稱 pass: 密 碼 伺 服 器 回 應 +OK -ERR存 取 程 序 階 段 , 用 戶 端 : list: 將 訊 息 編 號 列 表 retr: 以 編 號 收 取 訊 息 dele: 刪 除 quitS: +OK POP3 server readyC: user bobS: +OKC: pass hungryS: +OK user successfully logged onC: listS: 1 498S: 2 912S: .C: retr 1S: S: .C: dele 1C: retr 2S: S: .C: dele 2C: quitS: +OK POP3 server signing off2: Application Layer 59
POP3 ( 更 多 ) 以 及 IMAP更 多 關 於 POP3 前 面 的 例 子 使 用 “ 下 載 並刪 除 ” 模 式 假 如 Bob 更 換 了 用 戶 端 ,他 將 無 法 重 新 讀 取 郵 件 “ 下 載 並 保 留 ”: 在 不 同 的用 戶 端 保 留 副 本 在 會 談 期 間 ,POP3 為 無狀 態 的IMAP 在 一 個 地 方 保 留 所 有 的訊 息 : 伺 服 器 允 許 使 用 者 在 郵 件 夾 中組 織 訊 息 在 會 談 期 間 ,IMAP 保留 使 用 者 的 狀 態 : 郵 件 夾 名 稱 以 及 訊 息 ID 和郵 件 夾 名 稱 間 的 對 應2: Application Layer 60
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 61
DNS: 領 域 名 稱 系 統人 類 : 許 多 識 別 碼 : 社 會 安 全 號 碼 , 名 字 , 護 照號 碼網 際 網 路 主 機 , 路 由 器 : IP 位 址 (32 位 元 ) – 使 用位 址 資 料 段 “ 名 稱 ”, 例 如 ,ww.yahoo.com – 人 類 所使 用 的Q: IP 位 址 以 及 名 稱 之 間 的對 應 ?領 域 名 稱 系 統 : 分 散 的 資 料 庫 以 許 多 階 層式 的 名 稱 伺 服 器 實 作 應 用 層 協 定 允 許 主 機 , 路 由器 , 名 稱 伺 服 器 連 接 以 解 析名 稱 ( 位 址 / 名 稱 的 轉 換 ) 注 意 : 核 心 的 網 際 網 路函 式 , 以 應 用 成 協 定 實 作 網 路 ” 邊 緣 ” 的 複 雜 性2: Application Layer 62
DNSDNS 服 務 主 機 名 稱 到 IP 位 址 的 轉換 主 機 別 名 正 規 主 機 名 稱 以 及 別 名 郵 件 伺 服 器 別 名 負 載 分 配 複 製 的 Web 伺 服 器 : 一 組IP 位 址 對 應 到 一 個 正 規 主機 名 稱為 什 麼 不 是 集 中 化 的 DNS? 單 點 故 障 大 量 的 網 路 流 量 遠 距 離 集 中 式 資 料 庫 維 護不 具 擴 充 性 !2: Application Layer 63
分 散 式 、 階 層 式 資 料 庫根 DNS 伺 服 器com DNS 伺 服 器 org DNS 伺 服 器 edu DNS 伺 服 器yahoo.comDNS 伺 服 器amazon.comDNS 伺 服 器pbs.orgDNS 伺 服 器poly.edu umass.eduDNS 伺 服 器 DNS 伺 服 器用 戶 端 想 要 知 道 www.amazon.com 的 IP 位 址 用 戶 端 向 根 伺 服 器 查 詢 , 尋 找 com DNS 伺 服 器 用 戶 端 向 com DNS 伺 服 器 查 詢 , 得 到 amazon.comDNS 伺 服 器 用 戶 端 向 amazon.com DNS 伺 服 器 查 詢 , 得 到www.amazon.com 的 IP 位 址2: Application Layer 64
DNS: 根 名 稱 伺 服 器 被 無 法 解 析 名 稱 的 區 域 名 稱 伺 服 器 接 觸 根 名 稱 伺 服 器 : 假 如 不 知 道 名 稱 的 對 應 , 則 接 觸 管 控 名 稱 伺 服 器 得 到 對 應 將 對 應 回 傳 給 區 域 名 稱 伺 服 器e NASA Mt View, CAf Internet Software C. Palo Alto,CA (and 17 other locations)b USC-ISI Marina del Rey, CAl ICANN Los Angeles, CAa Verisign, Dulles, VAc Cogent, Herndon, VA (also Los Angeles)d U Maryland College Park, MD k RIPE London (also Amsterdam,g US DoD Vienna, VAFrankfurt)h ARL Aberdeen, MDi Autonomica, Stockholm (plus 3j Verisign, ( 11 locations)other locations)m WIDE Tokyo全 世 界 共 有 13 個名 稱 伺 服 器2: Application Layer 65
TLD 以 及 管 控 名 稱 伺 服 器 高 層 領 域 DNS (TLD) 伺 服 器 : 負 責 com, org,net, edu, etc, 以 及 全 部 的 高 層 國 家 領 域 uk, fr,ca, jp. Network solutions 負 責 維 護 com TLD 的 伺 服 器 Educause 負 責 edu TLD 管 控 DNS 伺 服 器 : 組 織 的 DNS 伺 服 器 , 替 組 織內 的 伺 服 器 提 供 管 控 的 主 機 名 稱 到 IP 的 對 應 ( 例如 , Web 以 及 mail) 可 以 是 組 織 本 身 或 服 務 業 者 來 維 護 的2: Application Layer 66
區 域 名 稱 伺 服 器 不 全 然 屬 於 階 層 架 構 中 每 個 ISP ( 家 用 型 ISP, 公 司 , 大 學 ) 都 有 一 個 也 稱 為 “ 預 設 名 稱 伺 服 器 ” 當 主 機 做 了 一 個 DNS 查 詢 , 此 查 詢 會 被 傳 送 到它 的 區 域 DNS 伺 服 器 如 同 代 理 伺 服 器 (proxy), 將 查 詢 傳 入 階 層 架 構 中2: Application Layer 67
範 例根 DNS 伺 服 器 cis.poly.edu 的 主 機 想要 查 詢gaia.cs.umass.edu 的位 址區 域 DNS 伺 服 器dns.poly.edu1283457TLD DNS 伺 服 器6請 求 主 機cis.poly.edu管 控 DNS 伺 服 器dns.cs.umass.edugaia.cs.umass.edu2: Application Layer 68
遞 迴 式 查 詢根 DNS 伺 服 器遞 迴 式 查 詢 : 加 重 被 聯 繫 的 名 稱 伺服 器 的 名 稱 解 析 負 擔 過 重 的 負 擔 ?2763TLD DNS 伺 服 器反 覆 式 查 詢 : 被 聯 繫 的 伺 服 器 回 應要 聯 繫 的 伺 服 器 名 稱 “ 我 不 知 道 這 個 名 稱, 問 這 個 伺 服 器 ”區 域 DNS 伺 服 器dns.poly.edu18請 求 主 機cis.poly.edu54管 控 DNS 伺 服 器dns.cs.umass.edugaia.cs.umass.edu2: Application Layer 69
DNS: 快 取 及 更 新 訊 息 一 旦 ( 任 何 ) 名 稱 伺 服 器 學 到 了 對 應 , 它 會 將 此 對 應存 在 快 取 中 在 一 段 時 間 後 , 快 取 紀 錄 會 過 期 ( 消 失 ) TLD 伺 服 器 通 常 會 被 快 取 在 區 域 名 稱 伺 服 器 中• 因 此 根 伺 服 器 不 會 常 常 被 拜 訪 到 更 新 / 通 知 的 機 制 由 IETF 設 計 RFC 2136 http://www.ietf.org/html.charters/dnsind-charter.html2: Application Layer 70
DNS 紀 錄DNS: 分 散 式 的 資 料 庫 , 儲 存 資 源 紀 錄 (RR)RR 格 式 : (name, value, type, ttl) Type=A name 表 示 主 機 名 稱 value 表 示 IP 位 址 Type=NS name 表 示 領 域 名 稱 ( 例 如foo.com) value 表 示 此 領 域 的 管 控名 稱 伺 服 器 之 主 機 名 稱 Type=CNAME name 表 示 某 個 正 規 ( 真 正 的 ) 名稱 的 別 名www.ibm.com 實 際 上 是servereast.backup2.ibm.com value 為 正 規 名 稱 Type=MX value 與 name 相 關 的 郵 件 伺服 器 的 名 稱2: Application Layer 71
DNS 協 定 , 訊 息DNS 協 定 : 查 詢 及 回 應 訊息 , 兩 者 的 訊 息 格 式 相 同訊 息 標 頭 識 別 碼 : 16 位 元 的 號 碼 , 查詢 訊 息 及 此 查 詢 的 回 應 訊 息使 用 同 一 個 號 碼 旗 標 : 查 詢 或 回 應 應 遞 迴 旗 標 有 遞 迴 旗 標 回 應 為 管 控 的2: Application Layer 72
DNS 協 定 , 訊 息查 詢 的 名 稱、 型 態 欄 位查 詢 的 回 應 的 RR管 控 伺 服 器 的 紀 錄其 他 可 能 有 用 的 資 訊2: Application Layer 73
在 DNS 中 新 增 紀 錄 範 例 : 剛 成 立 的 公 司 “Network Utopia” 向 註 冊 服 務 商 註 冊 名 稱 networkuptopia.com ( 例 如 ,Network Solutions) 需 要 提 供 該 服 務 商 你 的 ( 主 要 及 次 要 ) 管 控 DNS 伺 服 器 的 名 稱 與IP 位 址 服 務 商 在 com TLD 伺 服 器 中 輸 入 兩 筆 RR:(networkutopia.com, dns1.networkutopia.com, NS)(dns1.networkutopia.com, 212.212.212.1, A) 在 管 控 伺 服 器 中 放 入 Type A 的www.networkuptopia.com 紀 錄 以 及 Type MX 的networkutopia.com 紀 錄 人 們 要 如 何 得 到 你 的 網 站 的 IP 位 址 呢 ?2: Application Layer 74
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 75
對 等 式 檔 案 分 享範 例 Alice 在 她 的 筆 記 型 電 腦上 執 行 對 等 式 的 用 戶 端應 用 程 式 間 歇 地 連 接 到 網 際 網 路, 每 次 連 接 都 得 到 一 個新 的 IP 位 址 尋 找 “Hey Jude” 應 用 程 式 會 顯 示 其 它 擁有 Hey Jude 的 副 本 的 對等 點 Alice 選 擇 了 其 中 一 個 對等 點 , Bob. 檔 案 由 Bob 的 電 腦 複 製 到Alice 的 筆 記 型 電 腦 :HTTP 當 Alice 下 傳 的 同 時 , 可能 有 其 他 的 使 用 者 從Alice 上 傳 Alice 的 對 等 點 同 時 是Web 用 戶 端 以 及 暫 時 的Web 伺 服 端所 有 的 對 等 點 都 是 伺 服 器 =高 擴 充 性 !2: Application Layer 76
P2P: 集 中 式 目 錄原 始 的 “Napster” 設 計1) 當 對 等 點 連 結 時 , 它 會 告知 中 央 伺 服 器 :集 中 式目 錄 伺 服 器1Bob對 等 點 IP 位 址1 內 容2) Alice 尋 找 “Hey Jude”3) Alice 向 Bob 請 求 檔 案2113Alice2: Application Layer 77
P2P: 集 中 式 目 錄 的 問 題 單 點 故 障 效 能 瓶 頸 版 權 侵 犯檔 案 傳 輸 是 非 集 中 式的 , 但 內 容 尋 找 是 高 度的 集 中 式2: Application Layer 78
查 詢 洪 流 法 : Gnutella 完 全 分 散 式 非 集 中 式 伺 服 器 公 眾 領 域 協 定 許 多 Gnutella 用 戶 端 實作 協 定重 疊 網 路 : 圖 論 對 等 點 X 以 及 Y 之 間 有 一個 邊 , 假 如 他 們 之 間 有一 個 TCP 連 線 所 有 活 動 的 對 等 點 和 邊定 義 了 重 疊 網 路 邊 不 是 實 體 的 連 結 一 個 邊 通 常 只 與 小 於 10個 的 重 疊 鄰 居 連 線2: Application Layer 79
Gnutella: 協 定 經 由 已 存 在 的 TCP 連 線傳 送 查 詢 訊 息 對 等 點 將 查 詢 訊 息轉 送 出 去 QueryHit由 相 反 路 徑傳 回查 詢命 中 查 詢查 詢檔 案 傳 輸 :HTTP查 詢命 中 查 詢查 詢命 中 查 詢擴 充 性 :有 限 領 域 的 洪 流 法查 詢2: Application Layer 80
Gnutella: 對 等 點 的 加 入1. 加 入 的 對 等 點 X 必 須 找 到 Gnutella 網 路 上 的 一 些 其 他對 等 點 : 使 用 候 選 對 等 點 清 單2. X 連 續 嘗 試 與 清 單 上 的 對 等 點 建 立 TCP 連 線 , 直 到與 Y 建 立 連 線3. X 傳 送 Ping 訊 息 給 Y; Y 將 Ping 訊 息 轉 送 出 去4. 所 有 收 到 Ping 訊 息 的 對 等 點 會 回 傳 Pong 訊 息5. X 收 到 許 多 Pong 訊 息 。 現 在 他 可 以 建 立 其 他 的 TCP連 線 。對 等 點 的 離 開 : 請 見 習 題 !2: Application Layer 81
開 發 異 質 性 : KaZaA 每 個 對 等 點 為 一 個 群 組 領導 點 或 是 被 指 定 給 一 個 群組 領 導 點 在 對 等 點 以 及 它 的 群 組 領 導點 間 有 一 個 TCP 連 線 在 群 組 領 導 點 間 有 TCP 連 線 群 組 領 導 點 會 追 蹤 它 的 子對 等 點 的 內 容2: Application Layer 82
KaZaA: 查 詢 每 個 檔 案 擁 有 一 個 hash 以 及 描 述 器 用 戶 端 傳 送 關 鍵 字 查 詢 到 它 的 群 組 領 導 點 群 組 領 導 點 會 回 應 符 合 的 對 等 點 : 每 個 符 合 含 有 : 後 資 料 , hash, IP 位 址 假 如 群 組 領 導 點 將 查 詢 轉 送 到 其 他 的 群 組 領 導點 , 它 們 會 回 應 符 合 的 對 等 點 用 戶 端 可 以 選 擇 想 要 下 載 的 檔 案 HTTP 請 求 訊 息 使 用 hash 做 為 傳 送 給 擁 有 檔 案 的 對等 點 的 識 別 碼2: Application Layer 83
KaZaA 的 技 術 限 制 同 時 上 傳 請 求 佇 列 優 先 順 序 誘 因 平 行 下 載更 多 的 參 考 資 料 : J. Liang, R. Kumar, K. Ross, “Understanding KaZaA,”( 可 由 cis.poly.edu/~ross 取 得 )2: Application Layer 84
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 85
Socket 程 式 設 計目 標 : 學 習 如 何 建 立 使 用 socket 通 訊 的 用 戶 端 / 伺 服 端 的 應用 程 式Socket API 在 BSD4.1 UNIX, 1981 被 介 紹 由 應 用 程 式 明 顯 地 製 造 、 使 用、 發 布 用 戶 端 / 伺 服 端 模 式 兩 種 型 態 的 傳 輸 服 務 透 過socket API: 不 可 靠 的 資 料 段 可 靠 的 , 位 元 組 串 流 導 向socket一 個 主 機 區 域 性 ,應 用 程 式 產 生 的 ,OS 控 制 的 介 面 ( 一 扇 “ 門 ”)成 為 應 用 程 式 的 行 程可 以 同 時 傳 送 及 接 收訊 息 到 / 從 另 一 個 應 用 程 式的 行 程2: Application Layer 86
使 用 TCP 的 Socket 程 式 設 計Socket: 在 應 用 程 式 行 程 與 端 點 至 端 點 傳 輸 協 定 (UCP 或TCP) 之 間 的 門TCP 服 務 : 使 用 位 元 組 的 可 靠 傳 輸 , 從 一 個 行 程 到 另 一 個行 程由 應 用 程 式開 發 者 所 控 制由 作 業 系 統所 控 制行 程socket擁 有 緩 衝區 和 變 數的 TCP網 際 網 路行 程socket擁 有 緩 衝區 和 變 數的 TCP由 應 用 程 式開 發 者 所 控 制由 作 業 系 統所 控 制主 機 或 伺 服 器主 機 或 伺 服 器2: Application Layer 87
使 用 TCP 的 Socket 程 式 設 計用 戶 端 必 須 先 建 立 與 伺 服 器 之 間的 通 訊 伺 服 器 行 程 必 須 先 執 行 伺 服 器 必 須 擁 有 歡 迎 用 戶 端建 立 連 線 的 socket( 門 )用 戶 端 藉 著 下 列 動 作 建 立 與 伺 服器 的 連 線 : 產 生 用 戶 端 - 區 域 的 TCPsocket 指 定 伺 服 器 行 程 的 IP 位 址 、埠 號 當 用 戶 端 產 生 socket: 用 戶端 TCP 建 立 了 與 伺 服 器 TCP的 連 線 當 被 用 戶 端 請 求 建 立 連 線 時 ,伺 服 端 TCP 為 伺 服 器 行 程 產 生新 的 socket, 用 來 與 用 戶 端 通訊 允 許 伺 服 器 與 多 個 用 戶 端對 話 用 來 源 埠 號 來 分 辨 用 戶 端 (在 第 三 章 中 有 更 多 討 論 )應 用 程 式 的 觀 點TCP 在 用 戶 端 和 伺 服 端 之 間提 供 可 靠 的 , 有 順 序 的 位 元 組傳 輸 ( 管 線 )2: Application Layer 88
術 語 : 串 流 (Stream) 串 流 是 流 入 或 流 出 行 程 的 一連 串 字 元 輸 入 串 流 連 接 到 該 行 程 的 某個 輸 入 來 源 , 例 如 , 鍵 盤 或socket 輸 出 串 流 連 接 到 一 個 輸 出 來源 , 例 如 , 螢 幕 或 socket2: Application Layer 89
使 用 TCP 的 Socket 程 式 設 計用 戶 端 - 伺 服 端 應 用 程 式 範例 :1) 用 戶 端 從 它 的 標 準 輸 入(inFromUser 串 流 ) 讀 入 一列 資 料 , 經 過 它 的 socket(outToServer 串 流 ) 將 資料 傳 給 伺 服 端2) 伺 服 器 從 socket 讀 入 一 列 資料3) 伺 服 器 將 這 列 資 料 轉 換 成 大寫 , 並 將 它 傳 送 回 用 戶 端4) 用 戶 端 從 socket 讀 取 , 並 列印 這 列 更 改 後 的 資 料(inFromServer 串 流 )2: Application Layer 90
用 戶 端 / 伺 服 端 socket 的 互 動 : TCP伺 服 端 ( 在 hostid 中 執 行 )用 戶 端為 即 將 來 到 的 請 求 建 立Socket port = xwelcomeSocket =ServerSocket()等 待 連 線 請 求 到 來connectionSocket =welcomeSocket.accept()由 connectionSocket讀 取 請 求寫 入 回 應 至connectionSocket關 閉connectionSocketTCP建 立 連 線建 立 連 線 到Hostid,port=x 的 socketclientSocket =Socket()使 用 clientSocket傳 送 請 求從 clientSocket 讀 取 回 應關 閉clientSocket2: Application Layer 91
範 例 : Java 用 戶 端 (TCP)import java.io.*;import java.net.*;class TCPClient {public static void main(String argv[]) throws Exception{String sentence;String modifiedSentence;產 生 輸 入 串 流產 生用 戶 端 socket,連 接 到 伺 服 器產 生輸 出 串 流連 接 到 socketBufferedReader inFromUser =new BufferedReader(new InputStreamReader(System.in));Socket clientSocket = new Socket("hostname", 6789);DataOutputStream outToServer =new DataOutputStream(clientSocket.getOutputStream());2: Application Layer 92
範 例 : Java 用 戶 端 (TCP) , 續產 生 輸 入 串 流連 接 到 socket傳 送 一 列 資 料到 伺 服 端從 伺 服 器讀 取 一 列 資 料BufferedReader inFromServer =new BufferedReader(newInputStreamReader(clientSocket.getInputStream()));sentence = inFromUser.readLine();outToServer.writeBytes(sentence + '\n');modifiedSentence = inFromServer.readLine();System.out.println("FROM SERVER: " + modifiedSentence);clientSocket.close();}}2: Application Layer 93
範 例 : Java 伺 服 端 (TCP)import java.io.*;import java.net.*;class TCPServer {產 生 歡 迎在 埠 號 6789歡 迎 socket等 待 用 戶 端的 連 線 請 求產 生 輸 入 串 流 ,連 接 到 socketpublic static void main(String argv[]) throws Exception{String clientSentence;String capitalizedSentence;ServerSocket welcomeSocket = new ServerSocket(6789);while(true) {Socket connectionSocket = welcomeSocket.accept();BufferedReader inFromClient =new BufferedReader(newInputStreamReader(connectionSocket.getInputStream()));2: Application Layer 94
範 例 : Java 伺 服 端 (TCP) , 續產 生 輸 出 串 流 ,連 接 到 socket從 socket讀 取 一 列 訊 息DataOutputStream outToClient =new DataOutputStream(connectionSocket.getOutputStream());clientSentence = inFromClient.readLine();capitalizedSentence = clientSentence.toUpperCase() + '\n';寫 入 一 列 訊 息 到socket}}}outToClient.writeBytes(capitalizedSentence);While 迴 圈 的 尾 端 ,回 到 迴 圈 等 待 另 一 個 用 戶 端 的 連 結2: Application Layer 95
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 96
使 用 UDP 的 Socket 程 式 設 計UDP: 在 用 戶 端 和 伺 服 端 之間 沒 有 ” 連 結 ” 沒 有 交 握 程 序 傳 送 端 會 明 確 地 在 每 個封 包 加 上 目 的 端 的 IP 位址 以 及 埠 號 伺 服 端 必 須 從 收 到 的 封包 中 抽 出 傳 送 者 的 IP 位址 以 及 埠 號應 用 程 式 的 觀 點UDP 提 供 位 元 組 群 組( 在 用 戶 端 和 伺 服 端 之 間 的 ” 資 料 段 ”)的 不 可 靠 傳 輸UDP: 傳 送 的 資 料 可 能 會 順序 顛 倒 或 遺 失2: Application Layer 97
用 戶 端 / 伺 服 端 socket 互 動 : UDP伺 服 端 ( 在 hostid 上 執 行 )用 戶 端為 即 將 到 來 的 請 求 建 立port=x,serverSocket =DatagramSocket()由 serverSocket讀 取 請 求建 立 socket,clientSocket =DatagramSocket()建 立 位 址 (hostid, port=x,使 用 clientSocket 傳 送 資 料 段 請 求寫 入 回 應 至serverSocket指 定 用 戶 端 主機 位 址 及 埠 號從 clientSocket 讀 取 回 應關 閉clientSocket2: Application Layer 98
範 例 : Java 用 戶 端 (UDP)2: Application Layer 99
範 例 : Java 用 戶 端 (UDP)import java.io.*;import java.net.*;產 生 輸 入 串 流產 生 用 戶 端 socket使 用 DNS 將主 機 名 稱 轉 換成 IP 位 址class UDPClient {public static void main(String args[]) throws Exception{BufferedReader inFromUser =new BufferedReader(new InputStreamReader(System.in));DatagramSocket clientSocket = new DatagramSocket();InetAddress IPAddress = InetAddress.getByName("hostname");byte[] sendData = new byte[1024];byte[] receiveData = new byte[1024];String sentence = inFromUser.readLine();sendData = sentence.getBytes();2: Application Layer 100
範 例 : Java 用 戶 端 (UDP), 續產 生 資 料 段 , 包 含 要 傳送 的 資 料 、 長 度 、IP位 址 、 埠 號傳 送 資 料 段 到 伺 服 器從 伺 服 器 讀 取 資 料 段DatagramPacket sendPacket =new DatagramPacket(sendData, sendData.length, IPAddress, 9876);clientSocket.send(sendPacket);DatagramPacket receivePacket =new DatagramPacket(receiveData, receiveData.length);clientSocket.receive(receivePacket);String modifiedSentence =new String(receivePacket.getData());}System.out.println("FROM SERVER:" + modifiedSentence);clientSocket.close();}2: Application Layer 101
範 例 : Java 伺 服 端 (UDP)import java.io.*;import java.net.*;在 埠 號 9876產 生 資 料 段 socketclass UDPServer {public static void main(String args[]) throws Exception{DatagramSocket serverSocket = new DatagramSocket(9876);byte[] receiveData = new byte[1024];byte[] sendData = new byte[1024];為 收 到 的 資 料 段產 生 空 間接 收資 料 段while(true){DatagramPacket receivePacket =new DatagramPacket(receiveData, receiveData.length);serverSocket.receive(receivePacket);2: Application Layer 102
範 例 : Java 伺 服 端 (UDP), 續String sentence = new String(receivePacket.getData());取 得 傳 送 端 的 IP位 址 以 及 埠 號InetAddress IPAddress = receivePacket.getAddress();int port = receivePacket.getPort();產 生 要 傳 送 到用 戶 端 的 資 料 段將 資 料 段寫 出 到 socket}}String capitalizedSentence = sentence.toUpperCase();sendData = capitalizedSentence.getBytes();DatagramPacket sendPacket =new DatagramPacket(sendData, sendData.length, IPAddress,port);serverSocket.send(sendPacket);}While 的 末 端 ,繼 續 迴 圈 等 待 另 一 個 資 料 段2: Application Layer 103
第 二 章 : 應 用 層 2.1 網 路 應 用 的 原 理 2.2 Web 和 HTTP 2.3 FTP 2.4 電 子 郵 件 SMTP, POP3, IMAP 2.5 DNS 2.6 對 等 式 檔 案 分 享 2.7 使 用 TCP 的 Socket 程式 設 計 2.8 使 用 UDP 的 Socket 程式 設 計 2.9 建 立 一 個 Web 伺 服 器2: Application Layer 104
建 立 一 個 簡 單 的 Web 伺 服 器 僅 處 理 一 個 HTTP 請 求 接 收 請 求 解 析 標 頭 從 伺 服 器 檔 案 系 統 取 得 請求 的 檔 案 產 生 HTTP 回 應 訊 息 : 標 頭 列 + 檔 案 將 回 應 傳 送 給 用 戶 端 在 產 生 伺 服 器 之 後 , 你可 以 使 用 瀏 覽 器 請 求 檔案 ( 例 如 , IE explorer) 詳 見 課 文2: Application Layer 105
第 二 章 : 總 結我 們 對 網 路 應 用 的 研 習 現 在 完 整 了 ! 應 用 程 式 架 構 用 戶 端 - 伺 服 端 對 等 式 混 合 式 應 用 程 式 服 務 需 求 :可 靠 性 , 頻 寬 , 延 遲 網 際 網 路 傳 輸 服 務 模 型 連 線 導 向 , 可 靠 的 : TCP 不 可 靠 的 , 資 料 段 : UDP 特 定 的 協 定 : HTTP FTP SMTP, POP, IMAP DNS socket 程 式 設 計2: Application Layer 106
第 二 章 : 總 結最 重 要 的 : 有 關 協 定 的 學 習 典 型 的 請 求 / 回 應 訊 息 交換 : 用 戶 端 請 求 資 訊 或 服 務 伺 服 器 回 應 資 料 或 狀 態 碼 訊 息 格 式 : 標 頭 : 提 供 資 料 的 資 訊 之欄 位 資 料 : 傳 輸 的 資 訊 控 制 vs. 資 料 訊 息 相 同 頻 帶 , 不 同 頻 帶 集 中 式 vs. 分 散 式 無 狀 態 的 vs. 狀 態 的 可 靠 的 vs. 不 可 靠 的 訊 息 傳 輸 “ 網 路 邊 緣 的 複 雜 度 ”2: Application Layer 107