iOS Http TCP UDP Socket

http 是應(yīng)用層協(xié)議右蹦,主要解決如何包裝數(shù)據(jù)舍败。

TCP/UDP是傳輸層協(xié)議涌攻,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸贞远。

Socket:是在應(yīng)用層和傳輸層之間的一個抽象層铝穷,它把TCP/IP層復(fù)雜的操作抽象為幾個簡單的接口供應(yīng)用層調(diào)用已實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信鹦马。

它是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示忙干,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議辕翰,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口挪丢,遠(yuǎn)地主機(jī)的IP地址蹂风,遠(yuǎn)地進(jìn)程的協(xié)議端口。

應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時乾蓬,TCP會遇到同時為多個應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問題惠啄。多個TCP連接或多個應(yīng)用程序進(jìn)程可能需要通過同一個 TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接巢块,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口礁阁。應(yīng)用層可以和傳輸層通過Socket接口,區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信族奢,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)姥闭。

套接字之間的連接過程分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求越走,連接確認(rèn)棚品。

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

? ? ? ? ? ? ?客戶端請求:指客戶端的套接字提出連接請求骡澈,要連接的目標(biāo)是服務(wù)器端的套接字锅纺。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字肋殴,指出服務(wù)器端套接字的地址和端口號囤锉,然后就向服務(wù)器端套接字提出連接請求。

? ? ? ? ? ? ?連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時护锤,就響應(yīng)客戶端套接字的請求官地,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端烙懦,一旦客戶端確認(rèn)了此描述驱入,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài)氯析,繼續(xù)接收其他客戶端套接字的連接請求亏较。


?TCP:面向連接、傳輸可靠(保證數(shù)據(jù)正確性,保證數(shù)據(jù)順序)掩缓、用于傳輸大量數(shù)據(jù)(流模式)宴杀、速度慢,建立連接需要開銷較多(時間拾因,系統(tǒng)資源)。

UDP:面向非連接、傳輸不可靠绢记、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)扁达、速度快。

開發(fā)時到底選擇TCP還是UDP? ? ? ? ?

?如果是由客戶端間歇性的發(fā)起無狀態(tài)的查詢蠢熄,并且偶爾發(fā)生延遲是可以容忍跪解,那么使用HTTP/HTTPS吧。 ? ? ? ?

?如果客戶端和服務(wù)器都可以獨(dú)立發(fā)包签孔,但是偶爾發(fā)生延遲可以容忍(比如:在線的紙牌游戲叉讥,許多MMO類的游戲),那么使用TCP長連接吧饥追。 ? ? ??

?如果客戶端和服務(wù)器都可以獨(dú)立發(fā)包图仓,而且無法忍受延遲(比如:大多數(shù)的多人動作類游戲,一些MMO類游戲)但绕,那么使用UDP吧救崔。

TCP三次握手建立連接

(關(guān)鍵字SYN(建立聯(lián)機(jī) Synchronize Sequence Numbers確認(rèn)鏈接序號) 、 ACK(確認(rèn) acknowledgement character 確認(rèn)字符))

? 第一次握手:客戶端發(fā)送一個TCP的SYN標(biāo)志位置1的包指明客戶打算連接的服務(wù)器的端口捏顺,以及初始序號X,保存在包頭的序列號(Sequence Number)字段里六孵。

?第二次握手:服務(wù)器發(fā)回確認(rèn)包(ACK)應(yīng)答。即SYN標(biāo)志位和ACK標(biāo)志位均為1同時幅骄,將確認(rèn)序號(Acknowledgement Number)設(shè)置為客戶的序列號加1以劫窒,即X+1。

?第三次握手:客戶端再次發(fā)送確認(rèn)包(ACK) SYN標(biāo)志位為0拆座,ACK標(biāo)志位為1主巍。并且把服務(wù)器發(fā)來ACK的序號字段+1,放在確定字段中發(fā)送給對方.并且在數(shù)據(jù)段放寫序列號的+1懂拾。

TCP四次揮手?jǐn)嚅_連接

1煤禽、在整個通信的過程中,誰先發(fā)起請求岖赋,誰就是客戶端檬果。

當(dāng)客戶端的數(shù)據(jù)傳輸?shù)轿膊繒r,客戶端向服務(wù)器發(fā)送帶有FIN標(biāo)志的數(shù)據(jù)包唐断,使其明白自己準(zhǔn)備斷開通信了选脊。

2、因?yàn)門CP的通信是使用全雙工通信的WebSocket脸甘,所以在斷開連接的時候也應(yīng)該是雙向的恳啥;當(dāng)服務(wù)器收到帶有FIN標(biāo)志的數(shù)據(jù)包時,其必不會直接發(fā)送FIN標(biāo)志斷開通信的請求丹诀,而是先發(fā)送一個帶有ACK標(biāo)志的應(yīng)答信息钝的,使客戶端明白服務(wù)器還有數(shù)據(jù)要進(jìn)行發(fā)送翁垂。

3、當(dāng) 服務(wù)器的數(shù)據(jù)發(fā)送完成后硝桩,向客戶端發(fā)送帶有FIN標(biāo)志的數(shù)據(jù)包沿猜,通知客戶端斷開連接。

