Socket

什么是socket?

計(jì)算機(jī)專業(yè)術(shù)語就是:

網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket. Socket的英文原義是"孔"或"插座". 作為BSD UNIX的進(jìn)程通信機(jī)制, 取后一種意思. 通常也稱作"套接字", 用于描述IP地址和端口, 是一個(gè)通信鏈的句柄, 可以用來實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信. Internet上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件, 同時(shí)提供幾種服務(wù). 每種服務(wù)都打開一個(gè)Socket, 并綁定到一個(gè)端口上, 不同的端口對(duì)于不同的服務(wù). Socket正如其英文原義那樣, 像一個(gè)多孔插座. 一臺(tái)主機(jī)猶如布滿各種插座的房間, 每個(gè)插座有一個(gè)編號(hào), 有的插座提供220伏交流電, 有的提供110伏交流電, 有的則提供有限電視節(jié)目. 客戶軟件將插頭插到不同編號(hào)的插座, 就可以得到不同的服務(wù).

通俗語:

Socket稱"套接字"

網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換, 這個(gè)連接的一端稱為一個(gè)socket端, 平時(shí)我們向服務(wù)器發(fā)送一個(gè)網(wǎng)絡(luò)請(qǐng)求, 然后服務(wù)器響應(yīng)請(qǐng)求, 返回服務(wù)器數(shù)據(jù)應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求.

1829339-23929497f64a93e8.png
細(xì)節(jié):

1.Socket相當(dāng)于一個(gè)"管道"或者說"隧道"兩邊的連接, 一個(gè)進(jìn)入, 一個(gè)出來
2.用戶名和密碼是存儲(chǔ)在服務(wù)器的數(shù)據(jù)庫中
3.我們要保證客戶端程序是訪問web應(yīng)用程序還是數(shù)據(jù)庫應(yīng)用程序呢?就是通過端口號(hào)

網(wǎng)絡(luò)通信要素:

1.網(wǎng)絡(luò)上的請(qǐng)求就是通過Socket來建立連接然后互相通信
2.IP地址(網(wǎng)絡(luò)上主機(jī)設(shè)備的唯一標(biāo)識(shí)) (尋找服務(wù)器的主機(jī))
3.端口號(hào)(定位程序)
4.用于標(biāo)示進(jìn)程(一個(gè)程序就是一個(gè)進(jìn)程) 的邏輯地址, 不同進(jìn)程的標(biāo)示
5.有效端口: 0~65535, 其中0~1024由系統(tǒng)使用或者保留端口, 開發(fā)中建議使用1024以上的端口
6.傳輸協(xié)議(用什么樣的方式進(jìn)行交互) (方式就是TCP和UDP需要還是不需要建立連接. 就像快遞一樣, 向順豐或者是圓通的一個(gè)方式)
7.通訊的規(guī)則(常見協(xié)議: TCP延曙、UDP)

TCP:

1829339-fa04ff6edfe3359d.png

三次握手,就是為了數(shù)據(jù)的安全性和可靠性 比如打電話:

第一次握手:先撥過去
第二次握手:對(duì)方"喂"了一聲, 響應(yīng)一下,
第三次握手:我聽到對(duì)方之后, 也說了一句"喂", 響應(yīng)

只有這三個(gè)步驟, 別人喂了一聲, 你也喂了一聲, 它能聽到我的響應(yīng), 我還能聽到它的響應(yīng)才是成功的. 假如借錢, 這樣才能保證了安全性和可靠性.

  1. 必須建立連接, 效率會(huì)稍低(每一次都要建立連接)
    2.進(jìn)行了多少次HTTP請(qǐng)求, 就進(jìn)行了多少次三次握手(HTTP是效率低些, 但是影響不大,因?yàn)橛脩粝麓伟l(fā)送網(wǎng)絡(luò)請(qǐng)求的時(shí)間不固定, 所以沒有多大影響) (打電話如果一直保持, 電話費(fèi)不就多了嗎)
    3.HTTP就是每發(fā)送一次請(qǐng)求, 就建立一次TCP連接, 三次握手.

UDP:

1829339-227dc4ef39992df0.png

