iOS網(wǎng)絡(luò)HTTP豆挽、TCP育谬、UDP、Socket 知識總結(jié)

一帮哈、前言

? ? ? ? ?以下是我自己的學習加理解膛檀,分享給大家,同時也算是自己做的筆記吧娘侍,俗話說好記性不如爛筆頭咖刃,希望來的你能有所幫助,有什么理解不到位的地方憾筏,還請大神些多多指教嚎杨。

二、網(wǎng)絡(luò)模型

? ?OSI 七層模型:我們一般使用的網(wǎng)絡(luò)數(shù)據(jù)傳輸由下而上共有七層氧腰,分別為物理層磕潮、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層容贝、傳輸層自脯、會話層、表示層斤富、應(yīng)用層膏潮。

OSI網(wǎng)絡(luò)七層模型

TCP/IP模型:TCP/IP 模型分為四層,由下而上分別為網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層满力、傳輸層焕参、應(yīng)用層轻纪。

TCP/IP網(wǎng)絡(luò)模型

三、概念

? ?短連接

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

? 長連接

? ? 連接 -> 傳輸數(shù)據(jù) -> 保持連接 -> 傳輸數(shù)據(jù)涩嚣。崇众。。-> 關(guān)閉連接航厚。是指連接后不管是否使用都保持連接顷歌,但安全性較差。

? 長連接幔睬、短連接用法:

? ? ? ? ?長連接多用于操作頻繁眯漩,點對點的通訊,而且連接數(shù)不能太多的情況下麻顶。每個TCP連接都需要三步握手赦抖,這需要時間,如果每個操作都是先連接辅肾,再操作的話那么處理 速度會降低很多队萤,所以每個操作完后都不斷開,次處理時直接發(fā)送數(shù)據(jù)包就OK了宛瞄,不用建立TCP連接浮禾。例如:數(shù)據(jù)庫的連接用長連接交胚, 如果用短連接頻繁的通信會造成Socket錯誤份汗,而且頻繁的Socket創(chuàng)建也是對資源的浪費。

? ? ? ? 而像WEB網(wǎng)站的http服務(wù)一般都用短鏈接蝴簇,因為長連接對于服務(wù)端來說會耗費一定的資源杯活,而像WEB網(wǎng)站這么頻繁的成千上萬甚至上億客戶端的連接用短連接 會更省一些資源,如果用長連接熬词,而且同時有成千上萬的用戶旁钧,如果每個用戶都占用一個連接的話,那可想而知吧互拾。所以并發(fā)量大歪今,但每個用戶無需頻繁操作情況下 需用短連好。

總之颜矿,長連接和短連接的選擇要視情況而定寄猩。


HTTP

http連接:

http協(xié)議即超文本傳送協(xié)議,是web聯(lián)網(wǎng)的基礎(chǔ)骑疆,也是手機聯(lián)網(wǎng)常用協(xié)議之一田篇,http協(xié)議是建立在tcp協(xié)議之上的一種應(yīng)用替废。

? ? ? ? ? http連接最顯著的特點是客戶端發(fā)送的每次請求都需要服務(wù)器回送響應(yīng),在請求結(jié)束后泊柬,會主動釋放連接椎镣。從建立連接到關(guān)閉連接的過程稱為“一次連接”。

? ? ? ?1)在HTTP 1.0中兽赁,客戶端的每次請求都要求建立一次單獨的連接状答,在處理完本次請求后,就自動釋放連接闸氮。

? ? ? ? 2)在HTTP 1.1中則可以在一次連接中處理多個請求剪况,并且多個請求可以重疊進行,不需要等待一個請求結(jié)束后再發(fā)送下一個請求蒲跨。

