網路分層TCP/IP 與HTTP

MinGRn發表於2018-03-02

目前存在的兩種網路分層模型:OSI模型和TCP/IP模型。OSI模型一共分為七層,TCP/IP模型和OSI模型類似,但是隻分為四層。

OSI模型

OSI的全程是Open Systems Interconncection,即開放系統互聯,它由ISO(International Organization for Standardization)制定。OSI是網路通訊的一種通用框架,它分為七層,並且定義了在每一層上資料的處理方法。

層數層名備註
7應用層(Application)
6表示層(Presentation)
5會話層(Session)
4傳輸層(Transport)
3網路層(Network)路由器
2資料鏈路層(Data Link)交換機
1物理層(Physical)網路卡、集線器(Hub)

英語速記:All People Seem To Need Data Processing.

第七層——應用層(Application)

這裡的“應用”要和應用程式相區別。
當使用者使用瀏覽器來開啟網頁時,需要利用DNS提供的域名解析服務,來獲取網址對應的IP地址,然後再通過另外一個協議HTTP來下載頁面內容。在這個過程中出現的兩個協議(DNS和HTTP)都是工作在應用層上的協議。

應用層的其他常用協議:

  • FTP:檔案傳輸協議,用來在客戶機和FTP伺服器之間傳輸檔案。
  • DHCP:動態主機配置協議,DHCP伺服器為客戶機動態分配IP地址。
  • POP3:郵件接收協議,用於從POP3伺服器接收郵件。
  • SMTP:郵件傳送協議,使用者通過SMTP伺服器傳送郵件。

第六層——表示層(Presentation)

這裡的“表示”是指資料的表示。
該層的主要功能:轉換壓縮加密
工作在表示層的加密協議最常用的是SSL(Secure Sockets Layer)。加密協議並不一定需要工作在表示層,如IPSec(Internet Protocol Security,因特網協議安全)就工作在第三層網路層中。

第五層——會話層(Session)

可以把“會話”理解為兩個應用程式程式之間的邏輯連線,兩個應用程式通過這個邏輯連線在一段時間內交換資料。會話層的作用就是為建立、管理和終止會話提供必要的方法。這些方法一般以API(Application Program Interface,應用程式程式設計介面)的形式出現。常用的API由NetBIOS(Network Basic Input/Output System,網路基本輸入/輸出系統)、RPC(Remote Procedure Call,遠端過程呼叫)和Socket API。

會話層還負責管理和確定傳輸模式。計算機可以由三種模式來傳輸資料:單向(Simplex)、半雙工(Half-Duplex)、全雙工(Full-Duplex)。

  • Simplex:資料只可以單向傳輸。
  • Half-Duplex:允許資料單向傳輸,但是一個時刻只能有一個方向傳輸,不能同時雙向傳輸。
  • Full-Duplex:資料可以同時雙向傳輸。

第四層——傳輸層(Transport)

傳輸層提供資料傳輸的服務。這裡的“傳輸”指的是端對端(End-to-End)或者主機對主機(Host-to-Host)的傳輸。

傳輸層上最重要的兩個協議是TCP和UDP。TCP是面向連線的協議(Connection-Oriented),UDP是無連線的協議(Connection-Less)。

TCP(Transmission Control Protocol,傳輸控制協議)

TCP在傳輸資料之前必須先建立一個連線。TCP做了很多工作來提供可靠的資料傳輸,包括建立、管理和終止連線,確認和重傳。同時TCP還提供分段和重組,流量控制(Flow Control)等。

UDP(User Datagram Protocol,使用者資料包協議)

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資料包時,會檢查它們的目標埠號,然後根據不同的目標埠號把資料分發給不同的應用程式(程式)。

第三層——網路層(Network)

網路層關心的主要是如何把資料從一個裝置傳送到另一個裝置。網路層需要提供三個最基本的功能:地址路由分段和重組。同時還需要一些附加的功能,比如錯誤處理和診斷。

網路層上最重要的協議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。

第二層——資料鏈路層(Data Link)

網路層關心的是如何把資料從一個裝置傳送到另外一個裝置,這另外一個裝置有可能在本地網路中或者在一個很遠的網路中。資料鏈路層關心的是如何把資料傳送到本地網路中去。我們平時常說的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。

第一層——物理層(Physical)

物理層位於OSI的底層,所有其他層的資料最終都必須經由物理層才能傳送出去。物理層的功能包括:

  • 硬體規範的定義,如電纜、聯結器、無線接收器等的工作方式,網路卡、集線器(Hub)等網路裝置也工作在物理層。
  • 編碼和訊號,物理層把計算機中的二進位制0和1轉換成可以在物理介質上傳輸的訊號。
  • 在把資料轉換成訊號後(如對於雙絞線電纜則是電子脈衝訊號),物理層負責訊號的實際傳送和接收。

TCP/IP模型

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代表傳輸控制協議/網際協議,指的是一系列協議。“IP”代表網際協議,TCP和UDP使用該協議從一個網路傳送資料包到另一個網路。把IP想像成一種高速公路,它允許其它協議在上面行駛並找到到其它電腦的出口。TCP和UDP是高速公路上的“卡車”,它們攜帶的貨物就是像HTTP,檔案傳輸協議FTP這樣的協議等。
你應該能理解,TCP和UDP是FTP,HTTP和SMTP之類使用的傳輸層協議。雖然TCP和UDP都是用來傳輸其他協議的,它們卻有一個顯著的不同:TCP提供有保證的資料傳輸,而UDP不提供。這意味著TCP有一個特殊的機制來確保資料安全的不出錯的從一個端點傳到另一個端點,而UDP不提供任何這樣的保證。
HTTP(超文字傳輸協議)是利用TCP在兩臺電腦(通常是Web伺服器和客戶端)之間傳輸資訊的協議。客戶端使用Web瀏覽器發起HTTP請求給Web伺服器,Web伺服器傳送被請求的資訊給客戶端。
如下圖所示:http是應用層協議,主要用於包裝資料.tcp/ip為傳輸層協議,只負責傳送任何格式的資料到網路上.

  下面的圖表試圖顯示不同的TCP/IP和其他的協議在最初OSI模型中的位置:

7應用層例如HTTPSMTPSNMPFTPTelnetSIPSSHNFSRTSPXMPPWhoisENRP
6表示層例如XDRASN.1SMBAFPNCP
5會話層例如ASAPTLSSSH、ISO 8327 / CCITT X.225、RPCNetBIOSASPWinsockBSD sockets
4傳輸層例如TCPUDPRTPSCTPSPXATPIL
3網路層例如IPICMPIGMPIPXBGPOSPFRIPIGRPEIGRPARPRARPX.25
2資料鏈路層例如乙太網令牌環HDLC幀中繼ISDNATMIEEE 802.11FDDIPPP
1物理層例如線路無線電光纖信鴿

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


相關文章