4碗脊、當(dāng)客戶端收到FIN后啼肩,擔(dān)心網(wǎng)絡(luò)上某些不可控制的因素導(dǎo)致服務(wù)器不知道他要斷開連接,會發(fā)送ACK進(jìn)行確認(rèn)衙伶,同時把自己設(shè)置成TIME_WAIT狀態(tài)并啟動定時器祈坠,**在TCP的定時器到達(dá)后客戶端并沒有接收到請求,會重新發(fā)送矢劲;當(dāng)服務(wù)器收到請求后就斷開連接赦拘;當(dāng)客戶端等待2MLS(兩倍報文最大生存時間)后,沒有收到請求重傳的請求后卧须,客戶端這邊就斷開連接另绩,**整個TCP通信就結(jié)束了。

三次握手為什么不能改成兩次握手花嘶?

解:三次握手中的每一次都是必須的笋籽。如果是兩次握手,在第二次結(jié)束后椭员,服務(wù)器并不能保證客戶端已經(jīng)收到了第二次的請求车海,如此一來的話,服務(wù)器會一直保存著這個通信過程隘击,因?yàn)門CP通信都是要占用端口的侍芝,造成了一定的資源浪費(fèi)。所以埋同,就一定要讓客戶端來發(fā)送ACK的確認(rèn)請求州叠。

為什么不是4次?

因?yàn)?次之后就能保證客服端能收到服務(wù)器端的消息凶赁,服務(wù)器端能收到客服端的消息咧栗,4次造成時間和資源的浪費(fèi)。

如果兩次虱肄,那么B無法確定B的信息A是否能收到致板,所以如果B先說話,可能后面的A都收不到咏窿,會出現(xiàn)問題 斟或。如果四次,那么就造成了浪費(fèi)集嵌,因?yàn)樵谌谓Y(jié)束之后萝挤,就已經(jīng)可以保證A可以給B發(fā)信息御毅,A可以收到B的信息; B可以給A發(fā)信息平斩,B可以收到A的信息亚享。

關(guān)閉的時候?yàn)槭裁磿撬拇螕]手?

解:四次揮手不能像三次握手一樣绘面,三次握手可以將ACK+SYN 一起發(fā)送,ACK用于確認(rèn)信息侈沪,SYN卻是用來建立聯(lián)機(jī)的揭璃;四次揮手中ACK是不能和FIN一起發(fā)送,ACK只是告訴客戶端確認(rèn)我收到了亭罪,等我將數(shù)據(jù)發(fā)送完畢之后會向其發(fā)送FIN的標(biāo)志瘦馍,所以四次揮手是不能夠改變的。

http鏈接和socket鏈接的區(qū)別?

短連接

? ?連接 -> 傳輸數(shù)據(jù)->關(guān)閉連接应役。就建立一次情组,但任務(wù)結(jié)束就中斷連接。?

?長連接

? ? 連接 -> 傳輸數(shù)據(jù) -> 保持連接 -> 傳輸數(shù)據(jù)箩祥。院崇。。-> 關(guān)閉連接袍祖。是指連接后不管是否使用都保持連接底瓣,但安全性較差。

Http連接:http連接就是所謂的短連接蕉陋,即客戶端向服務(wù)器端發(fā)送一次請求捐凭,服務(wù)器端響應(yīng)后連接即會斷掉;?socket連接:socket連接就是所謂的長連接凳鬓,理論上客戶端和服務(wù)器端一旦建立起連接將不會主動斷掉茁肠;但是由于各種環(huán)境因素可能會是連接斷開,比如說:服務(wù)器端或客戶端主機(jī)down了缩举,網(wǎng)絡(luò)故障垦梆,或者兩者之間長時間沒有數(shù)據(jù)傳輸,網(wǎng)絡(luò)防火墻可能會斷開該連接以釋放網(wǎng)絡(luò)資源蚁孔。所以當(dāng)一個socket連接中沒有數(shù)據(jù)的傳輸奶赔,那么為了維持連接需要發(fā)送心跳消息~~具體心跳消息格式是開發(fā)者自己定義的.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市杠氢,隨后出現(xiàn)的幾起案子站刑,更是在濱河造成了極大的恐慌,老刑警劉巖鼻百,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绞旅,死亡現(xiàn)場離奇詭異摆尝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)因悲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門堕汞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晃琳,你說我怎么就攤上這事讯检。” “怎么了卫旱?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵人灼,是天一觀的道長。 經(jīng)常有香客問我顾翼,道長投放,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任适贸,我火速辦了婚禮灸芳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拜姿。我一直安慰自己烙样,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布砾隅。 她就那樣靜靜地躺著误阻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晴埂。 梳的紋絲不亂的頭發(fā)上究反,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音儒洛,去河邊找鬼精耐。 笑死,一個胖子當(dāng)著我的面吹牛琅锻,可吹牛的內(nèi)容都是我干的卦停。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恼蓬,長吁一口氣:“原來是場噩夢啊……” “哼惊完!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起处硬,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤小槐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凿跳,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡件豌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了控嗜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茧彤。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疆栏,靈堂內(nèi)的尸體忽然破棺而出曾掂,到底是詐尸還是另有隱情,我是刑警寧澤承边,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布遭殉,位于F島的核電站,受9級特大地震影響博助,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜痹愚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一富岳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拯腮,春花似錦窖式、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琼懊,卻和暖如春阁簸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哼丈。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工启妹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人醉旦。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓饶米,卻偏偏與公主長得像,于是被迫代替她去往敵國和親车胡。 傳聞我的和親對象是個殘疾皇子檬输,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

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