一输莺、先來(lái)一個(gè)講TCP、UDP和HTTP關(guān)系的
1裸诽、TCP/IP是個(gè)協(xié)議組嫂用,可分為三個(gè)層次:網(wǎng)絡(luò)層、傳輸層和應(yīng)用層丈冬。
在網(wǎng)絡(luò)層有IP協(xié)議嘱函、ICMP協(xié)議、ARP協(xié)議埂蕊、RARP協(xié)議和BOOTP協(xié)議往弓。 在傳輸層中有TCP協(xié)議與UDP協(xié)議疏唾。
在應(yīng)用層有FTP、HTTP亮航、TELNET荸实、SMTP、DNS等協(xié)議缴淋。
因此准给,HTTP本身就是一個(gè)協(xié)議,是從Web服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議重抖。
2露氮、HTTP協(xié)議是建立在請(qǐng)求/響應(yīng)模型上的。
首先由客戶建立一條與服務(wù)器的TCP鏈接钟沛,并發(fā)送一個(gè)請(qǐng)求到服務(wù)器畔规,
請(qǐng)求中包含請(qǐng)求方法、URI恨统、協(xié)議版本以及相關(guān)的MIME樣式的消息叁扫。
服務(wù)器響應(yīng)一個(gè)狀態(tài)行,包含消息的協(xié)議版本畜埋、一個(gè)成功和失敗碼以及相關(guān)的MIME式樣的消息莫绣。
HTTP/1.0為每一次HTTP的請(qǐng)求/響應(yīng)建立一條新的TCP鏈接,
因此一個(gè)包含HTML內(nèi)容和圖片的頁(yè)面將需要建立多次的短期的TCP鏈接悠鞍。
一次TCP鏈接的建立將需要3次握手对室。
另外,為了獲得適當(dāng)?shù)膫鬏斔俣瓤Ъ溃瑒t需要TCP花費(fèi)額外的回路鏈接時(shí)間(RTT)掩宜。
每一次鏈接的建立需要這種經(jīng)常性的開(kāi)銷,而其并不帶有實(shí)際有用的數(shù)據(jù)么翰,只是保證鏈接的可靠性牺汤,因此HTTP/1.1提出了可持續(xù)鏈接的實(shí)現(xiàn)方法。
HTTP/1.1將只建立一次TCP的鏈接而重復(fù)地使用它傳輸一系列的請(qǐng)求/響應(yīng)消息硬鞍,因此減少了鏈接建立的次數(shù)和經(jīng)常性的鏈接開(kāi)銷慧瘤。
3、結(jié)論:
雖然HTTP本身是一個(gè)協(xié)議固该,但其最終還是基于TCP的锅减。不過(guò),目前伐坏,有人正在研究基于TCP+UDP混合的HTTP協(xié)議怔匣。
Socket是什么呢?Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口每瞒。在設(shè)計(jì)模式中金闽,
Socket其實(shí)就是一個(gè)門(mén)面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面剿骨,
對(duì)用戶來(lái)說(shuō)代芜,一組簡(jiǎn)單的接口就是全部驹饺,讓Socket去組織數(shù)據(jù)楣嘁,以符合指定的協(xié)議。
二、TCP苹威、UDP昆咽、HTTP、SOCKET之間的區(qū)別
TCP和UDP:傳輸層協(xié)議牙甫;
HTTP:應(yīng)用層協(xié)議掷酗;
SOCKET:TCP/IP網(wǎng)絡(luò)的API。
TCP/IP代表傳輸控制協(xié)議/網(wǎng)際協(xié)議窟哺,指的是一系列協(xié)議汇在。
TCP和UDP使用IP協(xié)議從一個(gè)網(wǎng)絡(luò)傳送數(shù)據(jù)包到另一個(gè)網(wǎng)絡(luò)。把IP想像成一種高速公路脏答,它允許其它協(xié)議在上面行駛并找到到其它電腦的出口。
TCP和UDP是高速公路上的“卡車”亩鬼,它們攜帶的貨物就是像HTTP殖告,文件傳輸協(xié)議FTP這樣的協(xié)議等。
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é)議粤蝎。
客戶端使用Web瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器,Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端袋马。
記住初澎,需要IP協(xié)議來(lái)連接網(wǎng)絡(luò);TCP是一種允許我們安全傳輸數(shù)據(jù)的機(jī)制,使用TCP協(xié)議來(lái)傳輸數(shù)據(jù)的HTTP是Web服務(wù)器和客戶端使用的特殊協(xié)議虑凛。
Socket 接口是TCP/IP網(wǎng)絡(luò)的API碑宴,Socket接口定義了許多函數(shù)或例程软啼,用以開(kāi)發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。
三延柠、socket祸挪、tcp、udp贞间、http 的認(rèn)識(shí)及區(qū)別
網(wǎng)絡(luò)由下往上分為物理層贿条、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層榜跌、傳輸層闪唆、會(huì)話層、表示層和應(yīng)用層钓葫。
IP 協(xié)議對(duì)應(yīng)于網(wǎng)絡(luò)層悄蕾,TCP協(xié)議對(duì)應(yīng)于傳輸層,HTTP協(xié)議對(duì)應(yīng)于應(yīng)用層础浮,三者從本質(zhì)上來(lái)說(shuō)沒(méi)有可比性帆调,socket則是對(duì)TCP/IP協(xié)議的封裝和應(yīng)用。
可以說(shuō)豆同,TCP/IP協(xié)議是傳輸層協(xié)議番刊,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸,而HTTP是應(yīng)用層協(xié)議影锈,主要解決如何包裝數(shù)據(jù)
socket是對(duì)TCP/IP協(xié)議的封裝芹务,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API)鸭廷,
通過(guò)Socket枣抱,我們才能使用TCP/IP協(xié)議。
實(shí)際上辆床,Socket跟TCP/IP協(xié)議沒(méi)有必然的聯(lián)系佳晶。Socket編程接口在設(shè)計(jì)的時(shí)候,就希望也能適應(yīng)其他的網(wǎng)絡(luò)協(xié)議讼载。
所以說(shuō)轿秧,Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已,是對(duì)TCP/IP協(xié)議的抽象咨堤,
從而形成了我們知道的一些最基本的函數(shù)接口菇篡,比如create、 listen一喘、connect逸贾、accept、send、read和write等等
實(shí)際上铝侵,傳輸層的TCP是基于網(wǎng)絡(luò)層的IP協(xié)議的灼伤,而應(yīng)用層的HTTP協(xié)議又是基于傳輸層的TCP協(xié)議的,
而Socket本身不算是協(xié)議咪鲜,就像上面所說(shuō)狐赡,它只是提供了一個(gè)針對(duì)TCP或者UDP編程的接口
TCP連接的三次握手:
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài)疟丙,等待服務(wù)器確認(rèn)颖侄;第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1)享郊,同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k)览祖,即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)炊琉;
第三次握手:客戶端收到服務(wù)器的SYN+ACK包展蒂,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢苔咪,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài)锰悼,完成三次握手。
握手過(guò)程中傳送的包里不包含數(shù)據(jù)团赏,三次握手完畢后箕般,客戶端與服務(wù)器才正式開(kāi)始傳送數(shù)據(jù)
斷開(kāi)連接時(shí)服務(wù)器和客戶端均可以主動(dòng)發(fā)起斷開(kāi)TCP連接的請(qǐng)求,斷開(kāi)過(guò)程需要經(jīng)過(guò)“四次握手”
TCP是面向鏈接的舔清,雖然說(shuō)網(wǎng)絡(luò)的不安全不穩(wěn)定特性決定了多少次握手都不能保證連接的可靠性丝里,
但TCP的三次握手在最低限度上(實(shí)際上也很大程度上保證了)保證了連接的可靠性;
而UDP不是面向連接的体谒,UDP傳送數(shù)據(jù)前并不與對(duì)方建立連接丙者,對(duì)接收到的數(shù)據(jù)也不發(fā)送確認(rèn)信號(hào),
發(fā)送端不知道數(shù)據(jù)是否會(huì)正確接收营密,當(dāng)然也不用重發(fā),所以說(shuō)UDP是無(wú)連接的目锭、不可靠的一種數(shù)據(jù)傳輸協(xié)議
也正由于上面的特點(diǎn)评汰,使得UDP的開(kāi)銷更小數(shù)據(jù)傳輸速率更高,因?yàn)椴槐剡M(jìn)行收發(fā)數(shù)據(jù)的確認(rèn)痢虹,所以UDP的實(shí)時(shí)性更好被去。
所以采用TCP傳輸協(xié)議的MSN比采用UDP的QQ傳輸文件慢,
但并不能說(shuō)QQ的通信是不安全的奖唯,因?yàn)槌绦騿T可以手動(dòng)對(duì)UDP的數(shù)據(jù)收發(fā)進(jìn)行驗(yàn)證惨缆,
比如發(fā)送方對(duì)每個(gè)數(shù)據(jù)包進(jìn)行編號(hào)然后由接收方進(jìn)行驗(yàn)證啊什么的,
即使是這樣,UDP因?yàn)樵诘讓訁f(xié)議的封裝上沒(méi)有采用類似 TCP的“三次握手”而實(shí)現(xiàn)了TCP所無(wú)法達(dá)到的傳輸效率坯墨。