Socket是什么

Socket是什么?

  • 在計(jì)算機(jī)通信領(lǐng)域,socket 被翻譯為“套接字”,它是計(jì)算機(jī)之間進(jìn)行通信的一種約定或一種方式。通過(guò) socket 這種約定,一臺(tái)計(jì)算機(jī)可以接收其他計(jì)算機(jī)的數(shù)據(jù),也可以向其他計(jì)算機(jī)發(fā)送數(shù)據(jù)。

  • socket 的典型應(yīng)用就是 Web 服務(wù)器和瀏覽器:瀏覽器獲取用戶(hù)輸入的URL,向服務(wù)器發(fā)起請(qǐng)求,服務(wù)器分析接收到的URL,將對(duì)應(yīng)的網(wǎng)頁(yè)內(nèi)容返回給瀏覽器,瀏覽器再經(jīng)過(guò)解析和渲染,就將文字、圖片、視頻等元素呈現(xiàn)給用戶(hù)。

  • 學(xué)習(xí) socket,也就是學(xué)習(xí)計(jì)算機(jī)之間如何通信,并編寫(xiě)出實(shí)用的程序。

IP地址(IP Address)

  • 計(jì)算機(jī)分布在世界各地,要想和它們通信,必須要知道確切的位置。確定計(jì)算機(jī)位置的方式有多種,IP 地址是最常用的,例如,114.114.114.114 是國(guó)內(nèi)第一個(gè)、全球第三個(gè)開(kāi)放的 DNS 服務(wù)地址,127.0.0.1 是本機(jī)地址。

  • 其實(shí),我們的計(jì)算機(jī)并不知道 IP 地址對(duì)應(yīng)的地理位置,當(dāng)要通信時(shí),只是將 IP 地址封裝到要發(fā)送的數(shù)據(jù)包中,交給路由器去處理。路由器有非常智能和高效的算法,很快就會(huì)找到目標(biāo)計(jì)算機(jī),并將數(shù)據(jù)包傳遞給它,完成一次單向通信。

  • 目前大部分軟件使用 IPv4 地址,但 IPv6 也正在被人們接受,尤其是在教育網(wǎng)中,已經(jīng)大量使用。

端口(Port)

  • 有了 IP 地址,雖然可以找到目標(biāo)計(jì)算機(jī),但仍然不能進(jìn)行通信。一臺(tái)計(jì)算機(jī)可以同時(shí)提供多種網(wǎng)絡(luò)服務(wù),例如Web服務(wù)、FTP服務(wù)(文件傳輸服務(wù))、SMTP服務(wù)(郵箱服務(wù))等,僅有 IP 地址,計(jì)算機(jī)雖然可以正確接收到數(shù)據(jù)包,但是卻不知道要將數(shù)據(jù)包交給哪個(gè)網(wǎng)絡(luò)程序來(lái)處理,所以通信失敗。

  • 為了區(qū)分不同的網(wǎng)絡(luò)程序,計(jì)算機(jī)會(huì)為每個(gè)網(wǎng)絡(luò)程序分配一個(gè)獨(dú)一無(wú)二的端口號(hào)(Port Number),例如,Web服務(wù)的端口號(hào)是 80,F(xiàn)TP 服務(wù)的端口號(hào)是 21,SMTP 服務(wù)的端口號(hào)是 25。

端口(Port)是一個(gè)虛擬的、邏輯上的概念??梢詫⒍丝诶斫鉃橐坏篱T(mén),數(shù)據(jù)通過(guò)這道門(mén)流入流出,每道門(mén)有不同的編號(hào),就是端口號(hào)。如下圖所示:

服務(wù)的端口號(hào)

協(xié)議(Protocol)

  • 協(xié)議(Protocol)就是網(wǎng)絡(luò)通信的約定,通信的雙方必須都遵守才能正常收發(fā)數(shù)據(jù)。協(xié)議有很多種,例如 TCP、UDP、IP 等,通信的雙方必須使用同一協(xié)議才能通信。協(xié)議是一種規(guī)范,由計(jì)算機(jī)組織制定,規(guī)定了很多細(xì)節(jié),例如,如何建立連接,如何相互識(shí)別等。

協(xié)議僅僅是一種規(guī)范,必須由計(jì)算機(jī)軟件來(lái)實(shí)現(xiàn)。例如 IP 協(xié)議規(guī)定了如何找到目標(biāo)計(jì)算機(jī),那么各個(gè)開(kāi)發(fā)商在開(kāi)發(fā)自己的軟件時(shí)就必須遵守該協(xié)議,不能另起爐灶。

  • 所謂協(xié)議族(Protocol Family),就是一組協(xié)議(多個(gè)協(xié)議)的統(tǒng)稱(chēng)。最常用的是 TCP/IP 協(xié)議族,它包含了 TCP、IP、UDP、Telnet、FTP、SMTP 等上百個(gè)互為關(guān)聯(lián)的協(xié)議,由于 TCP、IP 是兩種常用的底層協(xié)議,所以把它們統(tǒng)稱(chēng)為 TCP/IP 協(xié)議族。