? ? ? ?由于http在每次請求結(jié)束后都會主動釋放連接译断,因此http連接是“短連接”。要保持客戶端程序的在線狀態(tài)或悲,需要不斷地向服務(wù)器發(fā)起連接請求孙咪。通常的 做法是即時不需要獲得任何數(shù)據(jù),客戶端也保持每隔一段固定的時間向服務(wù)器發(fā)送一次“保持連接”的請求巡语,服務(wù)器在收到該請求后對客戶端進行回復(fù)翎蹈,表明知道客 戶端“在線”。若服務(wù)器長時間無法收到客戶端的請求男公,則認為客戶端“下線”荤堪,若客戶端長時間無法收到服務(wù)器的回復(fù),則認為網(wǎng)絡(luò)已經(jīng)斷開枢赔。


Socket

? ? ? ?套接字(socket)是通信的基石澄阳,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。

? ? ? ? 應(yīng)用層通過傳輸層進行數(shù)據(jù)通信時踏拜,TCP會遇到同時為多個應(yīng)用程序進程提供并發(fā)服務(wù)的問題碎赢。多個TCP連接或多個應(yīng)用程序進程可能需要通過同一個 TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進程和連接速梗,許多計算機操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口肮塞。應(yīng)用層可以和傳輸層通過Socket接口,區(qū)分來自不同應(yīng)用程序進程或網(wǎng)絡(luò)連接的通信姻锁,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)枕赵。

socket

建立socket連接

? ? ? ? ? ? 建立 Socket 連接至少需要一對套接字,其中一個運行于客戶端位隶,稱為ClientSocket拷窜,另一個運行于服務(wù)器端,稱為ServerSocket。

? ? ? ? ? ? 套接字之間的連接過程分為三個步驟:服務(wù)器監(jiān)聽装黑,客戶端請求副瀑,連接確認。

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

? ? ? ? ? ? ?客戶端請求:指客戶端的套接字提出連接請求狈孔,要連接的目標是服務(wù)器端的套接字。為此材义,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字均抽,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求其掂。

? ? ? ? ? ? ?連接確認:當服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時油挥,就響應(yīng)客戶端套接字的請求,建立一個新的線程款熬,把服務(wù)器端套接字的描述發(fā)給客戶端深寥,一旦客戶端確認了此描述,雙方就正式建立連接贤牛。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài)惋鹅,繼續(xù)接收其他客戶端套接字的連接請求。

Socket連接與TCP連接

? ? ? ? ? ? ? ? 創(chuàng)建Socket連接時殉簸,可以指定使用的傳輸層協(xié)議闰集,Socket可以支持不同的傳輸層協(xié)議(TCP或UDP),當使用TCP協(xié)議進行連接時般卑,該Socket連接就是一個TCP連接武鲁。

Socket連接與HTTP連接

? ? ? ? ? ? ? ? ?由于通常情況下 Socket 連接就是TCP連接,因此 Socket 連接一旦建立椭微,通信雙方即可開始相互發(fā)送數(shù)據(jù)內(nèi)容洞坑,直到雙方連接斷開盲链。但在實際網(wǎng)絡(luò)應(yīng)用中蝇率,客戶端到服務(wù)器之間的通信往往需要穿越多個中間節(jié)點,例如路由器刽沾、網(wǎng)關(guān)本慕、防火墻等,大部分防火墻默認會關(guān)閉長時間處于非活躍狀態(tài)的連接而導致 Socket 連接斷連侧漓,因此需要通過輪詢告訴網(wǎng)絡(luò)锅尘,該連接處于活躍狀態(tài)。

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

? ? ? ? ? ? ? ? ?很多情況下顿乒,需要服務(wù)器端主動向客戶端推送數(shù)據(jù)议街,保持客戶端與服務(wù)器數(shù)據(jù)的實時與同步。此時若雙方建立的是Socket連接璧榄,服務(wù)器就可以直接將數(shù)據(jù)傳送給 客戶端特漩;若雙方建立的是HTTP連接,則服務(wù)器需要等到客戶端發(fā)送一次請求后才能將數(shù)據(jù)傳回給客戶端骨杂,因此涂身,客戶端定時向服務(wù)器端發(fā)送連接請求,不僅可以保持在線搓蚪,同時也是在“詢問”服務(wù)器是否有新的數(shù)據(jù)蛤售,如果有就將數(shù)據(jù)傳給客戶端。


