計算機網絡基礎
協議層及其服務模型
Q:爲什麼要分層?
A:因爲Internet非常複雜。 對於複雜的系統,分層有以下幾點好處:
- 使其結構非常清晰,清楚地知道各層之間的關係;
- 模塊化會使系統的維護、升級更見簡化,改變某一層服務的具體實現對系統其他部分透明(不影響)。
But: 分層也有弊端,因爲每一層可能都要重複較低層的功能。
參考模型
- ISO/OSI七層參考模型:
層號 | 層的名稱 |
---|---|
7 | 應用層 |
6 | 表示層 |
5 | 會話層 |
4 | 傳輸層 |
3 | 網絡層 |
2 | 數據鏈路層 |
1 | 物理層 |
- TCP/IP參考模型:
層號 | 層的名稱 |
---|---|
5 | 應用層 |
4 | 傳輸層 |
3 | 網絡層 |
2 | 數據鏈路層 |
1 | 物理層 |
- 兩種參考模型:ISO/OSI是理論上的標準,TCP/IP是事實上的標準。
網際協議棧
- 應用層:支持網絡應用,報文傳送。
HTTP,FTP,SMTP,STTP
- 傳輸層:主機進程間數據段傳送。
TCP,UDP
- 網絡層:主機(源目標節點)間分組傳送。
IP協議,路由協議
- 數據鏈路層:相鄰網絡節點間的數據幀傳送。
PPP,Ethernet,……
- 物理層:物理介質上的比特傳送
應用層
網絡應用程序體系結構
1. 客戶機/服務器體系結構
- 服務器主機總是打開
- 服務器具有固定的、衆所周知的IP地址
- 客戶機具有動態的IP地址
- 客戶機之間不能通信
2. P2P體系結構
- 沒有總是打開的服務器
- 任意一對主機之間可以直接通信
- 對等方間歇連接,可以改變IP地址
3. 客戶機/服務器和P2P混合體繫結構
- 文件在對等方之間相互交換、文件搜索通過服務器
- 兩個聊天用戶之間是P2P、註冊和查詢通過服務器
HTTP協議
網頁由許多對象組成,每一個對象都被一個URL(統一資源定位符)尋址:
HTTP: 超文本傳輸協議,Web的應用層協議,採用客戶機/服務器的模式。協議的本質是對信息傳輸內容和順序的約定。HTTP協議就約定了客戶端與服務器之間通信的標準。
HTTP是無狀態協議,服務器不維護客戶先前的狀態信息。也就是說:如果客戶機第一次登錄並且成功後,再第二次登錄,服務器仍然不會知道當前請求的是哪個用戶。
HTTP連接
- 非持久HTTP連接:每個TCP連接只傳送一個對象,下載多個對象需要創建多個TCP連接,HTTP/1.0使用非持久HTTP連接。
- 持久HTTP連接:一個TCP連接可傳送多個對象,HTTP/1.1默認使用持久HTTP連接。
HTTP報文格式
HTTP請求報文:
sp:空格,cr:回車,lf:換行,URI:統一資源標識符
URI與URL的區別: URL是URI的子集,它們都定義了資源是什麼。但有區別:URI可以唯一標識該對象,而URL不僅可以唯一標識該元素,還可以定位到它
,所以叫統一資源定位符。舉例:身份證號是URI,身份證地址+姓名是URL。
HTTP請求報文示例:
- HTTP/1.0方法:
GET:從服務器獲取指定數據
POST:向服務器傳送指定數據
HEAD:服務器收到請求時返回響應消息只包含HEAD頭部
,不包含請求對象主體 - HTTP/1.1方法:
GET、POST 、HEAD
PUT:文件在實體主體中被上載到URL指定的路徑
DELETE:刪除URL字段指定的文件
GET方法 vs POST方法:
- 本質定義。GET是從服務器獲取數據,POST是把需要處理的數據提交到服務器上。
- 安全性。GET方法將請求的數據加在URL後,用 ? 分隔URL和請求數據,多個參數用 & 連接,地址欄中可見,所以非常不安全;POST方法要傳送的數據在請求包的實體中,地址欄中不可見,比GET更安全。
- 傳輸數據大小。由於GET方法中請求的數據在URL後面,而URL長度是有限制的,不能超過
2KB
,因此GET傳輸的數據較少並且有限;但POST對數據大小沒有限制
。 - 有害性。瀏覽器後退或者刷新,GET方法不會產生什麼動作,也就是不會修改服務器數據,但POST會重新提交數據給服務器。
HTTP響應報文:
HTTP響應狀態碼:
HTTP響應狀態碼位於HTTP響應報文的第一行,常見的狀態碼有:
- 200 OK 請求成功,響應消息返回所請求的對象
- 204 No Content 請求成功,但是沒有數據。一般用在:只需要返回是否成功的情況。
- 301 Moved Permanently 請求對象已永久遷移,新的URL 在響應首部用字段
Location:
指出,瀏覽器接受到帶Location頭的響應時,就會跳轉到相應的地址。 - 302 表示臨時重定向。請求對象暫時遷移,新的URL 在響應首部用字段
Location:
指出,瀏覽器接受到帶Location頭的響應時,就會跳轉到相應的地址。 - 400 Bad Request 該請求不能被服務器解讀
- 404 Not Found 服務器上不存在所請求的對象
- 505 HTTP Version Not Supported
HTTP常見首部行:
請求報文:
- Host:請求的目標域名和端口號
- User-agent:向服務器發送瀏覽器的版本、系統、應用程序信息
Cookie
:當前域名下的cookie數據- Accept-language:向服務器聲明客戶機接收的語言版本
- Connection:告訴服務器採用什麼連接方式,例如Connection: Close 關閉默認的HTTP持久連接(用於HTTP/1.1)
響應報文:
- Connection
- Date:服務器發送資源時的服務器時間
- Server:HTTP服務器的應用程序信息
Location
:重定向,讓客戶端跳轉到新的URL進行訪問Last-Modified
:服務器發來的當前資源的最後一次修改時間
,如果下一次請求時,服務器上當前資源的修改時間比這個大(更晚),就返回新的資源內容。- Content-Length:消息實體的傳輸長度
- Content-Type:響應體的媒體資源類型(比如html類型,UTF-8編碼等等)
HTTP vs HTTPS
HTTP:是超文本傳輸協議,是以明文
方式傳輸數據的,沒有提供任何數據加密,並且不會驗證通信方的身份。
HTTPS:是安全套接字層超文本傳輸協議,是由SSL + HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比HTTP更加安全。
注意: HTTPS協議並非是應用層的一種新的協議,只是在HTTP通信接口部分用SSL協議代替
而已。原本HTTP與TCP之間直接進行通信,但加入SSL後就先是HTTP與SSL進行通信,再是SSL與TCP進行通信。
HTTP與HTTPS的區別:
- HTTPS協議需要到CA(電子認證服務)申請證書。
- HTTP是超文本傳輸協議,HTTPS是更安全的SSL加密傳輸協議。
- 使用完全不同的連接方式,端口也不同,HTTP使用
80端口
,而HTTPS使用443端口
。 - HTTP連接很簡單,是無狀態的;HTTPS是由
SSL + HTTP
構建的可進行加密傳輸、身份認證的更安全的網絡協議。
SSL協議
SSL:位於TCP/IP協議與各種應用層協議之間。
- SSL協議基本內容
- SSL記錄協議:建立在可靠傳輸協議的基礎之上(如TCP),爲高層協議提供數據封裝、壓縮、加密等基本功能。
- SSL握手協議:建立在SSL記錄協議之上,在數據傳輸之前,雙方進行身份驗證、協商加密算法、交換加密密鑰等。
- SSL協議原理
公鑰加密法
。客戶端向服務端索要公鑰,收到後用自己的私鑰加密信息,服務端收到密文後用自己的私鑰解密。
注意: 1999年把SSL協議標準化改名爲TLS(傳輸層安全協議),但這兩者其實是同一種協議,只是不同階段的稱呼而已。
Cookie和Session
- cookie:因爲HTTP請求是無狀態的,它不會認識當前的用戶是誰。cookie的出現就爲了解決這個問題。用戶第一次請求服務器時,服務器會返回一些數據(cookie)給瀏覽器,瀏覽器保存到本地,等下一次再請求服務器時就會
自動帶上本地的cookie數據
,服務器拿到這個數據就知道該請求用戶是誰了。但是cookie只能存少量數據,不同瀏覽器存儲大小不同,但一般不超過4KB。 - session:session和cookie的作用類似,都是爲了保存用戶相關的信息,但是不同的是:
session是保存在服務器上的
,cookie保存在本地瀏覽器
。保存在服務器上的session數據不容易被竊取,更加安全,但弊端是佔用了服務器的資源。
DNS:域名系統
I. DNS是什麼?
DNS,全稱爲Domain Name System,域名系統。是因特網的目錄服務,主機、路由器有多種標識符,包括主機名和IP地址。主機名是爲了方便人類記憶創建的,是拿給人看的,而IP地址纔是用於分組尋址的 ,因爲它是固定的長度:
32bit
,更加規範、路由器更加容易接受。所以我們需要一個轉換器,來將主機名轉換成IP地址。這時候DNS的作用就出現了,當然,DNS不僅只有這個功能。
- 從實體上來看:是一種由分層DNS服務器實現的分佈式數據庫
- 從協議上來看:是一種實現域名轉換的應用層協議
II. DNS提供什麼功能?
- 提供主機名到IP地址映射的查詢服務 (核心功能)
- 提供主機別名服務。 一個複雜的主機可能有一個
規範主機名
和多個主機別名,主機別名比規範主機名更容易記憶。DNS提供根據主機別名查找規範主機名的服務。 - 郵件服務器別名
- 負載分配。 對於被頻繁訪問的大型站點來說,它可能有多臺服務器,那這時主機與IP地址就不再是一一對應了,而是
一個主機名對應多個IP地址
。在大量的、連續多次訪問中,DNS通過旋轉IP地址來實現負載均衡。
當客戶機進行DNS請求時,DNS服務器便會把全部的IP地址放在響應報文中進行應答,但在不同的回答中它會旋轉這些IP地址的順序,客戶機總會向排在最前面的IP地址
發出請求。
III. DNS服務器:
- 根DNS服務器: 因特網上有13個根DNS服務器,其中大部分分佈在美洲。
- 頂級DNS服務器: 負責頂級域名
edu, gov, org, com
等和所有國家的頂級域名uk, fr, cn, jp
(edu教育機構域名,gov政府部門域名,org非盈利性的組織,com企業域名,uk英國,fr法國,cn中國,jp日本) - 權威DNS服務器: 在因特網上具有公共可訪問主機(如Web服務器和郵件服務器)的每個組織機構必須提供公共可訪問的DNS記錄,這些記錄將這些主機的名字映射爲IP地址。組織機構的權威DNS服務器負責保存這些DNS記錄。多數大學和公司維護它們的基本權威DNS服務器。
- 本地DNS服務器:
嚴格來說並不屬於DNS服務器的層次結構
,它起到一個代理的作用,將主機提交的請求轉發到層次結構中。
IV. DNS如何工作的?
DNS有兩種查詢方式:遞歸查詢
和迭代查詢
,從主機到本地DNS服務器是遞歸查詢,本地DNS服務器向另外三個服務器的查詢是迭代查詢。
我們以該圖爲例,來描述DNS的查詢過程,一共8條路徑(8份報文):
(主機cis.poly.edu想要查詢主機gaia.cs.umsaa.edu的IP地址)
- 主機
cis.poly.edu
向本地DNS服務器發送查詢報文 - 本地DNS服務器收到後向根DNS服務器
轉發
查詢報文 - 根DNS服務器注意到
edu
域名,返回負責edu的頂級DNS服務器的IP地址
- 本地DNS服務器根據收到的IP地址查詢頂級DNS服務器
- 頂級DNS服務器注意到
umass.edu
域名,返回負責umass.edu的權威DNS服務器的IP地址
。該權威DNS服務器是負責馬薩諸塞大學的dns.cs.umass.edu
- 本地DNS服務器根據收到的IP地址查詢權威DNS服務器dns.cs.umass.edu
- 權威DNS服務器dns.cs.umass.edu將使用
gaia.cs.umass.edu
的IP地址
作爲響應,返回給本地DNS服務器 - 本地DNS服務器將 包含所查詢IP地址的報文 返回給主機
cis.poly.edu
由此可見, 在迭代查詢過程中,被查詢的名字服務器回覆可以被查詢的名字服務器的IP地址。也就是說,它總是在告訴本地DNS服務器:“我不知道它的名字,但是你可以問服務器xxx”
。
(待更新……)