TCP 與 UDP、HTTP 與 socket 區(qū)別

TCP連接:

? ? ? ?TCP(Transmission Control Protocol阻肿,傳輸控制協(xié)議)是基于連接的協(xié)議瓦戚,也就是說(shuō),在正式收發(fā)數(shù)據(jù)前丛塌,必須和對(duì)方建立可靠的連接较解。一個(gè)TCP連接必須要經(jīng)過(guò)三次“對(duì)話(huà)”才能建立起來(lái)畜疾,其中的過(guò)程非常復(fù)雜,我們這里只做簡(jiǎn)單哨坪、形象的介紹庸疾,你只要做到能夠理解這個(gè)過(guò)程即可。我們來(lái)看看這三次對(duì)話(huà)的簡(jiǎn)單過(guò)程:主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù)当编,可以嗎届慈?”,這是第一次對(duì)話(huà)忿偷;主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送金顿,一個(gè)在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以鲤桥,你什么時(shí)候發(fā)揍拆?”,這是第二次對(duì)話(huà)茶凳;主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:“我現(xiàn)在就發(fā)嫂拴,你接著吧!”贮喧,這是第三次對(duì)話(huà)筒狠。三次“對(duì)話(huà)”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過(guò)三次“對(duì)話(huà)”之后箱沦,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)辩恼。

TCP三次握手和四次揮手

1、三次握手(男女初次見(jiàn)面)

置位概念:根據(jù)TCP的包頭字段谓形,存在3個(gè)重要的標(biāo)識(shí)ACK灶伊、SYN、FIN?

ACK:表示驗(yàn)證字段?

SYN:位數(shù)置1寒跳,表示建立TCP連接?

FIN:位數(shù)置1聘萨,表示斷開(kāi)TCP連接


三次握手過(guò)程說(shuō)明:?

1、由客戶(hù)端發(fā)送建立TCP連接的請(qǐng)求報(bào)文童太,其中報(bào)文中包含seq序列號(hào)匈挖,是由發(fā)送端隨機(jī)生成的,并且將報(bào)文中的SYN字段置為1康愤,表示需要建立TCP連接。(SYN=1舶吗,seq=x征冷,x為隨機(jī)生成數(shù)值)

2、由服務(wù)端回復(fù)客戶(hù)端發(fā)送的TCP連接請(qǐng)求報(bào)文誓琼,其中包含seq序列號(hào)检激,是由回復(fù)端隨機(jī)生成的肴捉,并且將SYN置為1,而且會(huì)產(chǎn)生ACK字段叔收,ACK字段數(shù)值是在客戶(hù)端發(fā)送過(guò)來(lái)的序列號(hào)seq的基礎(chǔ)上加1進(jìn)行回復(fù)齿穗,以便客戶(hù)端收到信息時(shí),知曉自己的TCP建立請(qǐng)求已得到驗(yàn)證饺律。(SYN=1窃页,ACK=x+1,seq=y复濒,y為隨機(jī)生成數(shù)值)這里的ack加1可以理解為是確認(rèn)和誰(shuí)建立連接脖卖。

3、客戶(hù)端收到服務(wù)端發(fā)送的TCP建立驗(yàn)證請(qǐng)求后巧颈,會(huì)使自己的序列號(hào)加1表示畦木,并且再次回復(fù)ACK驗(yàn)證請(qǐng)求,在服務(wù)端發(fā)過(guò)來(lái)的seq上加1進(jìn)行回復(fù)砸泛。(SYN=1十籍,ACK=y+1,seq=x+1)



2唇礁、四次揮手(男女分手)



四次揮手過(guò)程說(shuō)明:?

1勾栗、客戶(hù)端發(fā)送斷開(kāi)TCP連接請(qǐng)求的報(bào)文,其中報(bào)文中包含seq序列號(hào)垒迂,是由發(fā)送端隨機(jī)生成的械姻,并且還將報(bào)文中的FIN字段置為1,表示需要斷開(kāi)TCP連接机断。(FIN=1楷拳,seq=x,x由客戶(hù)端隨機(jī)生成)

