前言
本文已經(jīng)收錄到我的
Github個(gè)人博客,歡迎大佬們光臨寒舍:
學(xué)習(xí)導(dǎo)圖:

一、應(yīng)用層協(xié)議原理
Q1:網(wǎng)絡(luò)應(yīng)用程序體系結(jié)構(gòu)
- 客戶(hù) - 服務(wù)器體系結(jié)構(gòu)(
C/S):Web
- 點(diǎn)對(duì)點(diǎn)結(jié)構(gòu)(
P2P):迅雷
- 混合結(jié)構(gòu):
Napster
Q2:進(jìn)程通信
- 客戶(hù)和服務(wù)器進(jìn)程
- 進(jìn)程與計(jì)算機(jī)網(wǎng)絡(luò)之間的接口:進(jìn)程通過(guò)套接字(
socket)軟件接口向網(wǎng)絡(luò)發(fā)送報(bào)文和從網(wǎng)絡(luò)接收?qǐng)?bào)文。
- 進(jìn)程尋址:主機(jī)的地址由
IP地址標(biāo)識(shí),進(jìn)程的位置由端口號(hào)標(biāo)識(shí)。
Q3:可供應(yīng)用使用的運(yùn)輸服務(wù)
運(yùn)輸服務(wù)的衡量標(biāo)準(zhǔn):
- 可靠數(shù)據(jù)傳輸
- 吞吐量
- 定時(shí)
- 安全性
Q4:因特網(wǎng)提供的運(yùn)輸服務(wù)
TCP服務(wù):特點(diǎn)是面向連接和可靠的數(shù)據(jù)傳送UDP服務(wù):特點(diǎn)是無(wú)連接的最小服務(wù)(非可靠)
Q5:應(yīng)用層協(xié)議
應(yīng)用層協(xié)議 (application layer protocol) 定義了運(yùn)行在不同端系統(tǒng)上的應(yīng)用程序進(jìn)程如何相互傳遞報(bào)文
(1) 交換的報(bào)文類(lèi)型,如請(qǐng)求報(bào)文和響應(yīng)報(bào)文;
(2) 各種報(bào)文類(lèi)型的語(yǔ)法,如報(bào)文中的各個(gè)字段公共詳細(xì)描述;
(3) 字段的語(yǔ)義,即包含在字段中信息的含義;
(4) 進(jìn)程何時(shí)、如何發(fā)送報(bào)文及對(duì)報(bào)文進(jìn)行響應(yīng)。
二、Web 和 HTTP
Q1:HTTP
-
HTTP名為超文本傳輸協(xié)議, 規(guī)定了客戶(hù)端和服務(wù)器之間進(jìn)行報(bào)文交換的方法 -
HTTP用TCP作為他的傳輸層協(xié)議。HTTP客戶(hù)首先發(fā)起一個(gè)與服務(wù)器的TCP連接 - 服務(wù)器響應(yīng)的時(shí)候,不存儲(chǔ)客戶(hù)端的狀態(tài)信息,因此
HTTP也被稱(chēng)為 無(wú)狀態(tài)協(xié)議
Q2:非持續(xù)連接和持續(xù)連接
持續(xù)鏈接:只采用一個(gè)
TCP連接完成非持續(xù)連接:采用獨(dú)立的
TCP連接完成由服務(wù)器端決定,
TCP協(xié)議的請(qǐng)求,是采用一個(gè)TCP連接完成,還是獨(dú)立TCP連接完成默認(rèn)情況下使用持續(xù)連接
非持續(xù)連接
HTTP:每個(gè)TCP連接 只傳送一個(gè)請(qǐng)求報(bào)文和相應(yīng)報(bào)文
這里書(shū)上提到了一個(gè)概念,
RTT(Round-Trip Time)往返時(shí)延,報(bào)文從C->S->C的時(shí)間。由于有三次握手的存在,前兩次握手已經(jīng)用了 2個(gè)RTT,所以真正的響應(yīng)時(shí)間應(yīng)該是 2RTT+ 傳輸HTML對(duì)象

