轉載請注明出處:http://blog.csdn.net/hhcrazy12345/article/details/46682223
目前存在的兩種網(wǎng)絡分層模型: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疤估,即開放系統(tǒng)互聯(lián)思灌,它由ISO(International Organization for Standardization)制定。OSI是網(wǎng)絡通信的一種通用框架舌仍,它分為七層妒貌,并且定義了在每一層上數(shù)據(jù)的處理方法。
層數(shù) | 層名 | 備注 |
---|---|---|
7 | 應用層(Application) | |
6 | 表示層(Presentation) | |
5 | 會話層(Session) | |
4 | 傳輸層(Transport) | |
3 | 網(wǎng)絡層(Network) | 路由器 |
2 | 數(shù)據(jù)鏈路層(Data Link) | 交換機 |
1 | 物理層(Physical) | 網(wǎng)卡铸豁、集線器(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)
這里的“應用”要和應用程序相區(qū)別灌曙。
當用戶使用瀏覽器來打開網(wǎng)頁時,需要利用DNS提供的域名解析服務节芥,來獲取網(wǎng)址對應的IP地址在刺,然后再通過另外一個協(xié)議HTTP來下載頁面內容。在這個過程中出現(xiàn)的兩個協(xié)議(DNS和HTTP)都是工作在應用層上的協(xié)議头镊。
應用層的其他常用協(xié)議:
- FTP:文件傳輸協(xié)議蚣驼,用來在客戶機和FTP服務器之間傳輸文件。
- DHCP:動態(tài)主機配置協(xié)議相艇,DHCP服務器為客戶機動態(tài)分配IP地址颖杏。
- POP3:郵件接收協(xié)議,用于從POP3服務器接收郵件坛芽。
- SMTP:郵件發(fā)送協(xié)議输玷,用戶通過SMTP服務器發(fā)送郵件队丝。
<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)
這里的“表示”是指數(shù)據(jù)的表示。
該層的主要功能:轉換欲鹏,壓縮和加密机久。
工作在表示層的加密協(xié)議最常用的是SSL(Secure Sockets Layer)。加密協(xié)議并不一定需要工作在表示層赔嚎,如IPSec(Internet Protocol Security膘盖,因特網(wǎng)協(xié)議安全)就工作在第三層網(wǎng)絡層中。
<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)
可以把“會話”理解為兩個應用程序進程之間的邏輯連接尤误,兩個應用程序通過這個邏輯連接在一段時間內交換數(shù)據(jù)侠畔。會話層的作用就是為創(chuàng)建、管理和終止會話提供必要的方法损晤。這些方法一般以API(Application Program Interface软棺,應用程序編程接口)的形式出現(xiàn)。常用的API由NetBIOS(Network Basic Input/Output System尤勋,網(wǎng)絡基本輸入/輸出系統(tǒng))喘落、RPC(Remote Procedure Call,遠程過程調用)和Socket API最冰。
會話層還負責管理和確定傳輸模式瘦棋。計算機可以由三種模式來傳輸數(shù)據(jù):單向(Simplex)、半雙工(Half-Duplex)暖哨、全雙工(Full-Duplex)赌朋。
- Simplex:數(shù)據(jù)只可以單向傳輸。
- Half-Duplex:允許數(shù)據(jù)單向傳輸篇裁,但是一個時刻只能有一個方向傳輸沛慢,不能同時雙向傳輸。
- Full-Duplex:數(shù)據(jù)可以同時雙向傳輸达布。
<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)
傳輸層提供數(shù)據(jù)傳輸?shù)姆盏呓埂_@里的“傳輸”指的是端對端(End-to-End)或者主機對主機(Host-to-Host)的傳輸。
傳輸層上最重要的兩個協(xié)議是TCP和UDP往枣。TCP是面向連接的協(xié)議(Connection-Oriented)伐庭,UDP是無連接的協(xié)議(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分冈,傳輸控制協(xié)議)
TCP在傳輸數(shù)據(jù)之前必須先建立一個連接圾另。TCP做了很多工作來提供可靠的數(shù)據(jù)傳輸,包括建立雕沉、管理和終止連接集乔,確認和重傳。同時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尤溜,用戶數(shù)據(jù)報協(xié)議)
UDP是一種簡單的傳輸層協(xié)議,所以它并不能提供可靠的數(shù)據(jù)傳輸汗唱。簡單地說宫莱,UDP只是把應用程序發(fā)給它的數(shù)據(jù)打包成一個UDP數(shù)據(jù)報(UDP Datagram),然后再把這個數(shù)據(jù)報傳給IP哩罪。
TCP會把應用程序發(fā)來的數(shù)據(jù)根據(jù)需要分成若干個大小合適的TCP段(TCP Segment)授霸,而UDP卻只是簡單地把所有發(fā)送來的數(shù)據(jù)打包成一個UDP數(shù)據(jù)報,所以我們在編寫使用UDP的程序時际插,不能一次性向UDP寫入太多數(shù)據(jù)碘耳,否則可能會導致IP分段的后果。
由于可能有很多應用程序同時在使用TCP/UDP框弛,它們都會把數(shù)據(jù)交給TCP/UDP辛辨,而TCP/UDP也會接收來自IP的、包含指向不同應用程序的數(shù)據(jù)瑟枫,所以就需要有一種方法來區(qū)別(標識)應用程序斗搞,這種方法就是通過端口號(Port)來進行多路復用或多路分解。端口號是一個16位的二進制整數(shù)力奋,其取值范圍是0~65535。
多路復用(Multiplexing)
多路復用是只當應用程序把數(shù)據(jù)交給TCP或UDP時幽七,TCP會把這些數(shù)據(jù)分成若干個TCP段景殷,UDP則會產生一個UDP數(shù)據(jù)報。在這些TCP段和UDP數(shù)據(jù)報中澡屡,會填入應用程序指定的源端口號和目標端口號猿挚,源端口號用于標識發(fā)送的應用程序(進程),目標端口號用于指明在目標機器上應該接收數(shù)據(jù)的目標應用程序驶鹉。
多路分解(Demultiplexing)
多路分解是多路復用的逆過程绩蜻。當在目標機器上的TCP或者UDP接收到TCP段和UDP數(shù)據(jù)報時,會檢查它們的目標端口號室埋,然后根據(jù)不同的目標端口號把數(shù)據(jù)分發(fā)給不同的應用程序(進程)办绝。
<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>第三層——網(wǎng)絡層(Network)
網(wǎng)絡層關心的主要是如何把數(shù)據(jù)從一個設備發(fā)送到另一個設備。網(wǎng)絡層需要提供三個最基本的功能:地址姚淆、路由孕蝉、分段和重組。同時還需要一些附加的功能腌逢,比如錯誤處理和診斷降淮。
網(wǎng)絡層上最重要的協(xié)議IP(Internet Protocol),就是為了這些功能而設計的搏讶。目前IP一共有兩個版本IPv4和IPv6佳鳖。兩者最主要的區(qū)別是使用了不同位數(shù)的二進制整數(shù)作為地址:IPv4使用32位二進制地址霍殴,IPv6使用128位二進制地址。IPv4的地址表示方法一般為用點隔開的4個數(shù)字系吩,每個數(shù)字的取值范圍是0~255来庭,即一個字節(jié)的大小,如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>第二層——數(shù)據(jù)鏈路層(Data Link)
網(wǎng)絡層關心的是如何把數(shù)據(jù)從一個設備發(fā)送到另外一個設備,這另外一個設備有可能在本地網(wǎng)絡中或者在一個很遠的網(wǎng)絡中土涝。數(shù)據(jù)鏈路層關心的是如何把數(shù)據(jù)發(fā)送到本地網(wǎng)絡中去佛寿。我們平時常說的LAN(Local Area Network,局域網(wǎng))技術但壮,如以太網(wǎng)(Ethernet)冀泻、令牌環(huán)網(wǎng)(Token Ring)、光纖分布數(shù)據(jù)接口(FDDI)和802.11(WiFi)都定義在這一層蜡饵。
數(shù)據(jù)鏈路層又分為兩個子層:邏輯鏈路控制層(Logical Link Control)和介質訪問控制層(Media Access Control)弹渔。
數(shù)據(jù)鏈路層還有一個重要的概念,即MAC地址溯祸,也有人稱其為物理地址肢专、硬件地址、以太網(wǎng)地址等焦辅。每一個網(wǎng)卡(Network Interface Card)都有一個唯一的MAC地址博杖,數(shù)據(jù)鏈路層通過MAC地址來確保數(shù)據(jù)能夠正確被發(fā)送到目標設備。MAC地址是一個48位二進制整數(shù)筷登,通常的表示方法是用-隔開的6個十六進制整數(shù)剃根,如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的底層前方,所有其他層的數(shù)據(jù)最終都必須經由物理層才能發(fā)送出去狈醉。物理層的功能包括:
- 硬件規(guī)范的定義,如電纜惠险、連接器舔糖、無線接收器等的工作方式,網(wǎng)卡莺匠、集線器(Hub)等網(wǎng)絡設備也工作在物理層金吗。
- 編碼和信號,物理層把計算機中的二進制0和1轉換成可以在物理介質上傳輸?shù)男盘枴?/li>
- 在把數(shù)據(jù)轉換成信號后(如對于雙絞線電纜則是電子脈沖信號),物理層負責信號的實際發(fā)送和接收摇庙。
<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)、互聯(lián)網(wǎng)層(Internet)卫袒、網(wǎng)絡接口層(Network Interface)宵呛。
在TCP/IP模型中并不包含物理層。另外夕凝,兩個重要的協(xié)議ARP(Address Resolution Protocol宝穗,地址解析協(xié)議)和RARP(Reverse Address Resolution Protocol,反向地址轉換協(xié)議)码秉,在OSI模型中一般被認為是在位于第二層數(shù)據(jù)鏈路層和第三層網(wǎng)絡層之間逮矛,而在TCP/IP模型中則位于網(wǎng)絡接口層。
<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>總結
發(fā)送方應用程序的數(shù)據(jù)總是從最上層開始转砖,層層向下须鼎,最終經由物理層發(fā)送出去;相應的府蔗,在接收方的物理層接收到數(shù)據(jù)后晋控,層層向上,最終經由應用層分發(fā)到具體的應用程序進程中姓赤。
在數(shù)據(jù)層層向下的過程中赡译,每一層都會對數(shù)據(jù)進行一些封裝處理(如打包或者編碼);而在數(shù)據(jù)層層向上的過程中不铆,每一層都會對數(shù)據(jù)進行一些逆處理(如解包或者解碼)蝌焚。這些對數(shù)據(jù)的處理和逆處理的過程就是為了實現(xiàn)該層的服務。
TCP/IP協(xié)議是傳輸層協(xié)議狂男,主要解決數(shù)據(jù)如何在網(wǎng)絡中傳輸综看,而HTTP是應用層協(xié)議品腹,主要解決如何包裝數(shù)據(jù)岖食。關于TCP/IP和HTTP協(xié)議的關系,網(wǎng)絡有一段比較容易理解的介紹:
“我們在傳輸數(shù)據(jù)時舞吭,可以只使用(傳輸層)TCP/IP協(xié)議泡垃,但是那樣的話,如果沒有應用層羡鸥,便無法識別數(shù)據(jù)內容蔑穴,如果想要使傳輸?shù)臄?shù)據(jù)有意義,則必須使用到應用層協(xié)議惧浴,應用層協(xié)議有很多存和,比如HTTP、FTP、TELNET等捐腿,也可以自己定義應用層協(xié)議纵朋。WEB使用HTTP協(xié)議作應用層協(xié)議,以封裝HTTP 文本信息茄袖,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡上操软。”
術語TCP/IP代表傳輸控制協(xié)議/網(wǎng)際協(xié)議宪祥,指的是一系列協(xié)議聂薪。“IP”代表網(wǎng)際協(xié)議蝗羊,TCP和UDP使用該協(xié)議從一個網(wǎng)絡傳送數(shù)據(jù)包到另一個網(wǎng)絡藏澳。把IP想像成一種高速公路,它允許其它協(xié)議在上面行駛并找到到其它電腦的出口肘交。TCP和UDP是高速公路上的“卡車”笆载,它們攜帶的貨物就是像HTTP,文件傳輸協(xié)議FTP這樣的協(xié)議等涯呻。
你應該能理解凉驻,TCP和UDP是FTP,HTTP和SMTP之類使用的傳輸層協(xié)議复罐。雖然TCP和UDP都是用來傳輸其他協(xié)議的涝登,它們卻有一個顯著的不同:TCP提供有保證的數(shù)據(jù)傳輸,而UDP不提供效诅。這意味著TCP有一個特殊的機制來確保數(shù)據(jù)安全的不出錯的從一個端點傳到另一個端點胀滚,而UDP不提供任何這樣的保證。
HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺電腦(通常是Web服務器和客戶端)之間傳輸信息的協(xié)議乱投⊙柿客戶端使用Web瀏覽器發(fā)起HTTP請求給Web服務器,Web服務器發(fā)送被請求的信息給客戶端戚炫。
如下圖所示:http是應用層協(xié)議,主要用于包裝數(shù)據(jù).tcp/ip為傳輸層協(xié)議,只負責發(fā)送任何格式的數(shù)據(jù)到網(wǎng)絡上.
下面的圖表試圖顯示不同的TCP/IP和其他的協(xié)議在最初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.225卤材、RPC遮斥、NetBIOS、ASP扇丛、Winsock术吗、BSD sockets |
| 4 | 傳輸層 | 例如TCP、UDP帆精、RTP较屿、SCTP、SPX卓练、ATP隘蝎、IL |
| 3 | 網(wǎng)絡層 | 例如IP、ICMP襟企、IGMP嘱么、IPX、BGP顽悼、OSPF曼振、RIP、IGRP蔚龙、EIGRP冰评、ARP、RARP木羹、 X.25 |
| 2 | 數(shù)據(jù)鏈路層 | 例如以太網(wǎng)甲雅、令牌環(huán)、HDLC汇跨、幀中繼务荆、ISDN妆距、ATM穷遂、IEEE 802.11、FDDI娱据、PPP |
| 1 | 物理層 | 例如線路蚪黑、無線電盅惜、光纖、信鴿 |
1忌穿、HTTP協(xié)議的幾個重要概念
1.連接(Connection):一個傳輸層的實際環(huán)流抒寂,它是建立在兩個相互通訊的應用程序之間。
2.消息(Message):HTTP通訊的基本單位掠剑,包括一個結構化的八元組序列并通過連接傳輸屈芜。
3.請求(Request):一個從客戶端到服務器的請求信息包括應用于資源的方法、資源的標識符和協(xié)議的版本號
4.響應(Response):一個從服務器返回的信息包括HTTP協(xié)議的版本號朴译、請求的狀態(tài)(例如“成功”或“沒找到”)和文檔的MIME類型井佑。
5.資源(Resource):由URI標識的網(wǎng)絡數(shù)據(jù)對象或服務。
6.實體(Entity):數(shù)據(jù)資源或來自服務資源的回映的一種特殊表示方法眠寿,它可能被包圍在一個請求或響應信息中躬翁。一個實體包括實體頭信息和實體的本身內容。
7.客戶機(Client):一個為發(fā)送請求目的而建立連接的應用程序盯拱。
8.用戶代理(Useragent):初始化一個請求的客戶機盒发。它們是瀏覽器、編輯器或其它用戶工具狡逢。
9.服務器(Server):一個接受連接并對請求返回信息的應用程序宁舰。
10.源服務器(Originserver):是一個給定資源可以在其上駐留或被創(chuàng)建的服務器。
11.代理(Proxy):一個中間程序奢浑,它可以充當一個服務器明吩,也可以充當一個客戶機,為其它客戶機建立請求殷费。請求是通過可能的翻譯在內部或經過傳遞到其它的服務器中印荔。一個代理在發(fā)送請求信息之前瘫拣,必須解釋并且如果可能重寫它衣迷。
代理經常作為通過防火墻的客戶機端的門戶,代理還可以作為一個幫助應用來通過協(xié)議處理沒有被用戶代理完成的請求低零。
12.網(wǎng)關(Gateway):一個作為其它服務器中間媒介的服務器实柠。與代理不同的是水泉,網(wǎng)關接受請求就好象對被請求的資源來說它就是源服務器;發(fā)出請求的客戶機并沒有意識到它在同網(wǎng)關打交道窒盐。
網(wǎng)關經常作為通過防火墻的服務器端的門戶草则,網(wǎng)關還可以作為一個協(xié)議翻譯器以便存取那些存儲在非HTTP系統(tǒng)中的資源。
13.通道(Tunnel):是作為兩個連接中繼的中介程序蟹漓。一旦激活炕横,通道便被認為不屬于HTTP通訊,盡管通道可能是被一個HTTP請求初始化的葡粒。當被中繼的連接兩端關閉時份殿,通道便消失膜钓。當一個門戶(Portal)必須存在或中介(Intermediary)不能解釋中繼的通訊時通道被經常使用。
14.緩存(Cache):反應信息的局域存儲卿嘲。
2.發(fā)送請求
打開一個連接后颂斜,客戶機把請求消息送到服務器的停留端口上,完成提出請求動作拾枣。
HTTP/1.0 請求消息的格式為:
請求消息=請求行(通用信息|請求頭|實體頭)CRLF[實體內容]
請求 行=方法 請求URL HTTP版本號 CRLF
方 法=GET|HEAD|POST|擴展方法
U R L=協(xié)議名稱+宿主名+目錄與文件名
請求行中的方法描述指定資源中應該執(zhí)行的動作沃疮,常用的方法有GET、HEAD和POST梅肤。不同的請求對象對應GET的結果是不同的忿磅,對應關系如下:
對象 GET的結果
文件 文件的內容
程序 該程序的執(zhí)行結果
數(shù)據(jù)庫查詢 查詢結果
HEAD??要求服務器查找某對象的元信息,而不是對象本身凭语。
POST??從客戶機向服務器傳送數(shù)據(jù)葱她,在要求服務器和CGI做進一步處理時會用到POST方法。POST主要用于發(fā)送HTML文本中FORM的內容似扔,讓CGI程序處理吨些。
一個請求的例子為:
GEThttp://networking.zju.edu.cn/zju/index.htmHTTP/1.0 networking.zju.edu.cn/zju/index.htmHTTP/1.0 頭信息又稱為元信息,即信息的信息炒辉,利用元信息可以實現(xiàn)有條件的請求或應答豪墅。
請求頭??告訴服務器怎樣解釋本次請求,主要包括用戶可以接受的數(shù)據(jù)類型黔寇、壓縮方法和語言等偶器。
實體頭??實體信息類型、長度缝裤、壓縮方法屏轰、最后一次修改時間、數(shù)據(jù)有效期等憋飞。
實體??請求或應答對象本身霎苗。
3.發(fā)送響應
服務器在處理完客戶的請求之后,要向客戶機發(fā)送響應消息榛做。
HTTP/1.0的響應消息格式如下:
響應消息=狀態(tài)行(通用信息頭|響應頭|實體頭) CRLF 〔實體內容〕
狀態(tài)行=HTTP版本號 狀態(tài)碼 原因敘述
狀態(tài)碼表示響應類型
1×× 保留
2×× 表示請求成功地接收
3×× 為完成請求客戶需進一步細化請求
4×× 客戶錯誤
5×× 服務器錯誤
響應頭的信息包括:服務程序名唁盏,通知客戶請求的URL需要認證,請求的資源何時能使用检眯。
4.關閉連接