終於來到了最上層,也是咱們接觸最多的一層 -- 應用層。
每一個應用層協議都是爲了解決某一類應用問題,而問題的解決又每每是經過位於不一樣主機中的多個應用進程之間的通訊和協同工做來完成的。應用層的具體內容就是規定應用進程在通訊時所遵循的協議。
應用層的許多協議都是基於客戶服務器方式。客戶是服務請求方,服務器是服務提供方。html
域名系統 DNS (Domain Name System)是互聯網中一種面向主機及各項互聯網服務的層次結構去中心化的命名系統。通常來講,它用於將難記的IP地址轉化爲好記的「地址欄」中咱們看到的地址。
名字到IP地址的解析是由若干個域名服務器程序完成的。編程
一個域名服務器所負責管轄的(或有權限的)範圍叫作「區」 (zone)。一個區中的全部節點必須是可以連通的。
每一個區設置相應的權限域名服務器,用來保存該區中的全部主機的域名到 IP 地址的映射。segmentfault
每個「域」中至少有一個(能夠有多個)權限域名服務器,即每一個「域」中能夠有多個「區」。
上圖說明了域名解析的通常過程,這其中要通過四種域名服務器:瀏覽器
①用戶機經過迭代查詢(Recursive Query)將請求發送給本地域名服務器;
②本地域名服務器向根域名服務器發起遞歸查詢(Iterative Query),根域名服務器將下一步應當找的頂級域名服務器的 IP 地址告訴本地域名服務器;
③本地域名服務器繼續向頂級域名服務器發起詢問,獲得下一步應當找的域名服務器IP地址。(有時這一步也會獲得最終結果)
④本地域名服務器向下一個服務器發起詢問,獲得了最終結果,並返回給用戶。服務器
爲了提升域名服務器的可靠性,DNS域名服務器會把數據複製到幾個域名服務器來保存。其中的一個是主域名服務器(master server),其餘的是輔助域名服務器(slave server)。
當主域名服務器出故障時,輔助域名服務器能夠保證 DNS 的查詢工做不會中斷。
文件傳送協議 FTP (File Transfer Protocol) 是互聯網上使用得最普遍的文件傳送協議。它提供交互式的訪問,容許客戶指明文件的類型與格式,並容許文件具備存取權限。markdown
文件傳送協議FTP只提供文件傳送的一些基本的服務,它使用TCP可靠的運輸服務。
FTP的主要功能是減小或消除在不一樣操做系統下處理文件的不兼容性。網絡
FTP在客戶與服務器之間創建兩個鏈接:「控制鏈接」和「數據鏈接」。編輯器
控制鏈接在整個會話期間一直保持打開,FTP 客戶發出的傳送請求經過控制鏈接發送給服務器端的控制進程,但控制鏈接不用來傳送文件。
實際用於傳輸文件的是「數據鏈接」。服務器端的控制進程在接收到 FTP 客戶發送來的文件傳輸請求後就建立「數據傳送進程」和「數據鏈接」,用來鏈接客戶端和服務器端的數據傳送進程。分佈式
相對應的,服務器端和客戶端都使用兩個不一樣的端口號:測試
TFTP (Trivial File Transfer Protocol) 是一個很小且易於實現的文件傳送協議,使用客戶服務器方式且使用 UDP 數據報。(因爲UDP不提供可靠傳輸,故TFTP須要有本身的差錯改正措施)
TFTP協議中,發送方每發送完一個文件塊後就等待對方的確認,確認中指明所確認的塊編號。這一點很像中止等待協議。
TFTP的特色:
TELNET 是一個簡單的遠程終端協議,也是互聯網的正式標準。
用戶用 TELNET 就可在其所在地經過 TCP 鏈接註冊(即登陸)到遠地的另外一個主機上(使用主機名或 IP 地址)。
TELNET 能將用戶的擊鍵傳到遠地主機,同時也能將遠地主機的輸出經過 TCP 鏈接返回到用戶屏幕。這種服務是透明的,由於用戶感受到好像鍵盤和顯示器是直接連在遠地主機上。
TELNET 也使用客戶 - 服務器方式。在本地系統運行 TELNET 客戶進程,而在遠地主機則運行 TELNET 服務器進程。
TELNET工做過程
①TELNET客戶端將用戶的擊鍵和命令轉化成NVT(Network Virtual Terminal characters)格式,交送給本地的TCP/IP棧;
②NVT格式的文本在互聯網中傳遞;
③TELNET服務器端將NVT文本轉化成其操做系統所需的格式,並將其交給「僞終端」,使得這些命令像是從服務器端本地發出的。
對於萬維網,咱們絕對不陌生。「網上衝浪」多年,這片海還能不清楚嗎?
不過對於這些咱們或許已經很「熟悉」的概念,咱們還須要以更專業的角度去再次認識。
萬維網,簡而言之,就是一個大規模的、聯機式的信息儲藏所。
萬維網中的文件和其餘網絡資源都由統一資源定位符(URL)標誌,並經過超連接(hypertext link)互相鏈接,是一種分佈式超媒體 (hypermedia) 系統。
萬維網以客戶 - 服務器方式工做。
客戶程序就是咱們瀏覽網頁使用的瀏覽器。
服務器程序則在萬維網服務器(萬維網文檔所駐留的計算機)中運行。
客戶程序向服務器程序發出請求,服務器程序向客戶程序送回客戶所要的萬維網文檔。咱們在主窗口上看到的萬維網文檔即爲頁面 (page)。
統一資源定位符(URL)是對能夠從互聯網上獲得的資源的位置和訪問方法的一種簡潔表示。
通常瀏覽器都會在地址欄中顯示當前頁面的URL地址。
URL的語法:
URI = scheme:[//userinfo@]host[:port]path[?query][#fragment] URL = 協議類型:[//[訪問資源須要的憑證信息@]服務器地址[:端口號]][/資源層級UNIX文件路徑]文件名[?查詢][#片斷ID]
咱們如下面這個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是面向事務的(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是面向正文的(text-oriented),所以在報文中的每個字段都是一些 ASCII 碼串,於是每一個字段的長度都是不肯定的。
請求報文由如下部分組成
請求行格式:
方法(method) URL 版本 (換行)
好比:
GET /index.html HTTP/1.1
「方法」是面向對象技術中使用的專門名詞。所謂「方法」就是對所請求的對象進行的操做,所以這些方法實際上也就是一些命令。
方法(method) | 含義 |
---|---|
GET | 請求讀取由URL所標誌的信息 |
HEAD | 請求讀取由URL所標誌的信息的首部 |
POST | 給服務器添加信息(例如,註釋) |
PUT | 在指明的URI下存儲一個文檔 |
DELETE | 刪除指明的資源 |
TRACE | 用來進行環回測試的請求報文 |
OPTIONS | 請求一些選項的信息 |
CONNECT | 用於代理服務器 |
響應報文由如下部分組成
狀態行格式:
版本 狀態碼 短語 (換行)
好比:
HTTP/1.1 200 OK
狀態碼都是三位數字:
- 1xx 表示通知信息的,如請求收到了或正在進行處理。
- 2xx 表示成功,如接受或知道了。
- 3xx 表示重定向,表示要完成請求還必須採起進一步的行動。
- 4xx 表示客戶的差錯,如請求中有錯誤的語法或不能完成。
- 5xx 表示服務器的差錯,如服務器失效沒法完成請求。
HTML語言,我認爲與其說它是一種「編程」語言,更像是一種「設計」語言。
某種程度上,能夠說和markdown的性質也是類似的。
HTML定義了許多用於排版的命令(即標籤)。將這些標籤嵌入到萬維網的頁面中,就構成了所謂的 HTML 文檔。
HTML 文檔是一種能夠用任何文本編輯器建立的ASCII碼文件。
當HTML文檔以 .html 或 .htm 爲後綴時,瀏覽器能夠此文檔的各類標籤進行解釋。
<HTML> <HEAD> <TITLE>這裏是這個網頁標題</TITLE> </HEAD> <BODY> <H1>正文的標題</H1> <P>這是第一個段落。</P> <P>這是第二個段落。</P> </BODY> </HTML>
是否是很簡單。
關於HTML語言的教程,網上一找一大把,這裏就很少贅述了。親手作出一個網頁的成就感仍是不小的!