- 持續(xù)連接
HTTP:持續(xù)連接可以提高傳輸效率
上面說(shuō)過(guò),每個(gè)對(duì)象都要握手,經(jīng)過(guò)2個(gè)
RTT才可以傳輸。而持續(xù)連接,則是用系統(tǒng)資源來(lái)?yè)Q取效率。
Q3:HTTP 報(bào)文格式
- 請(qǐng)求報(bào)文的格式:
-
請(qǐng)求行:方法字段、
URL字段、HTTP版本 - 請(qǐng)求頭(首部行):服務(wù)器要使用的附加信息
- 空行:請(qǐng)求頭后面必有空行
-
請(qǐng)求數(shù)據(jù):請(qǐng)求數(shù)據(jù)的主題。
Get方法是沒(méi)有的,放在了URL的參數(shù)中,POST方法放在表單中
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close //瀏覽器告訴服務(wù)器不要用持續(xù)鏈接,要求服務(wù)器在發(fā)送完請(qǐng)求對(duì)象后就關(guān)閉連接
User-agent: Mozilla/5.0 //指明用戶(hù)代理
Accept-language: fr //指明用戶(hù)得到對(duì)象的語(yǔ)言版本

2.響應(yīng)報(bào)文的格式:
-
狀態(tài)行:
HTTP版本、狀態(tài) - 響應(yīng)頭(首部行):發(fā)送日期,服務(wù)器相關(guān)信息等
- 空行:
- 響應(yīng)正文:響應(yīng)的數(shù)據(jù)正文

HTTP/1.1 200 OK
Connection: close
Date: Tue, 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)
常見(jiàn)狀態(tài)碼:
200:請(qǐng)求成功
301:請(qǐng)求的對(duì)象被轉(zhuǎn)移了,重定向的URL在響應(yīng)報(bào)文中
400:非法請(qǐng)求,丟棄
404:Not Found,被請(qǐng)求的文檔不在服務(wù)器上
505:服務(wù)器不支持請(qǐng)求報(bào)文使用的http版本
3.HTTP1.0 、HTTP1.1、HTTP2.0 之間的比較:
a.HTTP/1.0:
- 支持:
GET、POST、HEAD三種請(qǐng)求方法 - 無(wú)狀態(tài)
- 非持續(xù)連接
- 串行發(fā)送:前一個(gè)請(qǐng)求的響應(yīng)到達(dá),后一個(gè)請(qǐng)求才可以發(fā)送
b. HTTP/1.1:
當(dāng)前正在廣泛使用的版本
- 新增了:
OPTIONS、PUT、DELETE、TRACE、CONNECT五種HTTP請(qǐng)求方法 - 持續(xù)性連接(持久連接)
- 請(qǐng)求管道化(由于
TCP長(zhǎng)連接的存在,所以可以管道化) - 增加緩存處理
- 支持?jǐn)帱c(diǎn)傳輸、增加
Host字段
最重要的是 長(zhǎng)連接
c.HTTP/2.0:
- 二進(jìn)制分幀
- 多路復(fù)用(并行傳輸)
- 頭部壓縮
- 服務(wù)器推送
重點(diǎn)是可以并行傳輸
Q4:用戶(hù)和服務(wù)器的交互:cookie
之前說(shuō)過(guò),HTTP 是無(wú)狀態(tài)協(xié)議。但是 Web 站點(diǎn)為了 識(shí)別用戶(hù)身份 ,使用了 Cookie 技術(shù)。
Cookie 技術(shù)包含 4 個(gè)組件:
-
HTTP請(qǐng)求報(bào)文里增加一個(gè)關(guān)于Cookie的首部行 -
HTTP響應(yīng)報(bào)文里增加一個(gè)關(guān)于Cookie的首部行 - 客戶(hù)端系統(tǒng) 保留一個(gè)
Cookie文件,由瀏覽器保存維護(hù) -
Web站點(diǎn)建立Cookie和 用戶(hù)身份的關(guān)聯(lián)
很好理解,自然是請(qǐng)求報(bào)文和相應(yīng)報(bào)文都攜帶
Cookie,客戶(hù)端和服務(wù)器端都存有Cookie文件。即 本地保存,訪問(wèn)攜帶
Cookie 和 Session 的區(qū)別
簡(jiǎn)單來(lái)說(shuō),二者都是為了 Web 站點(diǎn) 識(shí)別用戶(hù)身份,Session 譯為 會(huì)話(huà),就是保存每一次客戶(hù)端和服務(wù)器端會(huì)話(huà)中的 用戶(hù)信息和用戶(hù)操作,是有時(shí)間限制的。
Session 會(huì)在服務(wù)器端有一個(gè) 類(lèi)似 HashTable 的數(shù)據(jù)來(lái)存放用戶(hù)數(shù)據(jù),瀏覽器第一次請(qǐng)求,生成一個(gè) HashTable 和對(duì)應(yīng) 的SessionID (用于標(biāo)識(shí)這個(gè) HashTable)。這個(gè) Session ID 一般在 30 分鐘后會(huì)自動(dòng)銷(xiāo)毀。
區(qū)別:
-
Cookie在客戶(hù)端,會(huì)被篡改,不安全。Session在服務(wù)器端 -
Cookie只能存String類(lèi)型對(duì)象,且容量小。Session可以存java對(duì)象,容量大。
Q5:Web 緩存器(代理服務(wù)器)
1.使用 Web 緩存器的 2 個(gè)主要原因:
- 降低延遲:緩存離客戶(hù)端更近,因此,從緩存請(qǐng)求內(nèi)容比從源服務(wù)器所用時(shí)間更少,呈現(xiàn)速度更快,網(wǎng)站就顯得更靈敏
- 降低網(wǎng)絡(luò)傳輸:副本被重復(fù)使用,大大降低了用戶(hù)的帶寬使用,其實(shí)也是一種變相的省錢(qián)(如果流量要付費(fèi)的話(huà)),同時(shí)保證了帶寬請(qǐng)求在一個(gè)低水平上,更容易維護(hù)了
2.工作過(guò)程


