<轉>網絡分層TCP/IP 與HTTP

轉載請注明出處:http://blog.csdn.net/hhcrazy12345/article/details/46682223
目前存在的兩種網絡分層模型:OSI模型和TCP/IP模型。OSI模型一共分為七層,TCP/IP模型和OSI模型類似,但是只分為四層。

<a name="t0" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>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.

<a name="t1" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>第七層——應用層(Application)

這里的“應用”要和應用程序相區別。

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

應用層的其他常用協議:

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

<a name="t2" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>第六層——表示層(Presentation)

這里的“表示”是指數據的表示。

該層的主要功能:轉換壓縮加密

工作在表示層的加密協議最常用的是SSL(Secure Sockets Layer)。加密協議并不一定需要工作在表示層,如IPSec(Internet Protocol Security,因特網協議安全)就工作在第三層網絡層中。

<a name="t3" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>第五層——會話層(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:數據可以同時雙向傳輸。

<a name="t4" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>第四層——傳輸層(Transport)

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

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

<a name="t5" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>TCP(Transmission Control Protocol,傳輸控制協議)

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

<a name="t6" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>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數據報時,會檢查它們的目標端口號,然后根據不同的目標端口號把數據分發給不同的應用程序(進程)。

<a name="t7" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>第三層——網絡層(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。

<a name="t8" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>第二層——數據鏈路層(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。

<a name="t9" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>第一層——物理層(Physical)

物理層位于OSI的底層,所有其他層的數據最終都必須經由物理層才能發送出去。物理層的功能包括:

  • 硬件規范的定義,如電纜、連接器、無線接收器等的工作方式,網卡、集線器(Hub)等網絡設備也工作在物理層。
  • 編碼和信號,物理層把計算機中的二進制0和1轉換成可以在物理介質上傳輸的信號。
  • 在把數據轉換成信號后(如對于雙絞線電纜則是電子脈沖信號),物理層負責信號的實際發送和接收。

<a name="t10" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>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模型中則位于網絡接口層。

<a name="t11" style="box-sizing: border-box; background: transparent; color: rgb(79, 161, 219); text-decoration: none; margin: 0px; padding: 0px; font-weight: normal; outline: none;"></a>總結

發送方應用程序的數據總是從最上層開始,層層向下,最終經由物理層發送出去;相應的,在接收方的物理層接收到數據后,層層向上,最終經由應用層分發到具體的應用程序進程中。
在數據層層向下的過程中,每一層都會對數據進行一些封裝處理(如打包或者編碼);而在數據層層向上的過程中,每一層都會對數據進行一些逆處理(如解包或者解碼)。這些對數據的處理和逆處理的過程就是為了實現該層的服務。

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.關閉連接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容

  • 個人認為,Goodboy1881先生的TCP /IP 協議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,086評論 0 8
  • 1.這篇文章不是本人原創的,只是個人為了對這部分知識做一個整理和系統的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,125評論 6 174
  • 1.1 TCP/IP協議組 TCP/IP協議(傳輸控制協議)由網絡層的IP協議和傳輸層的TCP協議組成 IP層負責...
    F麥子閱讀 2,808評論 0 25
  • 靈感來源于《做個勇敢的女孩》 記得剛參加工作時,家里人總是說外出工作了要大膽點,勇敢點。因為做的是教育工作,家里人...
    十三等于一閱讀 443評論 0 0
  • 定義 抽象工廠模式提供一個接口,用于創建相關或依賴對象的家族,而不需要明確指定具體類. 優點與缺點 優點:抽象工廠...
    Link913閱讀 562評論 0 0