數(shù)據(jù)傳輸方式

計(jì)算機(jī)之間有很多數(shù)據(jù)傳輸方式,各有優(yōu)缺點(diǎn),常用的有兩種:SOCK_STREAM 和 SOCK_DGRAM。

  1. SOCK_STREAM 表示面向連接的數(shù)據(jù)傳輸方式。數(shù)據(jù)可以準(zhǔn)確無(wú)誤地到達(dá)另一臺(tái)計(jì)算機(jī),如果損壞或丟失,可以重新發(fā)送,但效率相對(duì)較慢。常見(jiàn)的 http 協(xié)議就使用 SOCK_STREAM 傳輸數(shù)據(jù),因?yàn)橐_保數(shù)據(jù)的正確性,否則網(wǎng)頁(yè)不能正常解析。

  2. SOCK_DGRAM 表示無(wú)連接的數(shù)據(jù)傳輸方式。計(jì)算機(jī)只管傳輸數(shù)據(jù),不作數(shù)據(jù)校驗(yàn),如果數(shù)據(jù)在傳輸中損壞,或者沒(méi)有到達(dá)另一臺(tái)計(jì)算機(jī),是沒(méi)有辦法補(bǔ)救的。也就是說(shuō),數(shù)據(jù)錯(cuò)了就錯(cuò)了,無(wú)法重傳。因?yàn)?SOCK_DGRAM 所做的校驗(yàn)工作少,所以效率比 SOCK_STREAM 高。

QQ 視頻聊天和語(yǔ)音聊天就使用 SOCK_DGRAM 傳輸數(shù)據(jù),因?yàn)槭紫纫WC通信的效率,盡量減小延遲,而數(shù)據(jù)的正確性是次要的,即使丟失很小的一部分?jǐn)?shù)據(jù),視頻和音頻也可以正常解析,最多出現(xiàn)噪點(diǎn)或雜音,不會(huì)對(duì)通信質(zhì)量有實(shí)質(zhì)的影響。

注意:SOCK_DGRAM 沒(méi)有想象中的糟糕,不會(huì)頻繁的丟失數(shù)據(jù),數(shù)據(jù)錯(cuò)誤只是小概率事件。

有可能多種協(xié)議使用同一種數(shù)據(jù)傳輸方式,所以在 socket 編程中,需要同時(shí)指明數(shù)據(jù)傳輸方式和協(xié)議。

綜上所述:IP地址和端口能夠在廣袤的互聯(lián)網(wǎng)中定位到要通信的程序,協(xié)議和數(shù)據(jù)傳輸方式規(guī)定了如何傳輸數(shù)據(jù),有了這些,兩臺(tái)計(jì)算機(jī)就可以通信了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Socket 一說(shuō)起來(lái)肯定都并不陌生,大概一說(shuō)出來(lái)所有人的第一反應(yīng)就是,這是個(gè)做端到端長(zhǎng)連接通信的。一點(diǎn)問(wèn)題沒(méi)有,...
    封不然閱讀 1,299評(píng)論 0 5
  • Socket原理 1、什么是Socket 在計(jì)算機(jī)通信領(lǐng)域,socket 被翻譯為“套接字”,它是計(jì)算機(jī)之間進(jìn)行通...
    yongfutian閱讀 263,694評(píng)論 14 346
  • 引言 網(wǎng)絡(luò)學(xué)習(xí)的核心內(nèi)容就是網(wǎng)絡(luò)協(xié)議的學(xué)習(xí) 網(wǎng)絡(luò)協(xié)議:網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或者說(shuō)是約定的集合因?yàn)椴?..
    _涼風(fēng)_閱讀 2,201評(píng)論 8 22
  • 名詞延伸 通俗的說(shuō),域名就相當(dāng)于一個(gè)家庭的門(mén)牌號(hào)碼,別人通過(guò)這個(gè)號(hào)碼可以很容易的找到你。如果把IP地址比作一間房子...
    楊大蝦閱讀 20,829評(píng)論 2 56
  • 冰雪從來(lái)是潔白的 北方的冬天,當(dāng)一場(chǎng)大雪過(guò)后,銀裝素裹,自是一曲季節(jié)的禮贊;那一望無(wú)垠的雪原冰壁,綿亙到天邊,仿佛...
    秋思楓醉閱讀 244評(píng)論 0 0

友情鏈接更多精彩內(nèi)容