計算機網絡 - 應用層(上)

計算機網絡 - 應用層(上)

終於來到了最上層,也是咱們接觸最多的一層 -- 應用層。
每一個應用層協議都是爲了解決某一類應用問題,而問題的解決又每每是經過位於不一樣主機中的多個應用進程之間的通訊和協同工做來完成的。應用層的具體內容就是規定應用進程在通訊時所遵循的協議。
應用層的許多協議都是基於客戶服務器方式。客戶是服務請求方,服務器是服務提供方。html

域名系統 DNS

概述

域名系統 DNS (Domain Name System)是互聯網中一種面向主機及各項互聯網服務的層次結構去中心化的命名系統。通常來講,它用於將難記的IP地址轉化爲好記的「地址欄」中咱們看到的地址。
名字到IP地址的解析是由若干個域名服務器程序完成的。
DNS樹編程

域名服務器

一個域名服務器所負責管轄的(或有權限的)範圍叫作「區」 (zone)。一個區中的全部節點必須是可以連通的。
每一個區設置相應的權限域名服務器,用來保存該區中的全部主機的域名到 IP 地址的映射。segmentfault

每個「域」中至少有一個(能夠有多個)權限域名服務器,即每一個「域」中能夠有多個「區」。

域名服務器的工做機制

上圖說明了域名解析的通常過程,這其中要通過四種域名服務器:瀏覽器

  • 本地域名服務器(Local DNS Server)
  • 根域名服務器(Root-level Domain Server)
  • 頂級域名服務器(Top-level Domain Server)
  • 權限域名服務器(Authoritative DNS server)

①用戶機經過迭代查詢(Recursive Query)將請求發送給本地域名服務器;
②本地域名服務器向根域名服務器發起遞歸查詢(Iterative Query),根域名服務器將下一步應當找的頂級域名服務器的 IP 地址告訴本地域名服務器;
③本地域名服務器繼續向頂級域名服務器發起詢問,獲得下一步應當找的域名服務器IP地址。(有時這一步也會獲得最終結果)
④本地域名服務器向下一個服務器發起詢問,獲得了最終結果,並返回給用戶。服務器

爲了提升域名服務器的可靠性,DNS域名服務器會把數據複製到幾個域名服務器來保存。其中的一個是主域名服務器(master server),其餘的是輔助域名服務器(slave server)。
當主域名服務器出故障時,輔助域名服務器能夠保證 DNS 的查詢工做不會中斷。

文件傳送協議 FTP

文件傳送協議 FTP (File Transfer Protocol) 是互聯網上使用得最普遍的文件傳送協議。它提供交互式的訪問,容許客戶指明文件的類型與格式,並容許文件具備存取權限。markdown

文件傳送協議FTP只提供文件傳送的一些基本的服務,它使用TCP可靠的運輸服務
FTP的主要功能是減小或消除在不一樣操做系統下處理文件的不兼容性網絡

FTP使用兩個連接

FTP在客戶與服務器之間創建兩個鏈接:「控制鏈接」和「數據鏈接」。編輯器

控制鏈接在整個會話期間一直保持打開,FTP 客戶發出的傳送請求經過控制鏈接發送給服務器端的控制進程,但控制鏈接不用來傳送文件。
實際用於傳輸文件的是「數據鏈接」。服務器端的控制進程在接收到 FTP 客戶發送來的文件傳輸請求後就建立「數據傳送進程」和「數據鏈接」,用來鏈接客戶端和服務器端的數據傳送進程。
FTP使用兩個鏈接分佈式

相對應的,服務器端和客戶端都使用兩個不一樣的端口號測試

  • 當客戶進程向服務器進程發出創建鏈接請求時,要尋找鏈接服務器進程的熟知端口 (21)以創建控制鏈接。
  • 控制鏈接創建後,客戶進程告訴服務器進程本身的另外一個端口號碼,服務器進程用本身傳送數據的熟知端口 (20) 與客戶進程所提供的端口號碼創建數據傳送鏈接。

簡單文件傳送協議 TFTP