2吏奸、服務(wù)端會(huì)回復(fù)客戶(hù)端發(fā)送的TCP斷開(kāi)請(qǐng)求報(bào)文欢揖,其包含seq序列號(hào),是由回復(fù)端隨機(jī)生成的奋蔚,而且會(huì)產(chǎn)生ACK字段她混,ACK字段數(shù)值是在客戶(hù)端發(fā)過(guò)來(lái)的seq序列號(hào)基礎(chǔ)上加1進(jìn)行回復(fù),以便客戶(hù)端收到信息時(shí)泊碑,知曉自己的TCP斷開(kāi)請(qǐng)求已經(jīng)得到驗(yàn)證坤按。(FIN=1,ACK=x+1馒过,seq=y臭脓,y由服務(wù)端隨機(jī)生成)

3、服務(wù)端在回復(fù)完客戶(hù)端的TCP斷開(kāi)請(qǐng)求后腹忽,不會(huì)馬上進(jìn)行TCP連接的斷開(kāi)来累,服務(wù)端會(huì)先確保斷開(kāi)前砚作,所有傳輸?shù)紸的數(shù)據(jù)是否已經(jīng)傳輸完畢,一旦確認(rèn)傳輸數(shù)據(jù)完畢嘹锁,就會(huì)將回復(fù)報(bào)文的FIN字段置1葫录,并且產(chǎn)生隨機(jī)seq序列號(hào)。(FIN=1领猾,ACK=x+1米同,seq=z,z由服務(wù)端隨機(jī)生成)

4瘤运、客戶(hù)端收到服務(wù)端的TCP斷開(kāi)請(qǐng)求后窍霞,會(huì)回復(fù)服務(wù)端的斷開(kāi)請(qǐng)求,包含隨機(jī)生成的seq字段和ACK字段拯坟,ACK字段會(huì)在服務(wù)端的TCP斷開(kāi)請(qǐng)求的seq基礎(chǔ)上加1但金,從而完成服務(wù)端請(qǐng)求的驗(yàn)證回復(fù)。(FIN=1郁季,ACK=z+1冷溃,seq=h,h為客戶(hù)端隨機(jī)生成)?

至此TCP斷開(kāi)的4次揮手過(guò)程完畢


UDP連接:

UDP(User Data Protocol梦裂,用戶(hù)數(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ù)包(如圖2所示)揪利。大家可以看到态兴,發(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)收不到消息的情況。


tcp協(xié)議和udp協(xié)議的差別


? ? ? ? ? ????????????????????????? TCP? ????????????????? ? UDP

是否連接? ? ? ? ? ? ? ? ? ? 面向連接????????????? 面向非連接

傳輸可靠性? ????????????????? 可靠? ? ? ????????????????不可靠

應(yīng)用場(chǎng)合? ? ? ? ? ? ? ? ? ?傳輸大量數(shù)據(jù)????????????? 少量數(shù)據(jù)

速度? ? ? ? ????????????????????????? 慢? ? ? ? ????????????????? 快


Socket是對(duì)TCP/IP協(xié)議的封裝尿招,Socket本身并不是協(xié)議矾柜,而是一個(gè)調(diào)用接口(API),通過(guò)Socket就谜,我們才能使用TCP/IP協(xié)議怪蔑。

http連接:http連接就是所謂的短連接,即客戶(hù)端向服務(wù)器端發(fā)送一次請(qǐng)求丧荐,服務(wù)器端響應(yīng)后連接即會(huì)斷掉缆瓣;

socket連接:socket連接就是所謂的長(zhǎng)連接,理論上客戶(hù)端和服務(wù)器端一旦建立起連接將不會(huì)主動(dòng)斷掉虹统;但是由于各種環(huán)境因素可能會(huì)是連接斷開(kāi)弓坞,比如說(shuō):服務(wù)器端或客戶(hù)端主機(jī)down了,網(wǎng)絡(luò)故障车荔,或者兩者之間長(zhǎng)時(shí)間沒(méi)有數(shù)據(jù)傳輸渡冻,網(wǎng)絡(luò)防火墻可能會(huì)斷開(kāi)該連接以釋放網(wǎng)絡(luò)資源。所以當(dāng)一個(gè)socket連接中沒(méi)有數(shù)據(jù)的傳輸忧便,那么為了維持連接需要發(fā)送心跳消息~~具體心跳消息格式是開(kāi)發(fā)者自己定義的族吻。


1.HTTP連接

HTTP協(xié)議即超文本傳送協(xié)議(Hypertext Transfer Protocol ),是Web聯(lián)網(wǎng)的基礎(chǔ)珠增,也是手機(jī)聯(lián)網(wǎng)常用的協(xié)議之一超歌,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用。

HTTP連接最顯著的特點(diǎn)是客戶(hù)端發(fā)送的每次請(qǐng)求都需要服務(wù)器回送響應(yīng)切平,在請(qǐng)求結(jié)束后握础,會(huì)主動(dòng)釋放連接。從建立連接到關(guān)閉連接的過(guò)程稱(chēng)為“一次連接”悴品。

1)在HTTP 1.0中禀综,客戶(hù)端的每次請(qǐng)求都要求建立一次單獨(dú)的連接,在處理完本次請(qǐng)求后苔严,就自動(dòng)釋放連接定枷。

