12.07.2015 Views

第2 章應用層.pdf

第2 章應用層.pdf

第2 章應用層.pdf

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!