更新時(shí)間:2023-09-21 來(lái)源:黑馬程序員 瀏覽量:
OSI模型主要作為一個(gè)通用模型來(lái)做理論分析,而TCP/IP協(xié)議模型是互聯(lián)網(wǎng)的實(shí)際通訊協(xié)議,兩者一般做映射分析,以下不做嚴(yán)格區(qū)分和聲明:
|.............主機(jī)...............| 操作系統(tǒng)和軟件等 應(yīng)用、表示、會(huì)話
|.............網(wǎng)絡(luò)...............| 互聯(lián)網(wǎng)絡(luò)和相關(guān)協(xié)議 傳輸、網(wǎng)絡(luò) (TCP/IP)
|.............介質(zhì)...............| 物理介質(zhì)相關(guān) 數(shù)據(jù)鏈路、物理
1. 主機(jī)需要網(wǎng)絡(luò)傳輸數(shù)據(jù),網(wǎng)絡(luò)本質(zhì)上是一種服務(wù),主機(jī)和網(wǎng)絡(luò)之間靠傳輸層接口,就好比你要叫快遞送東西;
2. 網(wǎng)絡(luò)可以提供兩種服務(wù):
a. 可靠,面向連接;(TCP) 就像靠譜的快遞,每一步都有反饋和監(jiān)控,當(dāng)然價(jià)格也是呵呵...
b. 不可靠,盡力而為的傳輸 (UDP) 就像某些不靠譜的快遞或者聽都沒(méi)聽過(guò)的XX快遞,價(jià)格低,但是能不能到就靠運(yùn)氣了。
3. 兩種服務(wù)無(wú)所謂好壞,TCP的可靠是需要消耗很多資源的,效率低(大塊,重要的文件等)
UDP不保證可靠性,但是效率高(視頻,語(yǔ)音,不重要的小文件等)
4. 而其他的“HTTP、FTP、SMTP 等所謂的“Application-layer Protocol”協(xié)議”指的是在TCP/IP通訊協(xié)議框架下具體實(shí)現(xiàn)特定功能的應(yīng)用(HTTP 用來(lái)實(shí)現(xiàn)超文本傳輸,F(xiàn)TP文件傳輸,SMTP處理郵件等等),兩者的關(guān)系,咳咳,關(guān)系通俗的說(shuō):
TCP和UDP以及IP協(xié)議是互聯(lián)網(wǎng)絡(luò)通訊的基礎(chǔ),就像《憲法》,而應(yīng)用協(xié)議就像具體的《刑法》、《民法》、《婚姻法》、《未成年人保護(hù)法》......等等,在某個(gè)領(lǐng)域的特定應(yīng)用和具體實(shí)現(xiàn),但是最基本的一條:違憲無(wú)效。
TCP/IP協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸,而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。關(guān)于TCP/IP和HTTP協(xié)議的關(guān)系,網(wǎng)絡(luò)有一段比較容易理解的介紹:“我們?cè)趥鬏敂?shù)據(jù)時(shí),可以只使用(傳輸層)TCP/IP協(xié)議,但是那樣的話,如果沒(méi)有應(yīng)用層,便無(wú)法識(shí)別數(shù)據(jù)內(nèi)容,如果想要使傳輸?shù)臄?shù)據(jù)有意義,則必須使用到應(yīng)用層協(xié)議,應(yīng)用層協(xié)議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應(yīng)用層協(xié)議。WEB使用HTTP協(xié)議作應(yīng)用層協(xié)議,以封裝HTTP 文本信息,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡(luò)上?!?/p>
術(shù)語(yǔ)TCP/IP代表傳輸控制協(xié)議/網(wǎng)際協(xié)議,指的是一系列協(xié)議?!癐P”代表網(wǎng)際協(xié)議,TCP和UDP使用該協(xié)議從一個(gè)網(wǎng)絡(luò)傳送數(shù)據(jù)包到另一個(gè)網(wǎng)絡(luò)。把IP想像成一種高速公路,它允許其它協(xié)議在上面行駛并找到到其它電腦的出口。TCP和UDP是高速公路上的“卡車”,它們攜帶的貨物就是像HTTP,文件傳輸協(xié)議FTP這樣的協(xié)議等。
大家應(yīng)該能理解,TCP和UDP是FTP,HTTP和SMTP之類使用的傳輸層協(xié)議。雖然TCP和UDP都是用來(lái)傳輸其他協(xié)議的,它們卻有一個(gè)顯著的不同:TCP提供有保證的數(shù)據(jù)傳輸,而UDP不提供。這意味著TCP有一個(gè)特殊的機(jī)制來(lái)確保數(shù)據(jù)安全的不出錯(cuò)的從一個(gè)端點(diǎn)傳到另一個(gè)端點(diǎn),而UDP不提供任何這樣的保證。
HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺(tái)電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議??蛻舳耸褂肳eb瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器,Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端。
下面的圖表試圖顯示不同的TCP/IP和其他的協(xié)議在最初OSI模型中的位置:
7 應(yīng)用層 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
6 表示層 例如XDR、ASN.1、SMB、AFP、NCP
5 會(huì)話層 例如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)絡(luò)層 例如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 物理層 例如線路、無(wú)線電、光纖、信鴿
實(shí)現(xiàn)服務(wù)器與客戶端之間的物理連接,并進(jìn)行數(shù)據(jù)傳輸。主要有TCP/UDP兩個(gè)協(xié)議。Socket處于網(wǎng)絡(luò)協(xié)議的傳輸層。
傳輸控制協(xié)議,面向連接的的協(xié)議,穩(wěn)定可靠。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)。傳輸速度沒(méi)有UDP快但是建立連接有三次握手機(jī)制,斷開連接有四次揮手機(jī)制,傳輸可靠性高。
廣播式數(shù)據(jù)傳輸,UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒(méi)有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快。
優(yōu)點(diǎn):
1. 傳輸數(shù)據(jù)為字節(jié)級(jí),傳輸數(shù)據(jù)可自定義,數(shù)據(jù)量小。相應(yīng)的移動(dòng)端開發(fā),手機(jī)費(fèi)用低
2. 傳輸數(shù)據(jù)時(shí)間短,性能高
3. 適合C/S之間信息實(shí)時(shí)交互
4. 可以加密,數(shù)據(jù)安全性高
缺點(diǎn):
1. 需要對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行解析,轉(zhuǎn)化為應(yīng)用級(jí)的數(shù)據(jù)
2. 對(duì)開發(fā)人員的開發(fā)水平要求高
3. 相對(duì)于Http協(xié)議傳輸,增加了開發(fā)量
http請(qǐng)求主要有http協(xié)議,基于http協(xié)議的soap協(xié)議,常見的http數(shù)據(jù)請(qǐng)求方式有g(shù)et和post,web服務(wù)
優(yōu)點(diǎn):
1. 基于應(yīng)用級(jí)的接口使用方便
2. 要求的開發(fā)水平不高,容錯(cuò)性強(qiáng)
缺點(diǎn):
1. 傳輸速度慢,數(shù)據(jù)包大。
2. 如實(shí)現(xiàn)實(shí)時(shí)交互,服務(wù)器性能壓力大
3. 數(shù)據(jù)傳輸安全性差
三次握手用戶建立TCP連接.
TCP位于傳輸層,作用是提供可靠的字節(jié)流服務(wù),為了準(zhǔn)確無(wú)誤地將數(shù)據(jù)送達(dá)目的地,TCP協(xié)議采納三次握手策略.
1)發(fā)送端首先發(fā)送一個(gè)帶有SYN(synchronize)標(biāo)志地?cái)?shù)據(jù)包給接收方。
2)接收方接收后,回傳一個(gè)帶有SYN/ACK標(biāo)志的數(shù)據(jù)包傳遞確認(rèn)信息,表示我收到了。
3)最后,發(fā)送方再回傳一個(gè)帶有ACK標(biāo)志的數(shù)據(jù)包,代表我知道了,表示握手‘結(jié)束。
1)Client:嘿,李四,是我,聽到了嗎?
2)Server:我聽到了,你能聽到我的嗎?
3)Client:好的,我們互相都能聽到對(duì)方的話,我們的通信可以開始了。
四次揮手用于斷開TCP連接.
當(dāng)被動(dòng)方收到主動(dòng)方的FIN報(bào)文通知時(shí),它僅僅表示主動(dòng)方?jīng)]有數(shù)據(jù)再發(fā)送給被動(dòng)方了。但未必被動(dòng)方所有的數(shù)據(jù)都完整的發(fā)送給了主動(dòng)方,所以被動(dòng)方不會(huì)馬上關(guān)閉SOCKET,它可能還需要發(fā)送一些數(shù)據(jù)給主動(dòng)方后,再發(fā)送FIN報(bào)文給主動(dòng)方,告訴主動(dòng)方同意關(guān)閉連接,所以這里的ACK報(bào)文和FIN報(bào)文多數(shù)情況下都是分開發(fā)送的。
1)第一次揮手:Client發(fā)送一個(gè)FIN,用來(lái)關(guān)閉Client到Server的數(shù)據(jù)傳送,Client進(jìn)入FIN_WAIT_1狀態(tài)。
2)第二次揮手:Server收到FIN后,發(fā)送一個(gè)ACK給Client,確認(rèn)序號(hào)為收到序號(hào)+1(與SYN相同,一個(gè)FIN占用一個(gè)序號(hào)),Server進(jìn)入CLOSE_WAIT狀態(tài)。
3)第三次揮手:Server發(fā)送一個(gè)FIN,用來(lái)關(guān)閉Server到Client的數(shù)據(jù)傳送,Server進(jìn)入LAST_ACK狀態(tài)。
4)第四次揮手:Client收到FIN后,Client進(jìn)入TIME_WAIT狀態(tài),接著發(fā)送一個(gè)ACK給Server,確認(rèn)序號(hào)為收到序號(hào)+1,Server進(jìn)入CLOSED狀態(tài),完成四次揮手
1)Client:我所有東西都說(shuō)完了
2)Server:我已經(jīng)全部聽到了,但是等等我,我還沒(méi)說(shuō)完
3)Server:好了,我已經(jīng)說(shuō)完了
4)Client:好的,那我們的通信結(jié)束l