Q6:條件 get 方法
上述實(shí)現(xiàn)方式還有一個(gè)問(wèn)題就是無(wú)法保證本地存儲(chǔ)器內(nèi)的內(nèi)容是最新的,所以需要采用一種方式(條件性 GET 方法)來(lái)保證數(shù)據(jù)是最新版本。這個(gè)方法的基本思想就是本地代理服務(wù)器向 URL 目標(biāo)服務(wù)器發(fā)送一個(gè) GET 請(qǐng)求消息,這個(gè)消息里面包括了本地存儲(chǔ)資源的更新時(shí)間,在 URL 目標(biāo)服務(wù)器中,會(huì)用這個(gè)時(shí)間與最新版本的時(shí)間進(jìn)行比對(duì),如果時(shí)間一致就返回 304 Not Modified , 否則就返回 200 OK 和最新版本的資源。代理服務(wù)器接收到返回信息后會(huì)判斷這個(gè)返回碼,如果是 304,就直接返回給客戶(hù)給本地代理服務(wù)器存儲(chǔ)的資源;如果是 200 就把新接收到的資源返回給用戶(hù),同時(shí)更新代理服務(wù)器存儲(chǔ)的內(nèi)容。
三、文件傳輸協(xié)議 FTP
-
FTP的特點(diǎn):同HTTP一樣,也是運(yùn)行在TCP上的協(xié)議,但它采用了兩個(gè)并行的TCP連接來(lái)傳輸文件:
- 一個(gè)用于控制連接
- 一個(gè)用于數(shù)據(jù)連接
- 所以我們稱(chēng)其為帶外(
out-of-band)傳輸。另外,控制鏈接和持續(xù)整個(gè)過(guò)程,而每傳輸一個(gè)新文件,都需要新開(kāi)一條數(shù)據(jù)連接
四、因特網(wǎng)中的電子郵件
電子郵件的組成部分:
- 用戶(hù)代理
- 郵件服務(wù)器
- 簡(jiǎn)單郵件傳輸協(xié)議
SMTP

