網絡應用
計算機網絡應用體系結構
客戶/服務器(C/S)結構網絡應用
最典型、最基本 的網絡應用
特點:
網絡通信雙方分為 客戶程序 和 服務器程序嘱能,用戶與用戶之間不進行直接通信仓洼;
服務器程序先運行,做好接收通信的準備;
客戶程序后運行暮刃,主動與服務器進行通信。
純P2P結構網絡應用
P2P:Peer to Peer (Peer:對等端)
通信雙方沒有傳統(tǒng)意義上的客戶服務器之分爆土,地位對等椭懊,通信雙方都具備客戶與服務器的特征。
混合接口網絡應用
C/S應用和P2P應用的混合應用
網絡應用通信的基本原理
運行在不同主機上的 應用進程 間以 C/S方式 進行通信步势。
網絡應用編程接口
套接字(Socket):
典型的網絡應用編程接口
端口號:
標識套接字的編號
域名系統(tǒng)(DNS)
域名解析:
將 域名 映射為 IP地址
域名解析的原理:
為了實現(xiàn)域名解析氧猬,域名系統(tǒng)會建立 分布式 數(shù)據(jù)庫,存儲 域名與IP地址的映射關系 數(shù)據(jù)
層次化域名空間
命名方式:
層次樹狀接口命名方式坏瘩。每個域名由不同級別的域名構成盅抚,各個層級域名之間用 點 隔開
頂級域名的分類:
國家頂級域名:cn, us, uk 等
通用頂級域名:com, org, gov, edu 等
基礎結構域名:只有一個(arpa,反響域名解析)
域名服務器
根據(jù)其主要保存的域名信息以及在域名解析過程的作用
本地(默認)域名服務器:
主機在網絡地址配置時倔矾,都會配置的妄均,用于保存被查詢過域名的信息
根域名服務器:
最重要 的服務器柱锹,全球由 13 個,保存所有 頂級域名服務器的域名 和 IP地址
頂級域名服務器:
負責管理在該頂級域名服務器注冊的所有二級域名
中間域名服務器:
不是 根域名服務器 頂級域名服務器 權威域名服務器 的域名服務器
權威域名服務器:
保存該區(qū)中的所有主機的域名和IP地址的映射
區(qū):一個服務器所負責管轄的范圍
DNS服務器:管轄范圍不以“域”為單位丰包,而已“區(qū)”為單位
域名解析過程
遞歸解析:
主機進行域名查詢時禁熏,本地域名服務器沒有被查詢域名信息,則本地域名服務器 代理主機 查詢根域名服務器邑彪。根域名服務器代理本地域名服務器查詢下一個域名服務瞧毙,以此類推。直到得到被查詢域名的IP地址寄症,最后將解析結果發(fā)送給主機宙彪。
迭代解析:
主機進行域名查詢時,本地域名服務器沒有被查詢域名信息瘸爽,則先求助于根域名服務器您访。根域名服務器只是將下一步要查詢的服務器服務器告知查詢主機的本地域名服務器,本地域名服務器繼續(xù)查詢下一個域名服務器剪决,直到查詢到被查詢的域名的IP地址灵汪。
萬維網應用
萬維網應用結構
瀏覽器:
Web應用的客戶代理(客戶端軟件)
Web服務器:
存儲管理供用戶請求瀏覽的Web頁面(Web文檔)
超文本傳輸協(xié)議(HTTP):
客戶和服務器間的交互基于的協(xié)議
URL
統(tǒng)一資源定位符(Universal Resource Locator, URL)
URL地址:
存放對象的 主機域名(或IP地址)+ 對象的路徑名
HTTP
Web應用的應用層協(xié)議,定義瀏覽器如何向Web服務器發(fā)送請求柑潦,以及Web服務器如何進行響應享言。
RTT:
作為一個時間單位來使用。
例如:HTTP客戶進程向服務器請求建立連接:從客戶發(fā)送連接請求渗鬼,到客戶收到服務器連接確認览露,用時一個 往返時間(Round Trip Time, RTT)
HTTP連接
HTTP基于傳輸層的 TCP 傳輸報文。瀏覽器在向服務器發(fā)送請求之前譬胎,首先建立TCP連接差牛,然后才發(fā)送HTTP請求報文,接口HTTP響應報文堰乔。
根據(jù)TCP策略不同偏化,可以分為:
非持久連接的HTTP:
客戶端與服務器建立TCP連接后,通過該連接發(fā)送HTTP請求報文镐侯,接收HTTP響應報文侦讨,然后斷開TCP連接。(建一次苟翻,斷一次)
分為:一條連接韵卤、多條連接(并行連接)
使用:HTTP1.0
持久連接HTTP:
分為:非流水方式持久連接、流水方式持久連接
使用:HTTP1.x崇猫、HTTP2.0
HTTP1.1使用持久連接的4條約束和規(guī)則:
- 如果客戶端不期望在連接上發(fā)送其他請求沈条,則應該在最后一條請求報文中包含connection:close首部行
- 如果客戶端在收到的響應報文中包含connection:close首部行,則客戶端不能再在這條連接上發(fā)送更多的請求
- 每個持久連接只適用于一跳傳輸邓尤,HTTP/1.1代理必須能夠分別管理與客戶端和服務器的持久連接
- HTTP/1.1代理服務器不應該與HTTP/1.0客戶端建立持久連接
以請求瀏覽一個引用3張JPEG小圖片的Web頁面為例:
一條連接:
8RTT = 1 * 2RTT + 3 * 2RTT
析:
1 * 2RTT拍鲤,代表獲取頁面需要的時間贴谎,為:建立TCP連接的時間 + 獲取頁面的響應報文時間
3 * 2RTT汞扎,請求3張圖片的時間季稳,串行建立HTTP連接
多條連接(并行連接):
4RTT = 1 * 2RTT + 1 * 2RTT
析:
1 * 2RTT,代表獲取頁面需要的時間澈魄,為:建立TCP連接的時間 + 獲取頁面的響應報文時間
1 * 2RTT景鼠,請求3張圖片的時間,并行建立HTTP連接
非流水方式持久連接:
5RTT = 1 * 2RTT + 3RTT
析:
1 * 2RTT痹扇,代表獲取頁面需要的時間铛漓,為:建立TCP連接的時間 + 獲取頁面的響應報文時間
3RTT,請求3張圖片的時間鲫构,沒有斷開TCP連接浓恶,只需要串行獲取圖片報文
流水方式持久連接:
3RTT = 1 * 2RTT + 1RTT
析:
1 * 2RTT,代表獲取頁面需要的時間结笨,為:建立TCP連接的時間 + 獲取頁面的響應報文時間
1RTT包晰,請求3張圖片的時間,沒有斷開TCP連接炕吸,并行獲取圖片報文
HTTP報文
請求報文:瀏覽器發(fā)送給Web服務器
響應報文:Web服務器發(fā)送瀏覽器
請求報文 | 響應報文 | |
---|---|---|
起始行 | 請求行:<方法><URL><協(xié)議版本> | 請求行:<協(xié)議版本><狀態(tài)碼><短語> |
首部行 | 攜帶附加信息 | 攜帶附加信息 |
空白行 | CRLF | CRLF |
報文主體 | 一般沒有 | 一般沒有 |
CRLF:
CR:回車
LF:換行
典型的HTTP請求方法:
方法 | 含義 |
---|---|
GET | 請求讀取由URL所標識的信息伐憾,是最常見的方法 |
HEAD | 請求讀取由URL所標識的信息的首部 |
POST | 給服務器添加注冊信息 |
OPTION | 請求一些選項的信息 |
PUT | 在指明的URL下存儲一個文檔 |
常見的HTTP狀態(tài)碼:
狀態(tài)碼 | 短語 | 說明 |
---|---|---|
100 | Continue | 已成功收到了請求的初始部分,請客戶端繼續(xù) |
200 | OK | 成功赫模,所請求信息在響應報文中 |
301 | Moved Permanently | 重定向 |
400 | Bad Request | 客戶端請求錯誤 |
401 | Unauthorized | 未授權树肃,需要輸入用戶名和密碼 |
404 | Not Found | 客戶端請求的對象,在服務器上不存在 |
451 | Unsupported Media Type | 不支持的媒體類型 |
505 | HTTP Version Not Supported | 請求使用的HTTP版本瀑罗,服務器不支持 |
狀態(tài)碼類別 | 取值范圍 | 作用 | 說明 |
---|---|---|---|
1xx | 100-199 | 信息提示 | 通告信息胸嘴,可能還需要進一步的交互 |
2xx | 200-299 | 成功 | 成功完成客戶端請求的操作,并進行響應 |
3xx | 300-399 | 重定向 | 資源已移走斩祭,需要向新的URL發(fā)請求 |
4xx | 400-499 | 客戶端錯誤 | 由于客戶端請求錯誤劣像,無法成功響應 |
5xx | 500-599 | 服務器錯誤 | 由于服務器錯誤,無法成功響應 |
Cookie
小型文本文件(Cookie):
網站為了辨別用戶身份停忿,進行會話跟蹤而儲存在 用戶本地終端 上的數(shù)據(jù)驾讲。
HTTP服務器不保存客戶的任何信息,被稱為 無狀態(tài)協(xié)議
Cookie技術主要包括4部分內容:
步驟 | 操作 |
---|---|
1 | HTTP響應報文中的Cookie頭行:用戶的Cookie ID席赂,用戶偏好等 |
2 | 用戶瀏覽器在本地存儲吮铭、維護和管理Cookie文件 |
3 | HTTP請求報文中的Cookie頭行:用戶已訪問過的網站再次訪問時,瀏覽器會檢索本地Cookie文件 |
4 | 網站在后臺數(shù)據(jù)庫中存儲颅停、維護Cookie信息:分配用戶ID谓晌、每個ID用戶在本網站的訪問特征等 |
Cookie技術最常見的用途:
- 統(tǒng)計網站的實際訪問人數(shù)、新訪問者和重復訪問者的人數(shù)對比癞揉、訪問者的訪問頻率等數(shù)據(jù)
- 限制某些特定用戶的訪問
- 存儲用戶訪問過程中的操作習慣和偏好
- 記錄用戶登錄網站使用的用戶名纸肉、密碼等信息
- 電子商務網站可以利用Cookie實現(xiàn)“購物車”功能溺欧。
Internet電子郵件
郵件系統(tǒng)結構
郵件服務器:
電子郵件體系結構的核心
用戶代理:
電子郵件應用的客戶端軟件
SMTP(簡單郵件傳輸協(xié)議):
英文全稱:Simple Mail Transfer Protocol,Internet電子郵件中 應用層 協(xié)議
郵件讀取協(xié)議(POP3柏肪、IMAP姐刁、HTTP):
POP3:第三版郵局協(xié)議
IMAP:互聯(lián)網郵件訪問協(xié)議
HTTP:Web郵件系統(tǒng)的郵件讀取協(xié)議
SMTP(簡單郵件傳輸協(xié)議)
實現(xiàn)郵件服務器之間或用戶代理到郵件服務器之間的 郵件傳輸
SMTP通過 3個階段 的應用層交互完成郵件的傳輸:
握手階段、郵件傳輸階段烦味、關閉階段
SMTP定義了 14條命令聂使,每條命令用4個字母組成,例如:
HELO:標識發(fā)送人自己的身份
DATA:通知服務器準備開始發(fā)送郵件內容
QUIT:命令退出
SMTP定義了21中簡答信息谬俄,由3位數(shù)字的代碼開始柏靶,后面附上(也可不附)簡單的文字說明
SMTP的特點:
- 只能傳送 7位ASCII碼 文本內容,包括SMTP命令溃论、應答消息以及郵件內容
- 郵件內容不能包含 CRLF.CRLF屎蜓,因為該信息用于標識郵件內容的結束
- SMTP是 推動 協(xié)議(補充:HTTP是 推送 協(xié)議)
- 使用的TCP連接是 持久 的
電子郵件格式與MIME
傳輸 非7位ASCII碼 文本內容時,必須依據(jù)一個 標準(MIME) 將文本內容轉換為 7位ASCII碼 文本內容钥勋,然后再傳輸
MIME:
互聯(lián)網郵件擴展(Multipurpose Internet Mail Extensions)
電子郵件格式:
首部炬转、空白行、行主體
郵件中常見的首部行內容:
含義 | 是否必填 | |
---|---|---|
To | 收件人的電子郵件地址 | 是 |
Subject | 郵件的主題 | |
Cc | 表示應給某某人發(fā)送一個郵件副本 | |
From | 表示發(fā)信人的電子郵件地址 | |
Date | 發(fā)新日期 | |
Reply-To | 對方回信所用的地址 |
郵件讀取協(xié)議
IMAP | POP3 | |
---|---|---|
相同點 | 郵件讀取協(xié)議 | 郵件讀取協(xié)議 |
不同點 | 對郵件的操作 會反映 在服務器上 | 對郵件的操作 不會反映 在服務器上 |
FTP
文件傳送協(xié)議(File Transfer Protocol, FTP)笔诵,在互聯(lián)網的兩個主機點實現(xiàn) 文件互傳 的網絡應用的應用層協(xié)議
FTP專門使用一個 獨立的控制連接傳輸控制信息返吻,與傳輸文件信息進行分離,所以將FTP這種控制信息的傳送方式稱為 帶外控制
FTP是 有狀態(tài) 協(xié)議
FTP會話形式是客戶向服務器發(fā)送命令乎婿,服務器發(fā)送狀態(tài)碼和短語作為應答
FTP的命令和應答都是7為ASCII碼格式再控制連接上傳送的测僵,因此,FTP的命令和應答都是讀的
不需要專門的用戶名和命令就可以登錄的FTP服務器稱為 匿名 服務器
FTP 應用結構
主進程:
負責接受新的客戶請求谢翎,使用 控制連接(永久) 進行用戶登錄捍靠,服務器授權
從屬進程:
負責處理單個客戶請求,與具體客戶進行交互森逮,使用 數(shù)據(jù)連接(臨時) 進行文件傳輸
P2P應用
P2P(Peer to Peer)通信雙方沒有傳統(tǒng)意義上的客戶服務器之分榨婆,地位對等,通信雙方都具備客戶與服務器的特征
P2P應用特點
- 應用的對等方是用戶的計算機
- 很強的應用規(guī)模伸縮性
- 應用在對等方之間進行
- 應用充分聚集利用了端系統(tǒng)的計算能力以及網絡傳輸帶寬
Socket編程基礎
套接字(Socket):典型的網絡應用編程接口
端口號:標識套接字
常見的端口號:
端口號 | 描述 |
---|---|
20(數(shù)據(jù))褒侧、21(控制) | FTP文件傳輸協(xié)議 |
25 | SMTP簡單郵件傳輸協(xié)議 |
53 | DNS域名服務器 |
80 | HTTP超文本傳輸協(xié)議 |
110 | POP3第三版的郵局協(xié)議 |
Socket API 函數(shù)
創(chuàng)建套接字:socket()
套接字類型 | |
---|---|
傳輸層 UDP | 數(shù)據(jù)報類型套接字 SOCK_DGRAM |
傳輸層 TCP | 流式套接字 SOCK_STREAM |
網絡層 | 原始套接字 SOCK_RAW |
綁定套接字的本地端點地址:bind()
設置監(jiān)聽:listen()
建立連接:TCP客戶端:connect()
良风、TCP服務端:accept()
接受數(shù)據(jù):TCP:recv()
、UDP:recvfrom
發(fā)送數(shù)據(jù):TCP:send()
闷供、UDP:sendto
關閉套接字:close()
補充信息
帶內控制協(xié)議:
命令烟央、數(shù)據(jù)通過一個TCP連接傳輸?shù)膽脤訁f(xié)議,例如:HTTP
帶外控制協(xié)議:
專門使用一個獨立的控制連接傳輸控制信息歪脏,與傳輸文件信息進行分離疑俭,例如:FTP