TCP與UDP的區(qū)別

? ? ? ? ? TCP:面向連接妒潭、傳輸可靠(保證數(shù)據(jù)正確性,保證數(shù)據(jù)順序)悍抑、用于傳輸大量數(shù)據(jù)(流模式)、速度慢杜耙,建立連接需要開銷較多(時間搜骡,系統(tǒng)資源)。

? ? ? ? ? UDP:面向非連接佑女、傳輸不可靠记靡、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)、速度快团驱。

TCP三次握手:指建立一個TCP連接時摸吠,需要客戶端和服務(wù)器總共發(fā)送3個包。

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

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

? ? ? ? ? ?第三次握手:客戶端再次發(fā)送確認包(ACK) SYN標志位為0兵罢,ACK標志位為1献烦。并且把服務(wù)器發(fā)來ACK的序號字段+1,放在確定字段中發(fā)送給對方.并且在數(shù)據(jù)段放寫序列號的+1卖词。

tcp三次握手

QQ巩那、微信為什么是UDP而不是TCP:

? ? ? ? ? ?像騰訊QQ之類的大規(guī)模即時通訊軟件,經(jīng)常性的是幾千萬用戶同時在線 如果都采用長連接的方式。豈不是要服務(wù)器的硬件防火墻監(jiān)控數(shù)千萬個連接了即横,就算分布式服務(wù)端能承受這么多用戶 網(wǎng)關(guān)也受不了噪生,而且有理由相信服務(wù)器也受不了 。所以對于大規(guī)模即時通訊东囚,尤其是用戶數(shù)量眾多 肯定不能用TCP常連接的方式杠园,這種方式只適合于小規(guī)模的即時通訊,如局域網(wǎng)舔庶,公司內(nèi)部的即時通訊等 對于大規(guī)模的抛蚁,用戶數(shù)量眾多的C/S軟件 應(yīng)當采用UDP協(xié)議進行數(shù)據(jù)傳輸,網(wǎng)關(guān)就不停收發(fā)數(shù)據(jù)包就可以了惕橙。?

? ? ? ? ? ?使用TCP協(xié)議和客戶端進行短命連接瞧甩,用了就關(guān) 比如客戶登陸請求好友列表,我們就和他建立TCP連接發(fā)給他好友列表弥鹦,然后關(guān)掉連接 當用戶要給另外一個客戶發(fā)信心我們再建立連接肚逸,數(shù)據(jù)傳完我們又關(guān)掉連接 這種方式,無疑服務(wù)器可以承載更多的用戶登陸彬坏。但是缺點也是非常明顯的 一般情況下我們接收的數(shù)據(jù)都不大朦促,每次發(fā)一點點消息都要建立連接 TCP本來就比較消耗網(wǎng)絡(luò)資源,這樣毫無規(guī)律的斷斷連連 連連斷斷栓始,加上本來這種方式就有較高的延遲 也不適合大規(guī)模的即時通訊

