1.知識(shí)點(diǎn)
我們先看幾張TCP、UDP延赌、HTTP除盏、Socket之間的關(guān)系圖
http://www.cnblogs.com/ghj1976/p/4295346.html
從中我們不難得出結(jié)論:
-
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é)議。
-
2.HTTP協(xié)議是建立在TCP協(xié)議上的殴蹄。
HTTP本身就是一個(gè)協(xié)議究抓,是從Web服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議猾担,他的特性是基于TCP協(xié)議本身的。HTTP連接最顯著的特點(diǎn)是客戶端發(fā)送的每次請(qǐng)求都需要服務(wù)器回送響應(yīng)刺下,在請(qǐng)求結(jié)束后绑嘹,會(huì)主動(dòng)釋放連接。從建立連接到關(guān)閉連接的過程稱為“一次連接”
HTTP/1.0為每一次HTTP的請(qǐng)求/響應(yīng)建立一條新的TCP鏈接橘茉,因此一個(gè)包含HTML內(nèi)容和圖片的頁面將需要建立多次的短期的TCP鏈接工腋。一次TCP鏈接的建立將需要3次握手,3次握手有1.5個(gè)回路鏈接時(shí)間(RTT)的延遲畅卓。
每一次鏈接的建立需要這種經(jīng)常性的開銷擅腰,而其并不帶有實(shí)際有用的數(shù)據(jù),只是保證鏈接的可靠性翁潘,因此HTTP/1.1提出了可持續(xù)鏈接的實(shí)現(xiàn)方法趁冈。HTTP/1.1將只建立一次TCP的鏈接而重復(fù)地使用它傳輸一系列的請(qǐng)求/響應(yīng)消息,因此減少了鏈接建立的次數(shù)和經(jīng)常性的鏈接開銷拜马。
-
3.Socket是應(yīng)用層與TCP/IP協(xié)議族通信的中間軟件抽象層渗勘,它是一組接口。
在設(shè)計(jì)模式中俩莽,Socket其實(shí)就是一個(gè)接口模式旺坠,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對(duì)用戶來說扮超,一組簡(jiǎn)單的接口就是全部取刃,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議瞒津。
2.備注
TCP和UDP的區(qū)別
1蝉衣、TCP是面向鏈接的括尸,雖然說網(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ā)有送,所以說UDP是無連接的淌喻、不可靠的一種數(shù)據(jù)傳輸協(xié)議∪刚
2裸删、也正由于1所說的特點(diǎn),使得UDP的開銷更小數(shù)據(jù)傳輸速率更高阵赠,因?yàn)椴槐剡M(jìn)行收發(fā)數(shù)據(jù)的確認(rèn)涯塔,所以UDP的實(shí)時(shí)性更好肌稻。知道了TCP和UDP的區(qū)別,就不難理解為何采用TCP傳輸協(xié)議的MSN比采用UDP的QQ傳輸文件慢了匕荸,但并不能說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)證之類的