2)在HTTP 1.1中則可以在一次連接中處理多個(gè)請(qǐng)求,并且多個(gè)請(qǐng)求可以重疊進(jìn)行届氢,不需要等待一個(gè)請(qǐng)求結(jié)束后再發(fā)送下一個(gè)請(qǐng)求欠窒。

由于HTTP在每次請(qǐng)求結(jié)束后都會(huì)主動(dòng)釋放連接,因此HTTP連接是一種“短連接”,要保持客戶(hù)端程序的在線狀態(tài)岖妄,需要不斷地向服務(wù)器發(fā)起連接請(qǐng)求型将。通常的做法是即時(shí)不需要獲得任何數(shù)據(jù),客戶(hù)端也保持每隔一段固定的時(shí)間向服務(wù)器發(fā)送一次“保持連接”的請(qǐng)求荐虐,服務(wù)器在收到該請(qǐng)求后對(duì)客戶(hù)端進(jìn)行回復(fù)七兜,表明知道客戶(hù)端“在線”。若服務(wù)器長(zhǎng)時(shí)間無(wú)法收到客戶(hù)端的請(qǐng)求福扬,則認(rèn)為客戶(hù)端“下線”腕铸,若客戶(hù)端長(zhǎng)時(shí)間無(wú)法收到服務(wù)器的回復(fù),則認(rèn)為網(wǎng)絡(luò)已經(jīng)斷開(kāi)铛碑。

2狠裹、SOCKET原理

2.1套接字(socket)概念

套接字(socket)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元汽烦。它是網(wǎng)絡(luò)通信過(guò)程中端點(diǎn)的抽象表示涛菠,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機(jī)的IP地址刹缝,本地進(jìn)程的協(xié)議端口碗暗,遠(yuǎn)地主機(jī)的IP地址,遠(yuǎn)地進(jìn)程的協(xié)議端口梢夯。

應(yīng)用層通過(guò)傳輸層進(jìn)行數(shù)據(jù)通信時(shí)言疗,TCP會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問(wèn)題。多個(gè)TCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過(guò)同一個(gè) TCP協(xié)議端口傳輸數(shù)據(jù)颂砸。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接噪奄,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口。應(yīng)用層可以和傳輸層通過(guò)Socket接口人乓,區(qū)分來(lái)自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信勤篮,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)?b>并發(fā)服務(wù)。

2.2 建立socket連接

建立Socket連接至少需要一對(duì)套接字色罚,其中一個(gè)運(yùn)行于客戶(hù)端碰缔,稱(chēng)為ClientSocket ,另一個(gè)運(yùn)行于服務(wù)器端戳护,稱(chēng)為ServerSocket 金抡。

套接字之間的連接過(guò)程分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng)客戶(hù)端請(qǐng)求腌且,連接確認(rèn)梗肝。

服務(wù)器監(jiān)聽(tīng):服務(wù)器端套接字并不定位具體的客戶(hù)端套接字,而是處于等待連接的狀態(tài)铺董,實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)巫击,等待客戶(hù)端的連接請(qǐng)求。