? ? ? ? ? ?事實上务冕,在Internet上傳輸?shù)腢DP包從A發(fā)送給B 它完整地到達幾率一般情況下還是相當之高的。我們開發(fā)一個多用戶的即時通訊軟件 采用UDP傳輸消息的時候幻赚,報文被劃分成包 一個UDP包究竟是多大禀忆?經(jīng)過我的了解一個UDP用戶包最大大小是64KB 根據(jù)網(wǎng)絡(luò)狀況,實際在傳輸包的時候可能把包劃成若干個分片 一個分片的最大大小是1640B 可以保存好幾百個漢字落恼。UDP協(xié)議提供數(shù)據(jù)報機制傳輸信息 如果報文比較長箩退,比如一個文件,一個圖片 要被劃分成若干個數(shù)據(jù)包佳谦,由于對于一般的文字消息和其它指令都是比較小的 它們會被放在一個包里面戴涝,由于UDP是無連接的 不可靠的,如果發(fā)生丟包钻蔑,不會重傳 所以不能保證數(shù)據(jù)包能完整并準確地到達目的地啥刻,但是對于我們的即時通訊軟件來說 一般的聊天信息比較小,比如我們給一個好友發(fā)送一條聊天信息“今天我很高興”矢棚,會不會服務(wù)器轉(zhuǎn)發(fā)的時候只收到“今天我很高”郑什,再傳給好友的時候變成了“今天”府喳,答案是不會發(fā)生這種情況的 UDP雖然描述是不可靠蒲肋,不過依然在數(shù)據(jù)包中包含了頭信息描述了包的大小等信息,在包進行轉(zhuǎn)發(fā)的過程中 如果數(shù)據(jù)不完整,是會被網(wǎng)絡(luò)設(shè)備發(fā)現(xiàn)的兜粘,比如中途一個轉(zhuǎn)發(fā)這個包的路由器發(fā)現(xiàn)了一個不完整的UDP包會直接丟棄申窘,如果是TCP 當有包被丟棄了會進行重傳,對于UDP 包在傳輸過程中由于數(shù)據(jù)的缺失被丟棄不會進行重傳 我們頂多就是一條信息發(fā)送失敗了孔轴,而這種概率一般情況下是非常低的 剃法。

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

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

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

? ? ? ? 如果客戶端和服務(wù)器都可以獨立發(fā)包雁竞,而且無法忍受延遲(比如:大多數(shù)的多人動作類游戲钦椭,一些MMO類游戲),那么使用UDP吧碑诉。


基本TCP客戶—服務(wù)器程序設(shè)計基本框架

tcp

基本UDP客戶—服務(wù)器程序設(shè)計基本框架流程圖

udp

總結(jié)

? ? 其中知識還有很多彪腔,我只是寫出了我暫時的理解,班門弄斧进栽,見笑德挣。雙擊666,老鐵沒毛病快毛,哈哈哈盲厌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市祸泪,隨后出現(xiàn)的幾起案子吗浩,更是在濱河造成了極大的恐慌,老刑警劉巖没隘,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懂扼,死亡現(xiàn)場離奇詭異,居然都是意外死亡右蒲,警方通過查閱死者的電腦和手機阀湿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瑰妄,“玉大人陷嘴,你說我怎么就攤上這事〖渥” “怎么了灾挨?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵邑退,是天一觀的道長。 經(jīng)常有香客問我劳澄,道長地技,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任秒拔,我火速辦了婚禮莫矗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砂缩。我一直安慰自己作谚,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布庵芭。 她就那樣靜靜地躺著食磕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喳挑。 梳的紋絲不亂的頭發(fā)上彬伦,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音伊诵,去河邊找鬼单绑。 笑死,一個胖子當著我的面吹牛曹宴,可吹牛的內(nèi)容都是我干的搂橙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼笛坦,長吁一口氣:“原來是場噩夢啊……” “哼区转!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起版扩,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤废离,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后礁芦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜻韭,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年柿扣,在試婚紗的時候發(fā)現(xiàn)自己被綠了肖方。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡未状,死狀恐怖俯画,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情司草,我是刑警寧澤艰垂,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布泡仗,位于F島的核電站,受9級特大地震影響材泄,放射性物質(zhì)發(fā)生泄漏沮焕。R本人自食惡果不足惜吨岭,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一拉宗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辣辫,春花似錦旦事、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至葬馋,卻和暖如春卖鲤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背畴嘶。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工蛋逾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窗悯。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓区匣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蒋院。 傳聞我的和親對象是個殘疾皇子亏钩,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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