TFTP (Trivial File Transfer Protocol) 是一個很小且易於實現的文件傳送協議,使用客戶服務器方式且使用 UDP 數據報。(因爲UDP不提供可靠傳輸,故TFTP須要有本身的差錯改正措施)
TFTP協議中,發送方每發送完一個文件塊後就等待對方的確認,確認中指明所確認的塊編號。這一點很像中止等待協議。

TFTP的特色:

  • 每次傳送的數據 PDU 中有 512 字節的數據,但最後一次可不足 512 字節。
  • 數據 PDU 也稱爲文件塊(block),每一個塊按序編號,從 1 開始。
  • 支持 ASCII 碼或二進制傳送。
  • 可對文件進行讀或寫。
  • 使用很簡單的首部。

遠程終端協議 TELNET

TELNET 是一個簡單的遠程終端協議,也是互聯網的正式標準。
用戶用 TELNET 就可在其所在地經過 TCP 鏈接註冊(即登陸)到遠地的另外一個主機上(使用主機名或 IP 地址)。
TELNET 能將用戶的擊鍵傳到遠地主機,同時也能將遠地主機的輸出經過 TCP 鏈接返回到用戶屏幕。這種服務是透明的,由於用戶感受到好像鍵盤和顯示器是直接連在遠地主機上。
TELNET 也使用客戶 - 服務器方式。在本地系統運行 TELNET 客戶進程,而在遠地主機則運行 TELNET 服務器進程。

TELNET工做過程
TELNET工做過程

①TELNET客戶端將用戶的擊鍵和命令轉化成NVT(Network Virtual Terminal characters)格式,交送給本地的TCP/IP棧;
②NVT格式的文本在互聯網中傳遞;
③TELNET服務器端將NVT文本轉化成其操做系統所需的格式,並將其交給「僞終端」,使得這些命令像是從服務器端本地發出的。

萬維網 WWW

對於萬維網,咱們絕對不陌生。「網上衝浪」多年,這片海還能不清楚嗎?
不過對於這些咱們或許已經很「熟悉」的概念,咱們還須要以更專業的角度去再次認識。
萬維網,簡而言之,就是一個大規模的、聯機式的信息儲藏所。
萬維網中的文件和其餘網絡資源都由統一資源定位符(URL)標誌,並經過超連接(hypertext link)互相鏈接,是一種分佈式超媒體 (hypermedia) 系統。

萬維網的工做方式

萬維網以客戶 - 服務器方式工做。
客戶程序就是咱們瀏覽網頁使用的瀏覽器
服務器程序則在萬維網服務器(萬維網文檔所駐留的計算機)中運行。

客戶程序向服務器程序發出請求,服務器程序向客戶程序送回客戶所要的萬維網文檔。咱們在主窗口上看到的萬維網文檔即爲頁面 (page)。

統一資源定位符 URL

統一資源定位符(URL)是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔表示。
通常瀏覽器都會在地址欄中顯示當前頁面的URL地址。

URL的語法
URL的語法