將數(shù)據(jù)及源和目的封裝成數(shù)據(jù)包中, 不需要建立連接(就像老師(源)屏幕廣播, 就及時(shí)的把數(shù)據(jù)同步發(fā)送到你的電腦上(目的), 直接發(fā)送. 加入網(wǎng)絡(luò)斷了, 再次看到屏幕的時(shí)候, 只能看到最新的內(nèi)容. 沒了就沒了, 錯(cuò)過了就錯(cuò)過了)

沒個(gè)數(shù)據(jù)報(bào)的大小限制在64Kb之內(nèi)(首先是實(shí)時(shí)的, 如果數(shù)據(jù)弄大點(diǎn), 如果出問題, 就不會(huì)有太大的破壞)

因?yàn)闊o需連接, 因此是不可靠協(xié)議(省去了三次握手, 性能就高了)

不需要建立連接, 速度快

應(yīng)用:

1829339-92330b29f39d9b23.png

Socket通信流程圖:

1829339-56e4b74f062559c5.png

1.bind()就是綁定端口 (服務(wù)器要有端口標(biāo)識(shí)自己)

2.listen()就是監(jiān)聽端口看有沒有連接過來, 我同意就接受連接 (假如客戶端要連接web應(yīng)用程序端口, 就要監(jiān)聽80端口. 假如是惡意攻擊, 多次并發(fā)請(qǐng)求, 會(huì)造成網(wǎng)絡(luò)阻塞, 那我就可以斷開你的連接)

3.accept()

4.write()客戶端發(fā)請(qǐng)求

5.read()服務(wù)端接受請(qǐng)求

1829339-60e59cac08dd393e.png

假如客戶端發(fā)送登錄請(qǐng)求, 我服務(wù)器是要做出來請(qǐng)求的, 服務(wù)器要做回應(yīng)數(shù)據(jù), 發(fā)數(shù)據(jù)給客戶端, 做一個(gè)write()寫的操作一個(gè)HTTP的請(qǐng)求完了后, 接下有個(gè)操作, 結(jié)束連接. 因?yàn)橄麓握?qǐng)求的時(shí)間是不固定的. 就做一個(gè)close()操作

HTTP的底層就通過Socket建立連接通信管道, 實(shí)現(xiàn)數(shù)據(jù)的傳輸

HTTP是一個(gè)TCP的傳輸協(xié)議(方式), 它是一個(gè)可靠的安全的協(xié)議

實(shí)現(xiàn)Socket服務(wù)端監(jiān)聽方法:

1.實(shí)現(xiàn)socket的監(jiān)聽方法就是使用C語言實(shí)現(xiàn)(系統(tǒng)默認(rèn)就有, 但是麻煩)
2.使用CocoaAsyncSocket第三方(OC的) , 內(nèi)部是對(duì)C的封裝, 耗時(shí)操作肯定是耗時(shí)的, 開發(fā)的時(shí)候, 我們也是用的這個(gè)框架
3.Telnet命令 telnet host port/telnet 193.168.10.10 5288 telnet命令時(shí)連接服務(wù)器上的某個(gè)端口對(duì)應(yīng)的服務(wù)

Socket層上的協(xié)議:

739863-8a5bafc43367fe81.png

2.HTTP協(xié)議 (類似于字典的協(xié)議)

1829339-8ee6e416fbf8255b.png

3.XMPP協(xié)議(是一款即時(shí)通訊協(xié)議 ,目的是定義數(shù)據(jù)傳輸?shù)母袷?

1829339-8ee6e416fbf8255b-1.png

4.自定義即時(shí)通訊協(xié)議, json格式

1829339-2a18d5dfb26ee47b.png

補(bǔ)充:TCP靠欢、 UDP 拢切、HTTP 、 Socket之間的區(qū)別

IP:網(wǎng)絡(luò)層協(xié)議;
TCP和UDP:傳輸層協(xié)議;
HTTP:應(yīng)用層協(xié)議
SOCKET: TCP/IP網(wǎng)絡(luò)的API
TCP/IP代表傳輸控制協(xié)議/網(wǎng)際協(xié)議, 指的是一系列協(xié)議.

TCP和UDP使用IP協(xié)議從一個(gè)網(wǎng)絡(luò)傳送數(shù)據(jù)包到另一個(gè)網(wǎng)絡(luò). 把IP想象成一種高速公路, 它允許其他協(xié)議在上面行駛并找到其他電腦的出口. TCP和UDP是高速公路上的"卡車", 它們攜帶的貨物就是像HTTP, 文件傳輸協(xié)議FTP這樣的協(xié)議等.