客戶(hù)端請(qǐng)求:指客戶(hù)端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字坝锰。為此粹懒,客戶(hù)端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào)什黑,然后就向服務(wù)器端套接字提出連接請(qǐng)求崎淳。

連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽(tīng)到或者說(shuō)接收到客戶(hù)端套接字的連接請(qǐng)求時(shí),就響應(yīng)客戶(hù)端套接字的請(qǐng)求愕把,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶(hù)端森爽,一旦客戶(hù)端確認(rèn)了此描述恨豁,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽(tīng)狀態(tài)爬迟,繼續(xù)接收其他客戶(hù)端套接字的連接請(qǐng)求橘蜜。

3、SOCKET連接與TCP/IP連接

創(chuàng)建Socket連接時(shí)付呕,可以指定使用的傳輸層協(xié)議计福,Socket可以支持不同的傳輸層協(xié)議(TCP或UDP),當(dāng)使用TCP協(xié)議進(jìn)行連接時(shí)徽职,該Socket連接就是一個(gè)TCP連接象颖。

socket則是對(duì)TCP/IP協(xié)議的封裝和應(yīng)用(程序員層面上)。也可以說(shuō)姆钉,TPC/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é)議埂伦,但是那樣的話(huà),如 果沒(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ò)上嵌巷。”

我們平時(shí)說(shuō)的最多的socket是什么呢室抽,實(shí)際上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等等痴奏。網(wǎng)絡(luò)有一段關(guān)于socket和TCP/IP協(xié)議關(guān)系的說(shuō)法比較容易理解:

“TCP/IP只是一個(gè)協(xié)議棧,就像操作系統(tǒng)的運(yùn)行機(jī)制一樣厌秒,必須要具體實(shí)現(xiàn)读拆,同時(shí)還要提供對(duì)外的操作接口。這個(gè)就像操作系統(tǒng)會(huì)提供標(biāo)準(zhǔn)的編程接口鸵闪,比如win32編程接口一樣檐晕,TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開(kāi)發(fā)所用的接口,這就是Socket編程接口蚌讼”倩遥”

實(shí)際上,傳輸層的TCP是基于網(wǎng)絡(luò)層的IP協(xié)議的篡石,而應(yīng)用層的HTTP協(xié)議又是基于傳輸層的TCP協(xié)議的芥喇,而Socket本身不算是協(xié)議,就像上面所說(shuō)凰萨,它只是提供了一個(gè)針對(duì)TCP或者UDP編程的接口继控。socket是對(duì)端口通信開(kāi)發(fā)的工具,它要更底層一些.

4械馆、Socket連接與HTTP連接

由于通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立武通,通信雙方即可開(kāi)始相互發(fā)送數(shù)據(jù)內(nèi)容霹崎,直到雙方連接斷開(kāi)。但在實(shí)際網(wǎng)絡(luò)應(yīng)用中冶忱,客戶(hù)端到服務(wù)器之間的通信往往需要穿越多個(gè)中間節(jié)點(diǎn)尾菇,例如路由器、網(wǎng)關(guān)囚枪、防火墻等派诬,大部分防火墻默認(rèn)會(huì)關(guān)閉長(zhǎng)時(shí)間處于非活躍狀態(tài)的連接而導(dǎo)致 Socket 連接斷連,因此需要通過(guò)輪詢(xún)告訴網(wǎng)絡(luò)链沼,該連接處于活躍狀態(tài)千埃。

而HTTP連接使用的是“請(qǐng)求—響應(yīng)”的方式,不僅在請(qǐng)求時(shí)需要先建立連接忆植,而且需要客戶(hù)端向服務(wù)器發(fā)出請(qǐng)求后,服務(wù)器端才能回復(fù)數(shù)據(jù)谒臼。

