目前存在的兩種網絡分層模型:OSI模型和TCP/IP模型。OSI模型一共分爲七層,TCP/IP模型和OSI模型相似,可是隻分爲四層。php
OSI的全程是Open Systems Interconncection,即開放系統互聯,它由ISO(International Organization for Standardization)制定。OSI是網絡通訊的一種通用框架,它分爲七層,而且定義了在每一層上數據的處理方法。html
層數 | 層名 | 備註 |
---|---|---|
7 | 應用層(Application) | |
6 | 表示層(Presentation) | |
5 | 會話層(Session) | |
4 | 傳輸層(Transport) | |
3 | 網絡層(Network) | 路由器 |
2 | 數據鏈路層(Data Link) | 交換機 |
1 | 物理層(Physical) | 網卡、集線器(Hub) |
英語速記:All People Seem To Need Data Processing.數據庫
這裏的「應用」要和應用程序相區別。
當用戶使用瀏覽器來打開網頁時,須要利用DNS提供的域名解析服務,來獲取網址對應的IP地址,而後再經過另一個協議HTTP來下載頁面內容。在這個過程當中出現的兩個協議(DNS和HTTP)都是工做在應用層上的協議。編程
應用層的其餘經常使用協議:瀏覽器
這裏的「表示」是指數據的表示。
該層的主要功能:轉換,壓縮和加密。
工做在表示層的加密協議最經常使用的是SSL(Secure Sockets Layer)。加密協議並不必定須要工做在表示層,如IPSec(Internet Protocol Security,因特網協議安全)就工做在第三層網絡層中。緩存
能夠把「會話」理解爲兩個應用程序進程之間的邏輯鏈接,兩個應用程序經過這個邏輯鏈接在一段時間內交換數據。會話層的做用就是爲建立、管理和終止會話提供必要的方法。這些方法通常以API(Application Program Interface,應用程序編程接口)的形式出現。經常使用的API由NetBIOS(Network Basic Input/Output System,網絡基本輸入/輸出系統)、RPC(Remote Procedure Call,遠程過程調用)和Socket API。安全
會話層還負責管理和肯定傳輸模式。計算機能夠由三種模式來傳輸數據:單向(Simplex)、半雙工(Half-Duplex)、全雙工(Full-Duplex)。服務器
傳輸層提供數據傳輸的服務。這裏的「傳輸」指的是端對端(End-to-End)或者主機對主機(Host-to-Host)的傳輸。網絡
傳輸層上最重要的兩個協議是TCP和UDP。TCP是面向鏈接的協議(Connection-Oriented),UDP是無鏈接的協議(Connection-Less)。框架
TCP在傳輸數據以前必須先創建一個鏈接。TCP作了不少工做來提供可靠的數據傳輸,包括創建、管理和終止鏈接,確認和重傳。同時TCP還提供分段和重組,流量控制(Flow Control)等。
UDP是一種簡單的傳輸層協議,因此它並不能提供可靠的數據傳輸。簡單地說,UDP只是把應用程序發給它的數據打包成一個UDP數據報(UDP Datagram),而後再把這個數據報傳給IP。
TCP會把應用程序發來的數據根據須要分紅若干個大小合適的TCP段(TCP Segment),而UDP卻只是簡單地把全部發送來的數據打包成一個UDP數據報,因此咱們在編寫使用UDP的程序時,不能一次性向UDP寫入太多數據,不然可能會致使IP分段的後果。
因爲可能有不少應用程序同時在使用TCP/UDP,它們都會把數據交給TCP/UDP,而TCP/UDP也會接收來自IP的、包含指向不一樣應用程序的數據,因此就須要有一種方法來區別(標識)應用程序,這種方法就是經過端口號(Port)來進行多路複用或多路分解。端口號是一個16位的二進制整數,其取值範圍是0~65535。
多路複用(Multiplexing)
多路複用是隻當應用程序把數據交給TCP或UDP時,TCP會把這些數據分紅若干個TCP段,UDP則會產生一個UDP數據報。在這些TCP段和UDP數據報中,會填入應用程序指定的源端口號和目標端口號,源端口號用於標識發送的應用程序(進程),目標端口號用於指明在目標機器上應該接收數據的目標應用程序。
多路分解(Demultiplexing)
多路分解是多路複用的逆過程。當在目標機器上的TCP或者UDP接收到TCP段和UDP數據報時,會檢查它們的目標端口號,而後根據不一樣的目標端口號把數據分發給不一樣的應用程序(進程)。
網絡層關心的主要是如何把數據從一個設備發送到另外一個設備。網絡層須要提供三個最基本的功能:地址、路由、分段和重組。同時還須要一些附加的功能,好比錯誤處理和診斷。
網絡層上最重要的協議IP(Internet Protocol),就是爲了這些功能而設計的。目前IP一共有兩個版本IPv4和IPv6。二者最主要的區別是使用了不一樣位數的二進制整數做爲地址:IPv4使用32位二進制地址,IPv6使用128位二進制地址。IPv4的地址表示方法通常爲用點隔開的4個數字,每一個數字的取值範圍是0~255,即一個字節的大小,如192.168.1.1。IPv6的表示方法爲用冒號隔開的8個字(word,16位二進制),每一個字都用十六進制來表示,如2012:0000:4528:7D76:3C2B:05AD:3F57:1C98。
網絡層關心的是如何把數據從一個設備發送到另一個設備,這另一個設備有可能在本地網絡中或者在一個很遠的網絡中。數據鏈路層關心的是如何把數據發送到本地網絡中去。咱們平時常說的LAN(Local Area Network,局域網)技術,如以太網(Ethernet)、令牌環網(Token Ring)、光纖分佈數據接口(FDDI)和802.11(WiFi)都定義在這一層。
數據鏈路層又分爲兩個子層:邏輯鏈路控制層(Logical Link Control)和介質訪問控制層(Media Access Control)。
數據鏈路層還有一個重要的概念,即MAC地址,也有人稱其爲物理地址、硬件地址、以太網地址等。每個網卡(Network Interface Card)都有一個惟一的MAC地址,數據鏈路層經過MAC地址來確保數據可以正確被髮送到目標設備。MAC地址是一個48位二進制整數,一般的表示方法是用-隔開的6個十六進制整數,如14-FE-B5-B0-2B-96。
物理層位於OSI的底層,全部其餘層的數據最終都必須經由物理層才能發送出去。物理層的功能包括:
TCP/IP模型分爲四層:應用層(Application)、傳輸層(Host-to-Host Transport)、互聯網層(Internet)、網絡接口層(Network Interface)。
在TCP/IP模型中並不包含物理層。另外,兩個重要的協議ARP(Address Resolution Protocol,地址解析協議)和RARP(Reverse Address Resolution Protocol,反向地址轉換協議),在OSI模型中通常被認爲是在位於第二層數據鏈路層和第三層網絡層之間,而在TCP/IP模型中則位於網絡接口層。
發送方應用程序的數據老是從最上層開始,層層向下,最終經由物理層發送出去;相應的,在接收方的物理層接收到數據後,層層向上,最終經由應用層分發到具體的應用程序進程中。
在數據層層向下的過程當中,每一層都會對數據進行一些封裝處理(如打包或者編碼);而在數據層層向上的過程當中,每一層都會對數據進行一些逆處理(如解包或者解碼)。這些對數據的處理和逆處理的過程就是爲了實現該層的服務。
TCP/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。關於TCP/IP和HTTP協議的關係,網絡有一段比較容易理解的介紹:「咱們在傳輸數據時,能夠只使用(傳輸層)TCP/IP協議,可是那樣的話,若是沒有應用層,便沒法識別數據內容,若是想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有不少,好比HTTP、FTP、TELNET等,也能夠本身定義應用層協議。WEB使用HTTP協議做應用層協議,以封裝HTTP 文本信息,而後使用TCP/IP作傳輸層協議將它發到網絡上。」
下面的圖表試圖顯示不一樣的TCP/IP和其餘的協議在最初OSI模型中的位置:
7 | 應用層 | 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP |
6 | 表示層 | 例如XDR、ASN.1、SMB、AFP、NCP |
5 | 會話層 | 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.22五、RPC、NetBIOS、ASP、Winsock、BSD sockets |
4 | 傳輸層 | 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL |
3 | 網絡層 | 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25 |
2 | 數據鏈路層 | 例如以太網、令牌環、HDLC、幀中繼、ISDN、ATM、IEEE 802.11、FDDI、PPP |
1 | 物理層 | 例如線路、無線電、光纖、信鴿 |
一、HTTP協議的幾個重要概念
1.鏈接(Connection):一個傳輸層的實際環流,它是創建在兩個相互通信的應用程序之間。
2.消息(Message):HTTP通信的基本單位,包括一個結構化的八元組序列並經過鏈接傳輸。
3.請求(Request):一個從客戶端到服務器的請求信息包括應用於資源的方法、資源的標識符和協議的版本號
4.響應(Response):一個從服務器返回的信息包括HTTP協議的版本號、請求的狀態(例如「成功」或「沒找到」)和文檔的MIME類型。
5.資源(Resource):由URI標識的網絡數據對象或服務。
6.實體(Entity):數據資源或來自服務資源的回映的一種特殊表示方法,它可能被包圍在一個請求或響應信息中。一個實體包括實體頭信息和實體的自己內容。
7.客戶機(Client):一個爲發送請求目的而創建鏈接的應用程序。
8.用戶代理(Useragent):初始化一個請求的客戶機。它們是瀏覽器、編輯器或其它用戶工具。
9.服務器(Server):一個接受鏈接並對請求返回信息的應用程序。
10.源服務器(Originserver):是一個給定資源能夠在其上駐留或被建立的服務器。
11.代理(Proxy):一箇中間程序,它能夠充當一個服務器,也能夠充當一個客戶機,爲其它客戶機創建請求。請求是經過可能的翻譯在內部或通過傳遞到其它的服務器中。一個代理在發送請求信息以前,必須解釋而且若是可能重寫它。
代理常常做爲經過防火牆的客戶機端的門戶,代理還能夠做爲一個幫助應用來經過協議處理沒有被用戶代理完成的請求。
12.網關(Gateway):一個做爲其它服務器中間媒介的服務器。與代理不一樣的是,網關接受請求就好象對被請求的資源來講它就是源服務器;發出請求的客戶機並無意識到它在同網關打交道。
網關常常做爲經過防火牆的服務器端的門戶,網關還能夠做爲一個協議翻譯器以便存取那些存儲在非HTTP系統中的資源。
13.通道(Tunnel):是做爲兩個鏈接中繼的中介程序。一旦激活,通道便被認爲不屬於HTTP通信,儘管通道多是被一個HTTP請求初始化的。當被中繼的鏈接兩端關閉時,通道便消失。當一個門戶(Portal)必須存在或中介(Intermediary)不能解釋中繼的通信時通道被常用。
14.緩存(Cache):反應信息的局域存儲。
2.發送請求
打開一個鏈接後,客戶機把請求消息送到服務器的停留端口上,完成提出請求動做。
HTTP/1.0 請求消息的格式爲:
請求消息=請求行(通用信息|請求頭|實體頭)CRLF[實體內容]
請求 行=方法 請求URL HTTP版本號 CRLF
方 法=GET|HEAD|POST|擴展方法
U R L=協議名稱+宿主名+目錄與文件名
請求行中的方法描述指定資源中應該執行的動做,經常使用的方法有GET、HEAD和POST。不一樣的請求對象對應GET的結果是不一樣的,對應關係以下:
對象 GET的結果
文件 文件的內容
程序 該程序的執行結果
數據庫查詢 查詢結果
HEAD??要求服務器查找某對象的元信息,而不是對象自己。
POST??從客戶機向服務器傳送數據,在要求服務器和CGI作進一步處理時會用到POST方法。POST主要用於發送HTML文本中FORM的內容,讓CGI程序處理。
一個請求的例子爲:
GEThttp://networking.zju.edu.cn/zju/index.htmHTTP/1.0 networking.zju.edu.cn/zju/index.htmHTTP/1.0 頭信息又稱爲元信息,即信息的信息,利用元信息能夠實現有條件的請求或應答。
請求頭??告訴服務器怎樣解釋本次請求,主要包括用戶能夠接受的數據類型、壓縮方法和語言等。
實體頭??實體信息類型、長度、壓縮方法、最後一次修改時間、數據有效期等。
實體??請求或應答對象自己。
3.發送響應
服務器在處理完客戶的請求以後,要向客戶機發送響應消息。
HTTP/1.0的響應消息格式以下:
響應消息=狀態行(通用信息頭|響應頭|實體頭) CRLF 〔實體內容〕
狀態行=HTTP版本號 狀態碼 緣由敘述
狀態碼錶示響應類型
1×× 保留
2×× 表示請求成功地接收
3×× 爲完成請求客戶需進一步細化請求
4×× 客戶錯誤
5×× 服務器錯誤
響應頭的信息包括:服務程序名,通知客戶請求的URL須要認證,請求的資源什麼時候能使用。
4.關閉鏈接
來源:CSDN