TCP和UDP是FTP, HTTP和SMTP之類使用的傳輸層協(xié)議. 雖然TCP和UDP都是用來傳輸其他協(xié)議的, 它們卻有一個(gè)顯著的不同:TCP提供有保證的數(shù)據(jù)傳輸, 而UDP不提供. 這意味著TCP有一個(gè)特殊的機(jī)制來確保數(shù)據(jù)安全的不出錯(cuò)的從一個(gè)端點(diǎn)傳到另一個(gè)端點(diǎn), 而UDP不提供任何這樣的保證.

HTTP(超文本傳輸協(xié)議)就是利用TCP在兩臺(tái)電腦(通常是Web服務(wù)器和客戶端)之間的傳輸信息的協(xié)議. 客戶端使用Web瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器, Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端.

記住, 需要IP協(xié)議來連接網(wǎng)絡(luò);TCP是一種允許我們安全傳輸數(shù)據(jù)的機(jī)制, 使用TCP協(xié)議來傳輸數(shù)據(jù)的HTTP是Web服務(wù)器和客戶端使用的特殊協(xié)議.

Socket接口是TCP/IP網(wǎng)絡(luò)的API, Socket接口定義了許多函數(shù)或歷程, 用以開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末彤枢,一起剝皮案震驚了整個(gè)濱河市炎功,隨后出現(xiàn)的幾起案子栓拜,更是在濱河造成了極大的恐慌一膨,老刑警劉巖叫胁,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異汞幢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)微谓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門森篷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人豺型,你說我怎么就攤上這事仲智。” “怎么了姻氨?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵钓辆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我肴焊,道長(zhǎng)前联,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任娶眷,我火速辦了婚禮似嗤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘届宠。我一直安慰自己烁落,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布豌注。 她就那樣靜靜地躺著伤塌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪轧铁。 梳的紋絲不亂的頭發(fā)上每聪,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音齿风,去河邊找鬼熊痴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛聂宾,可吹牛的內(nèi)容都是我干的果善。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼系谐,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼巾陕!你這毒婦竟也來了讨跟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鄙煤,失蹤者是張志新(化名)和其女友劉穎晾匠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梯刚,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凉馆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亡资。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澜共。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锥腻,靈堂內(nèi)的尸體忽然破棺而出嗦董,到底是詐尸還是另有隱情,我是刑警寧澤瘦黑,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布京革,位于F島的核電站,受9級(jí)特大地震影響幸斥,放射性物質(zhì)發(fā)生泄漏匹摇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一甲葬、第九天 我趴在偏房一處隱蔽的房頂上張望来惧。 院中可真熱鬧,春花似錦演顾、人聲如沸供搀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葛虐。三九已至,卻和暖如春棉钧,著一層夾襖步出監(jiān)牢的瞬間屿脐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工宪卿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留的诵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓佑钾,卻偏偏與公主長(zhǎng)得像西疤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子休溶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

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

  • 1.1 TCP/IP協(xié)議組 TCP/IP協(xié)議(傳輸控制協(xié)議)由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成 IP層負(fù)責(zé)...
    F麥子閱讀 2,791評(píng)論 0 25
  • 一: 網(wǎng)絡(luò)各個(gè)協(xié)議:TCP/IP窖壕、SOCKET忧勿、HTTP 網(wǎng)絡(luò)七層由下往上分別為物理層、數(shù)據(jù)鏈路層瞻讽、網(wǎng)絡(luò)層鸳吸、傳輸層...
    iYeso閱讀 1,438評(píng)論 0 13
  • 剛醒,翻身卸夕, 周末的懶覺是奢侈。 昨夜風(fēng)冷婆瓜, 今晨天晴快集。 以前總有那么幾個(gè)朋友聊人生談理想, 現(xiàn)在是不是都被生活所...
    柚子yuko閱讀 211評(píng)論 0 0
  • 關(guān)于智商和學(xué)習(xí)成績(jī)的關(guān)系廉白,我可以很負(fù)責(zé)的說个初,學(xué)習(xí)成績(jī)和智商有相當(dāng)大的關(guān)系,如果智商不足猴蹂,那么不僅是學(xué)習(xí)成績(jī)差院溺,而且...
    王啟紅閱讀 2,818評(píng)論 0 0