URI = scheme:[//userinfo@]host[:port]path[?query][#fragment]

URL = 協議類型:[//[訪問資源須要的憑證信息@]服務器地址[:端口號]][/資源層級UNIX文件路徑]文件名[?查詢][#片斷ID]
  • 協議類型(scheme):咱們經常使用的協議有HTTP協議(http)
  • 訪問資源須要的憑證信息(authority):可省略
  • 服務器地址(host):一般爲域名,有時爲IP地址
  • 端口號(port): HTTP的默認端口號爲「:80」,可省略
  • 路徑(path): 以「/」字符區別路徑中的每個目錄名稱
  • 查詢(query):爲GET模式的窗體參數,以「?」字符爲起點,每一個參數以「&」隔開,再以「=」分開參數名稱與數據
  • 片斷(fragment):以「#」字符爲起點

咱們如下面這個URL爲例來分析

https://www.youtube.com:443/results?search_query=bts

① https 是協議;
② www.youtube.com 是服務器地址;
③ :443 是服務器上的網絡端口號(由於協議是HTTPS,因此使用端口443,而不是HTTP協議使用的80端口。這部分通常能夠省略。)
④ /result 是路徑
⑤ ?search_query=bts 是詢問

這個URL地址所訪問的頁面一目瞭然:在youtube網站中搜索「bts」的相關內容。

如今大部分的瀏覽器爲了方便用戶,都會幫忙將URL補全,因此你只須要在地址欄中鍵入segmentfault.com,瀏覽器就會自動將URL補全成 https://segmentfault.com

超文本傳送協議 HTTP

HTTP是面向事務的(transaction-oriented)應用層(客戶 - 服務器)協議,它是萬維網上可以可靠地交換文件(包括文本、聲音、圖像等各類多媒體文件)的重要基礎。
HTTP協議自己是無鏈接的,不過它使用面向鏈接的 TCP 向上提供的服務。

萬維網的工做過程

上圖說明了咱們使用瀏覽器瀏覽一個網頁時萬維網的通常過程。
下面用一個例子具體的說明一下「在瀏覽器上點擊一個URL」後具體發生了什麼:

用戶點擊https://www.baidu.com/index.html
① 瀏覽器分析超連接指向頁面的URL;
② 瀏覽器向 DNS 請求解析 www.baidu.com (host)的IP地址;
③ 域名解析系統DNS解析出百度服務器的IP地址;
④ 瀏覽器與服務器創建TCP鏈接;
⑤ 瀏覽器發出取文件指令 GET index.html;
⑥ 服務器發出響應,把文件index.html發給瀏覽器;
⑦ TCP鏈接釋放
⑧ 瀏覽器顯示百度首頁文件index.html中的全部文本。

HTTP的報文結構

HTTP的報文分爲兩類:

  • 請求報文(request message) -- 從客戶向服務器發送請求報文。
  • 響應報文(response message) -- 從服務器到客戶的回答。

因爲HTTP是面向正文的(text-oriented),所以在報文中的每個字段都是一些 ASCII 碼串,於是每一個字段的長度都是不肯定的。

請求報文由如下部分組成

  • 請求行(request line)
  • 請求首部區域(request header fields)
  • 一個空行
  • 實體(message body)(通常不用)

請求行格式:
方法(method) URL 版本 (換行)
好比:

GET /index.html HTTP/1.1
「方法」是面向對象技術中使用的專門名詞。所謂「方法」就是對所請求的對象進行的操做,所以這些方法實際上也就是一些命令。
方法(method) 含義
GET 請求讀取由URL所標誌的信息
HEAD 請求讀取由URL所標誌的信息的首部
POST 給服務器添加信息(例如,註釋)
PUT 在指明的URI下存儲一個文檔
DELETE 刪除指明的資源
TRACE 用來進行環回測試的請求報文
OPTIONS 請求一些選項的信息
CONNECT 用於代理服務器

響應報文由如下部分組成

  • 狀態行(status line)
  • 響應首部區域(request header fields)
  • 一個空行
  • 實體(message body)(通常不用)

狀態行格式:
版本 狀態碼 短語 (換行)
好比:

HTTP/1.1 200 OK

狀態碼都是三位數字:

  • 1xx 表示通知信息的,如請求收到了或正在進行處理。
  • 2xx 表示成功,如接受或知道了。
  • 3xx 表示重定向,表示要完成請求還必須採起進一步的行動。
  • 4xx 表示客戶的差錯,如請求中有錯誤的語法或不能完成。
  • 5xx 表示服務器的差錯,如服務器失效沒法完成請求。

萬維網的文檔

超文本標記語言 HTML

HTML語言,我認爲與其說它是一種「編程」語言,更像是一種「設計」語言。
某種程度上,能夠說和markdown的性質也是類似的。

HTML定義了許多用於排版的命令(即標籤)。將這些標籤嵌入到萬維網的頁面中,就構成了所謂的 HTML 文檔。
HTML 文檔是一種能夠用任何文本編輯器建立的ASCII碼文件。
當HTML文檔以 .html 或 .htm 爲後綴時,瀏覽器能夠此文檔的各類標籤進行解釋。

<HTML>                                          
<HEAD>
        <TITLE>這裏是這個網頁標題</TITLE>
</HEAD>
<BODY>
        <H1>正文的標題</H1>
        <P>這是第一個段落。</P>
        <P>這是第二個段落。</P>
</BODY>
</HTML>

是否是很簡單。

關於HTML語言的教程,網上一找一大把,這裏就很少贅述了。親手作出一個網頁的成就感仍是不小的!

相關文章
相關標籤/搜索