用戶(hù)代理允許用戶(hù)閱讀、回復(fù)、轉(zhuǎn)發(fā)、保存和撰寫(xiě)報(bào)文
郵件服務(wù)器組成了電子郵件體系結(jié)構(gòu)的核心
每個(gè)接收方在其中的某個(gè)服務(wù)器上有一個(gè)郵箱
郵箱包含用戶(hù)的到達(dá)報(bào)文、離開(kāi) (將發(fā)送) 郵件報(bào)文的報(bào)文隊(duì)列
在發(fā)送電子郵件報(bào)文的郵件服務(wù)器之間采用
SMTP協(xié)議。

SMTP 是因特網(wǎng)電子郵件中主要的應(yīng)用層協(xié)議。它使用 TCP 可靠數(shù)據(jù)傳輸服務(wù),從發(fā)送方的郵件服務(wù)器向接收方的郵件服務(wù)器發(fā)送郵件。
1、SMTP
- 使用
TCP從客戶(hù)機(jī)到服務(wù)器可靠地傳輸電子郵件報(bào)文,用端口25
直接傳輸:發(fā)送服務(wù)器到接收服務(wù)器
傳輸?shù)娜齻€(gè)階段:握手 (歡迎)、報(bào)文的傳輸、關(guān)閉
- 報(bào)文必須以 7 比特
ASCII格式
為了描述 SMTP 的基本操作,下面來(lái)模擬一下 Alice 給 Bob 發(fā)送一封簡(jiǎn)單的 ASCII 報(bào)文的過(guò)程:

