TCP UDP HTTP區(qū)別詳解
http:是用于www瀏覽的一個(gè)協(xié)議专执。
tcp:是機(jī)器之間建立連接用的到的一個(gè)協(xié)議途事。
?
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ù)膫鬏斔俣?鸟废,則需要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é)議。
?
具體介紹
?
IP (網(wǎng)際協(xié)議)
?
在網(wǎng)絡(luò)通信中寨闹,網(wǎng)絡(luò)組件的尋址對(duì)信息的路由選擇和傳輸來(lái)說(shuō)是相當(dāng)關(guān)鍵的胶坠。相同網(wǎng)絡(luò)中的兩臺(tái)機(jī)器間的消息傳輸有各自的技術(shù)協(xié)定。LAN 是通過(guò)提供6字節(jié)的唯一標(biāo)識(shí)符(“MAC”地址)在機(jī)器間發(fā)送消息的繁堡。SNA 網(wǎng)絡(luò)中的每臺(tái)機(jī)器都有一個(gè)邏輯單元及與其相應(yīng)的網(wǎng)絡(luò)地址沈善。DECNET、AppleTalk 和 Novell IPX 均有一個(gè)用來(lái)分配編號(hào)到各個(gè)本地網(wǎng)和工作站的配置椭蹄。
?
?
HTTP是超文本傳輸協(xié)議闻牡,是客戶端瀏覽器或其他程序與Web服務(wù)器之間的應(yīng)用層通信協(xié)議。在Internet上的Web服務(wù)器上存放的都是超文本信息绳矩, 客戶機(jī)需要通過(guò)HTTP協(xié)議傳輸所要訪問(wèn)的超文本信息罩润。HTTP包含命令和傳輸信息,不僅可用于Web訪問(wèn)翼馆,也可以用于其他因特網(wǎng)/內(nèi)聯(lián)網(wǎng)應(yīng)用系統(tǒng)之間的通信割以,從而實(shí)現(xiàn)各類應(yīng)用資源超媒體訪問(wèn)的集成
?
TCP (傳輸控制協(xié)議)
?
通過(guò)序列化應(yīng)答和必要時(shí)重發(fā)數(shù)據(jù)包,TCP 為應(yīng)用程序提供了可靠的傳輸流和虛擬連接服務(wù)应媚。TCP 主要提供數(shù)據(jù)流轉(zhuǎn)送严沥,可靠傳輸,有效流控制珍特,全雙工操作和多路傳輸技術(shù)祝峻。可查閱 TCP 部分獲取更多詳細(xì)資料扎筒。
?
至于HTTP協(xié)議,它是TCP協(xié)議族中的一種莱找。使用TCP80端口
?
?
HTTP是應(yīng)用層協(xié)議,TCP是傳輸層協(xié)議嗜桌!
?
數(shù)據(jù)包在網(wǎng)絡(luò)傳輸過(guò)程中奥溺,HTTP被封裝在TCP包內(nèi)!骨宠!
?
?
1. TCP/UDP
?
?
面向連接的TCP
?
“面向連接”就是在正式通信前必須要與對(duì)方建立起連接浮定。比如你給別人打電話,必須等線路接通了层亿、對(duì)方拿起話筒才能相互通話桦卒。
?
?
TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議匿又,也就是說(shuō)方灾,在正式收發(fā)數(shù)據(jù)前,必須和對(duì)方建立可靠的連接。一個(gè)TCP連接必須要經(jīng)過(guò)三次“對(duì)話”才能建立起來(lái)裕偿,其中的過(guò)程非常復(fù)雜洞慎,我們這里只做簡(jiǎn)單、形象的介紹嘿棘,你只要做到能夠理解這個(gè)過(guò)程即可劲腿。
?
?
我們來(lái)看看這三次對(duì)話的簡(jiǎn)單過(guò)程:
?
1. 主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎鸟妙?”焦人,這是第一次對(duì)話;
?
2. 主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送圆仔,一個(gè)在接收垃瞧,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以,你什么時(shí)候發(fā)坪郭?”个从,這是第二次對(duì)話;
?
3. 主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā)歪沃,你接著吧嗦锐!”,這是第三次對(duì)話沪曙。
?
?
三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步奕污,經(jīng)過(guò)三次“對(duì)話”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)液走。
?
TCP協(xié)議能為應(yīng)用程序提供可靠的通信連接碳默,使一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流無(wú)差錯(cuò)地發(fā)往網(wǎng)絡(luò)上的其他計(jì)算機(jī),對(duì)可靠性要求高的數(shù)據(jù)通信系統(tǒng)往往使用TCP協(xié)議傳輸數(shù)據(jù)缘眶。
?
?
我們來(lái)做一個(gè)實(shí)驗(yàn)嘱根,用計(jì)算機(jī)A(安裝Windows 2000 Server操作系統(tǒng))從“網(wǎng)上鄰居”上的一臺(tái)計(jì)算機(jī)B拷貝大小為8,644,608字節(jié)的文件,通過(guò)狀態(tài)欄右下角網(wǎng)卡的發(fā)送和接收指標(biāo)就會(huì)發(fā)現(xiàn):雖然是 數(shù)據(jù)流是由計(jì)算機(jī)B流向計(jì)算機(jī)A巷懈,但是計(jì)算機(jī)A仍發(fā)送了3,456個(gè)數(shù)據(jù)包该抒,如圖2所示。這些數(shù)據(jù)包是怎樣產(chǎn)生的呢顶燕?因?yàn)槲募鬏敃r(shí)使用了TCP/IP協(xié) 議凑保,更確切地說(shuō)是使用了面向連接的TCP協(xié)議,計(jì)算機(jī)A接收數(shù)據(jù)包的時(shí)候涌攻,要向計(jì)算機(jī)B回發(fā)數(shù)據(jù)包欧引,所以也產(chǎn)生了一些通信量。
?
?
如果事先用網(wǎng)絡(luò)監(jiān)視器監(jiān)視網(wǎng)絡(luò)流量恳谎,就會(huì)發(fā)現(xiàn)由此產(chǎn)生的數(shù)據(jù)流量是9,478,819字節(jié)芝此,比文件大小多出10.96%(如圖3所示),原因不僅在于數(shù)據(jù)包和幀本身占用了一些空間,而且也在于TCP協(xié)議面向連接的特性導(dǎo)致了一些額外的通信量的產(chǎn)生癌蓖。
?
?
面向非連接的UDP協(xié)議
?
“面向非連接”就是在正式通信前不必與對(duì)方先建立連接,不管對(duì)方狀態(tài)就直接發(fā)送婚肆。這與現(xiàn)在風(fēng)行的手機(jī)短信非常相似:你在發(fā)短信的時(shí)候租副,只需要輸入對(duì)方手機(jī)號(hào)就OK了。
?
UDP(User Data Protocol较性,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議用僧。它是面向非連接的協(xié)議,它不與對(duì)方建立連接赞咙,而是直接就把數(shù)據(jù)包發(fā)送過(guò)去责循!
?
?
UDP 適用于一次只傳送少量數(shù)據(jù)、對(duì)可靠性要求不高的應(yīng)用環(huán)境攀操。比如院仿,我們經(jīng)常使用“ping”命令來(lái)測(cè)試兩臺(tái)主機(jī)之間TCP/IP通信是否正常,其實(shí) “ping”命令的原理就是向?qū)Ψ街鳈C(jī)發(fā)送UDP數(shù)據(jù)包速和,然后對(duì)方主機(jī)確認(rèn)收到數(shù)據(jù)包歹垫,如果數(shù)據(jù)包是否到達(dá)的消息及時(shí)反饋回來(lái),那么網(wǎng)絡(luò)就是通的颠放。例如排惨, 在默認(rèn)狀態(tài)下,一次“ping”操作發(fā)送4個(gè)數(shù)據(jù)包碰凶。大家可以看到暮芭,發(fā)送的數(shù)據(jù)包數(shù)量是4包,收到的也是4包(因?yàn)閷?duì)方主機(jī)收到后會(huì)發(fā)回一 個(gè)確認(rèn)收到的數(shù)據(jù)包)欲低。這充分說(shuō)明了UDP協(xié)議是面向非連接的協(xié)議辕宏,沒(méi)有建立連接的過(guò)程。正因?yàn)閁DP協(xié)議沒(méi)有連接的過(guò)程伸头,所以它的通信效果高匾效;但也正因?yàn)槿绱耍目煽啃圆蝗鏣CP協(xié)議高恤磷。QQ就使用UDP發(fā)消息面哼,因此有時(shí)會(huì)出現(xiàn)收不到消息的情況。
TCPUDP
是否連接面向連接面向非連接
傳輸可靠性可靠不可靠
應(yīng)用場(chǎng)景傳輸大量數(shù)據(jù)扫步,對(duì)可靠性要求較高的場(chǎng)合傳送少量數(shù)據(jù)魔策,對(duì)可靠性要求不高的場(chǎng)景
速度慢快