很多情況下朝刊,需要服務(wù)器端主動(dòng)向客戶(hù)端推送數(shù)據(jù),保持客戶(hù)端與服務(wù)器數(shù)據(jù)的實(shí)時(shí)與同步蜈缤。此時(shí)若雙方建立的是Socket連接拾氓,服務(wù)器就可以直接將數(shù)據(jù)傳送給客戶(hù)端;若雙方建立的是HTTP連接,則服務(wù)器需要等到客戶(hù)端發(fā)送一次請(qǐng)求后才能將數(shù)據(jù)傳回給客戶(hù)端底哥,因此咙鞍,客戶(hù)端定時(shí)向服務(wù)器端發(fā)送連接請(qǐng)求,不僅可以保持在線趾徽,同時(shí)也是在“詢(xún)問(wèn)”服務(wù)器是否有新的數(shù)據(jù)续滋,如果有就將數(shù)據(jù)傳給客戶(hù)端。

http協(xié)議是應(yīng)用層的協(xié)議

兩個(gè)計(jì)算機(jī)之間的交流無(wú)非是兩個(gè)端口之間的數(shù)據(jù)通信,具體的數(shù)據(jù)會(huì)以什么樣的形式展現(xiàn)`是以不同的應(yīng)用層協(xié)議來(lái)定義的`如HTTP`FTP`...

有個(gè)比較形象的描述:HTTP是轎車(chē)孵奶,提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動(dòng)機(jī)疲酌,提供了網(wǎng)絡(luò)通信的能力。

<1>Socket是一個(gè)針對(duì)TCP和UDP編程的接口了袁,你可以借助它建立TCP連接等等朗恳。而TCP和UDP協(xié)議屬于傳輸層?。

而http是個(gè)應(yīng)用層的協(xié)議载绿,它實(shí)際上也建立在TCP協(xié)議之上(HTTP是轎車(chē)粥诫,提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動(dòng)機(jī)崭庸,提供了網(wǎng)絡(luò)通信的能力)怀浆。

<2>Socket是對(duì)TCP/IP協(xié)議的封裝谊囚,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API)揉稚,通過(guò)Socket秒啦,我們才能使用TCP/IP協(xié)議。Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已搀玖,是對(duì)TCP/IP協(xié)議的抽象余境,從而形成了我們知道的一些最基本的函數(shù)接口。

短連接?

連接->傳輸數(shù)據(jù)->關(guān)閉連接?

HTTP是無(wú)狀態(tài)的灌诅,瀏覽器和服務(wù)器每進(jìn)行一次HTTP操作芳来,就建立一次連接,但任務(wù)結(jié)束就中斷連接猜拾。?

也可以這樣說(shuō):短連接是指SOCKET連接后發(fā)送后接收完數(shù)據(jù)后馬上斷開(kāi)連接即舌。?

長(zhǎng)連接?

連接->傳輸數(shù)據(jù)->保持連接 -> 傳輸數(shù)據(jù)-> 。挎袜。顽聂。 ->關(guān)閉連接。?

長(zhǎng)連接指建立SOCKET連接后不管是否使用都保持連接盯仪,但安全性較差紊搪。?

http的長(zhǎng)連接?

HTTP也可以建立長(zhǎng)連接的,使用Connection:keep-alive全景,HTTP 1.1默認(rèn)進(jìn)行持久連接耀石。HTTP1.1和HTTP1.0相比較而言,最大的區(qū)別就是增加了持久連接支持(貌似最新的 http1.0 可以顯示的指定 keep-alive),但還是無(wú)狀態(tài)的爸黄,或者說(shuō)是不可以信任的滞伟。?

什么時(shí)候用長(zhǎng)連接,短連接炕贵??

?長(zhǎng)連接多用于操作頻繁梆奈,點(diǎn)對(duì)點(diǎn)的通訊,而且連接數(shù)不能太多情況鲁驶,鉴裹。每個(gè)TCP連接都需要三步握手,這需要時(shí)間钥弯,如果每個(gè)操作都是先連接径荔,再操作的話(huà)那么處理速度會(huì)降低很多,所以每個(gè)操作完后都不斷開(kāi)脆霎,次處理時(shí)直接發(fā)送數(shù)據(jù)包就OK了总处,不用建立TCP連接。例如:數(shù)據(jù)庫(kù)的連接用長(zhǎng)連接睛蛛, 如果用短連接頻繁的通信會(huì)造成socket錯(cuò)誤鹦马,而且頻繁的socket 創(chuàng)建也是對(duì)資源的浪費(fèi)胧谈。?