Alice使用用戶(hù)代理寫(xiě)作報(bào)文并向 bob@someschool.edu 發(fā)送Alice的 用戶(hù)代理 向其郵件服務(wù)器發(fā)送報(bào)文;報(bào)文放置在報(bào)文隊(duì)列中SMTP的客戶(hù)機(jī)側(cè)打開(kāi)與Bob的郵件服務(wù)器的TCP連接SMTP通過(guò)TCP連接發(fā)送Alice的報(bào)文Bob的郵件服務(wù)器將該報(bào)文放入Bob的郵箱Bob調(diào)用其用戶(hù)代理(通過(guò)POP/POP3)來(lái)讀報(bào)文
2、SMTP 與 HTTP 的對(duì)比
HTTP: 拉協(xié)議SMTP: 推協(xié)議SMTP要求全部7位ASCII碼格式傳輸HTTP無(wú)此要求HTTP: 每個(gè)對(duì)象封裝在其自己的響應(yīng)報(bào)文中SMTP: 所有報(bào)文對(duì)象放在一個(gè)報(bào)文中
3、郵件訪問(wèn)協(xié)議
- 注意到
Bob的用戶(hù)代理不能使用SMTP來(lái)取回郵件,因?yàn)?strong>取郵件是一個(gè)拉操作,而SMTP是一個(gè)推協(xié)議。因此我們要引入郵件訪問(wèn)協(xié)議:
POP
POP協(xié)議支持 “離線” 郵件存儲(chǔ)轉(zhuǎn)發(fā)處理:客戶(hù)端程序連接服務(wù)器,下載所有未閱讀的電子郵件- 一旦將郵件從郵件服務(wù)器端送到客戶(hù)端上,郵件服務(wù)器上的郵件將會(huì)被刪除
POP3
POP3協(xié)議允許電子郵件客戶(hù)端下載服務(wù)器上的郵件- 但是在客戶(hù)端的操作(如移動(dòng)郵件、標(biāo)記已讀等),不會(huì)反饋到服務(wù)器上,比如通過(guò)客戶(hù)端收取了郵箱中的 3 封郵件并移動(dòng)到其他文件夾,郵箱服務(wù)器上的這些郵件是沒(méi)有同時(shí)被移動(dòng)的
IMAP的介紹,以及和 POP3 的區(qū)別
IMAP像POP3那樣提供了方便的郵件下載服務(wù),讓用戶(hù)能進(jìn)行離線閱讀IMAP和POP3是郵件訪問(wèn)最為普遍的Internet標(biāo)準(zhǔn)協(xié)議。不同的是:
-
IMAP提供Webmail與電子郵件客戶(hù)端之間的雙向通信,客戶(hù)端收取的郵件仍然保留在服務(wù)器上,同時(shí)在客戶(hù)端上的操作都會(huì)反饋到服務(wù)器上(如:刪除郵件,標(biāo)記已讀等,服務(wù)器上的郵件也會(huì)做相應(yīng)的動(dòng)作。所以無(wú)論從瀏覽器登錄郵箱或者客戶(hù)端軟件登錄郵箱,看到的郵件以及狀態(tài)都是一致的)。而POP3在客戶(hù)端的操作不會(huì)反饋到服務(wù)器上。 IMAP更好地支持了從多個(gè)不同設(shè)備中隨時(shí)訪問(wèn)新郵件-
IMAP提供的摘要瀏覽功能:可以讓你在閱讀完所有的郵件到達(dá)時(shí)間、主題、發(fā)件人、大小等信息后才作出是否下載的決定。 -
POP3需要下載未閱讀的郵件,IMAP可以不用把所有的郵件全部下載,而是通過(guò)客戶(hù)端直接對(duì)服務(wù)器上的郵件進(jìn)行操作。所有通過(guò)IMAP傳輸?shù)臄?shù)據(jù)都會(huì)被加密,從而保證通信的安全性。 IMAP整體上為用戶(hù)帶來(lái)更為便捷和可靠的體驗(yàn)。POP3更易丟失郵件或多次下載相同的郵件。
五、DNS:因特網(wǎng)的目錄服務(wù)
DNS提供的服務(wù)主要為主機(jī)名到IP地址的轉(zhuǎn)換DNS采用的是UDP
Q1:DNS 提供的其他服務(wù):
- 主機(jī)別名
有著復(fù)雜主機(jī)名的主機(jī)可以擁有一個(gè)或多個(gè)別名。原復(fù)雜主機(jī)名也叫規(guī)范主機(jī)名。主機(jī)別名(如果有的話(huà))比主機(jī)規(guī)范名更容易記憶。應(yīng)用程序可以調(diào)用
DNS來(lái)獲得主機(jī)別名對(duì)應(yīng)的規(guī)范主機(jī)名以及主機(jī)的IP地址
- 郵件服務(wù)器別名
同主機(jī)別名類(lèi)似,電子郵件應(yīng)用程序調(diào)用
DNS,對(duì)提供的郵件服務(wù)器別名進(jìn)行解析,以獲得該主機(jī)的規(guī)范主機(jī)名以及其IP地址。MX(Mail Exchanger,郵件交換)記錄允許一個(gè)公司的郵件服務(wù)器和Web服務(wù)器用相同的(別名化的)主機(jī)名
- 負(fù)載分配
DNS也用于在冗余的服務(wù)器(如冗余的Web服務(wù)器等)之間進(jìn)行負(fù)載分配。對(duì)于這些冗余的Web服務(wù)器,一個(gè)IP地址集合對(duì)應(yīng)于同一個(gè)規(guī)范主機(jī)名。DNS數(shù)據(jù)庫(kù)中存儲(chǔ)著這些IP地址集合。當(dāng)客戶(hù)機(jī)為映射到這個(gè)IP地址集合的名字發(fā)出一個(gè)DNS請(qǐng)求時(shí),該服務(wù)器用包含全部這些地址的報(bào)文回答,但在每個(gè)回答中旋轉(zhuǎn)這些地址排放順序。因?yàn)榭蛻?hù)機(jī)通??偸窍?IP地址排在最前面的服務(wù)器發(fā)送HTTP請(qǐng)求報(bào)文,所以DNS就在所有這些冗余的Web服務(wù)器之間旋轉(zhuǎn)分配負(fù)載。DNS旋轉(zhuǎn)同樣適用于郵件服務(wù)器,因此,多個(gè)郵件服務(wù)器可以具有相同的別名。
2、DNS 的工作原理
DNS 采用分布式的設(shè)計(jì)方案
下面是 DNS 服務(wù)器的部分層次結(jié)構(gòu)(由上到下,每層分別是根服務(wù)器、頂級(jí)域TLD 服務(wù)器、權(quán)威服務(wù)器)