而像WEB網(wǎng)站的http服務(wù)一般都用短鏈接,因?yàn)殚L(zhǎng)連接對(duì)于服務(wù)端來(lái)說(shuō)會(huì)耗費(fèi)一定的資源荸频,而像WEB網(wǎng)站這么頻繁的成千上萬(wàn)甚至上億客戶(hù)端的連接用短連接會(huì)更省一些資源菱肖,如果用長(zhǎng)連接,而且同時(shí)有成千上萬(wàn)的用戶(hù)旭从,如果每個(gè)用戶(hù)都占用一個(gè)連接的話(huà)稳强,那可想而知吧。所以并發(fā)量大和悦,但每個(gè)用戶(hù)無(wú)需頻繁操作情況下需用短連好退疫。?

?總之,長(zhǎng)連接和短連接的選擇要視情況而定鸽素。?

發(fā)送接收方式?

1褒繁、異步?

報(bào)文發(fā)送和接收是分開(kāi)的,相互獨(dú)立的馍忽,互不影響棒坏。這種方式又分兩種情況:?

(1)異步雙工:接收和發(fā)送在同一個(gè)程序中,由兩個(gè)不同的子進(jìn)程分別負(fù)責(zé)發(fā)送和接收?

(2)異步單工:接收和發(fā)送是用兩個(gè)不同的程序來(lái)完成遭笋。?

2俊抵、同步?

報(bào)文發(fā)送和接收是同步進(jìn)行,既報(bào)文發(fā)送后等待接收返回報(bào)文坐梯。 同步方式一般需要考慮超時(shí)問(wèn)題,即報(bào)文發(fā)出去后不能無(wú)限等待刹帕,需要設(shè)定超時(shí)時(shí)間吵血,超過(guò)該時(shí)間發(fā)送方不再等待讀返回報(bào)文,直接通知超時(shí)返回偷溺。?

在長(zhǎng)連接中一般是沒(méi)有條件能夠判斷讀寫(xiě)什么時(shí)候結(jié)束蹋辅,所以必須要加長(zhǎng)度報(bào)文頭。讀函數(shù)先是讀取報(bào)文頭的長(zhǎng)度挫掏,再根據(jù)這個(gè)長(zhǎng)度去讀相應(yīng)長(zhǎng)度的報(bào)文侦另。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市尉共,隨后出現(xiàn)的幾起案子褒傅,更是在濱河造成了極大的恐慌,老刑警劉巖袄友,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殿托,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡剧蚣,警方通過(guò)查閱死者的電腦和手機(jī)支竹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)旋廷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人礼搁,你說(shuō)我怎么就攤上這事饶碘。” “怎么了馒吴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵扎运,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我募书,道長(zhǎng)绪囱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任莹捡,我火速辦了婚禮鬼吵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篮赢。我一直安慰自己齿椅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布启泣。 她就那樣靜靜地躺著涣脚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寥茫。 梳的紋絲不亂的頭發(fā)上遣蚀,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音纱耻,去河邊找鬼芭梯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛弄喘,可吹牛的內(nèi)容都是我干的玖喘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蘑志,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼累奈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起急但,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤澎媒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后波桩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體旱幼,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年突委,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柏卤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冬三。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缘缚,靈堂內(nèi)的尸體忽然破棺而出勾笆,到底是詐尸還是另有隱情,我是刑警寧澤桥滨,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布窝爪,位于F島的核電站,受9級(jí)特大地震影響齐媒,放射性物質(zhì)發(fā)生泄漏蒲每。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一喻括、第九天 我趴在偏房一處隱蔽的房頂上張望邀杏。 院中可真熱鬧,春花似錦唬血、人聲如沸望蜡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脖律。三九已至,卻和暖如春腕侄,著一層夾襖步出監(jiān)牢的瞬間小泉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工冕杠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膏孟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓拌汇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親弊决。 傳聞我的和親對(duì)象是個(gè)殘疾皇子噪舀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容