1)分布式、層次數(shù)據(jù)庫(kù)
大致來(lái)說(shuō),有 3 種類(lèi)型的 DNS 服務(wù)器:根 DNS 服務(wù)器、頂級(jí)域(Top9 Level Domain,TLD)DNS 服務(wù)器和權(quán)威 DNS 服務(wù)器。
下面來(lái)詳細(xì)介紹一下這三種類(lèi)型的 DNS 服務(wù)器:
- 根
DNS服務(wù)器

- 頂級(jí)域
TLD服務(wù)器
負(fù)責(zé)
com,org,net,edu等,以及所有頂級(jí)國(guó)家域uk,fr,ca,jp,cn
- 權(quán)威
DNS服務(wù)器
組織的
DNS服務(wù)器為組織的服務(wù)器 (如Web和電子郵件) 提供對(duì)IP映射的權(quán)威主機(jī)名。 能夠由組織或服務(wù)提供商維護(hù)。
- 本地
DNS服務(wù)器
本地
DNS服務(wù)器嚴(yán)格來(lái)說(shuō)并不屬于DNS服務(wù)器的層次結(jié)構(gòu),但它對(duì)DNS層次結(jié)構(gòu)是很重要的。


在圖 1 的例子中用到了遞歸查詢(xún)和迭代查詢(xún)
從理論上,所有的 DNS 查詢(xún)既可以是迭代的也可以是遞歸的。例如,圖 2 顯示了一條 DNS 查詢(xún)鏈,其中所有查詢(xún)都是遞歸的
實(shí)際中,查詢(xún)通常遵循圖 1 中的模式:從請(qǐng)求主機(jī)到本地 DNS 服務(wù)器的查詢(xún)是遞歸的,其余查詢(xún)是迭代的
2)DNS 緩存
- 為了改善時(shí)延性能并減少在因特網(wǎng)上到處傳輸?shù)?
DNS報(bào)文數(shù)量,DNS廣泛使用緩存技術(shù)
- 原理:當(dāng)一個(gè)
DNS服務(wù)器接收一個(gè)DNS回答(例如,包含主機(jī)名到IP地址的映射)時(shí),DNS服務(wù)器能將回答中的信息緩存在本地存儲(chǔ)器。由于主機(jī)與主機(jī)名的IP地址映射決不是永久的,所以DNS服務(wù)器在一段時(shí)間后(通常設(shè)置為兩天)將丟棄緩存的信息
3)域名解析過(guò)程

六、P2P 應(yīng)用
問(wèn)題 : 從一個(gè)服務(wù)器向 N 個(gè)節(jié)點(diǎn)分發(fā)一個(gè)文件需要多長(zhǎng)時(shí)間?
(1)客戶(hù)機(jī) / 服務(wù)器:服務(wù)器串行地發(fā)送 N 個(gè)副本
- 時(shí)間:
NF/us - 客戶(hù)機(jī) i 需要 F/di 時(shí)間下載
(2)P2P:服務(wù)器必須發(fā)送一個(gè)副本
- 時(shí)間:
F/us - 客戶(hù)機(jī) i 需要
F/di時(shí)間下載 - 總共需要下載
NF比特 - 最快的可能上傳速率:
us + ∑ui



如果文章對(duì)您有一點(diǎn)幫助的話(huà),希望您能點(diǎn)一下贊,您的點(diǎn)贊,是我前進(jìn)的動(dòng)力
本文參考鏈接:
- 《計(jì)算機(jī)網(wǎng)絡(luò)-自頂向下方法》
- 應(yīng)用層 |《計(jì)算機(jī)網(wǎng)絡(luò):自頂向下方法》
- 《計(jì)算機(jī)網(wǎng)絡(luò)-自頂向下方法》第二章-應(yīng)用層 要點(diǎn)
- 《計(jì)算機(jī)網(wǎng)絡(luò)-自頂向下方法》重點(diǎn)筆記