1.Socket編程理論知識(shí)

Socket理論知識(shí)

網(wǎng)絡(luò)七層,由上到下分別是:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層。(物數(shù)網(wǎng)傳會(huì)表應(yīng))
其中物理層、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層通常被稱作媒體層,是網(wǎng)絡(luò)工程師所研究的對(duì)象;
傳輸層、會(huì)話層、表示層和應(yīng)用層則被稱作主機(jī)層,是用戶所面向和關(guān)心的內(nèi)容。

  • http協(xié)議對(duì)應(yīng)于應(yīng)用層
  • tcp/udp協(xié)議對(duì)應(yīng)于傳輸層
  • ip協(xié)議對(duì)應(yīng)于網(wǎng)絡(luò)層

三者本質(zhì)上沒(méi)有可比性。
HTTP協(xié)議是基于TCP連接的。
TCP/IP是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸;
而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。

我們?cè)趥鬏敂?shù)據(jù)時(shí),可以只使用傳輸層(TCP/IP),但是那樣的話,由于沒(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é)議,以封裝HTTP文本信息,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)送到網(wǎng)絡(luò)上。

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

什么是Socket

Socket又被稱之為“套接字”,是系統(tǒng)提供的用于網(wǎng)絡(luò)通信的方法。即網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端,稱之為Socket。
它的實(shí)質(zhì)并不是一種協(xié)議,沒(méi)有規(guī)定計(jì)算機(jī)應(yīng)當(dāng)怎么樣傳遞消息,只是給程序員提供了一個(gè)發(fā)送消息的接口,程序員使用這個(gè)接口提供的方法,發(fā)送與接收消息。
Socket描述了一個(gè)IP、端口對(duì)。它簡(jiǎn)化了程序員的操作,知道對(duì)方的IP以及PORT就可以給對(duì)方發(fā)送消息,再由服務(wù)器端來(lái)處理發(fā)送的這些消息。所以,Socket一定包含了通信的雙方,即客戶端(Client)與服務(wù)端(server)。

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

  • 網(wǎng)絡(luò)上的請(qǐng)求就是通過(guò)Socke來(lái)建立連接,然后互相通信的。
  • IP地址(網(wǎng)絡(luò)上主機(jī)設(shè)備的唯一標(biāo)識(shí)
  • 端口號(hào)(定位程序)
  • 用于標(biāo)示進(jìn)程的邏輯地址,不同的進(jìn)程的標(biāo)示
  • 有效端口:065535,其中01024是系統(tǒng)使用或是保留端口,開(kāi)發(fā)使用1024以上
  • 傳輸協(xié)議
  • 常見(jiàn)協(xié)議:TCP、UDP

TCP(傳輸控制協(xié)議)

  • 建立連接,形成傳輸數(shù)據(jù)的通道
  • 在連接中進(jìn)行大數(shù)據(jù)傳輸(數(shù)據(jù)大小不受限制)
  • 通過(guò)三次握手完成連接,是可靠協(xié)議,安全送達(dá)
  • 必須建立連接,效率會(huì)低

TCP是面向連接的、傳輸可靠(保證數(shù)據(jù)正確性且保證數(shù)據(jù)順序)、用于傳輸大量數(shù)據(jù)(流模式)、速度慢,建立連接需要開(kāi)銷較多(時(shí)間,系統(tǒng)資源)。

TCP是一種流模式的協(xié)議,是面向連接的,也就是說(shuō),在連接持續(xù)的過(guò)程中,socket中收到的數(shù)據(jù)都是由同一臺(tái)主機(jī)發(fā)出的(劫持什么的不考慮),因此,知道保證數(shù)據(jù)是有序的到達(dá)就行了,至于每次讀取多少數(shù)據(jù)不關(guān)心。

要建立連接的方式,就是TCP方式(http)

TCP三次握手

所謂三次握手(Three-way Handshake),是指建立一個(gè)TCP連接時(shí),需要客戶端和服務(wù)器總共發(fā)送3個(gè)包。三次握手的目的是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號(hào)和確認(rèn)號(hào)并交換TCP窗口大小信息。在socket編程中,客戶端執(zhí)行connect()時(shí),將觸發(fā)三次握手(圖片來(lái)源于網(wǎng)絡(luò)):

image.png

SYN(synchronous)是同步標(biāo)志;ACK (Acknowledgement)是確認(rèn)標(biāo)志,seq是序列號(hào)。

  • 第一次握手:客戶端發(fā)送一個(gè)TCP的SYN標(biāo)志位置1的包,指明客戶打算連接的服務(wù)器的端口,以及初始序號(hào)X,保存在包頭的序列號(hào)字段里。
  • 第二次握手:服務(wù)器發(fā)回確認(rèn)包(ACK)應(yīng)答。即SYN標(biāo)志位和ACK標(biāo)志位均為1同時(shí),將確認(rèn)序號(hào)設(shè)置為客戶的序列號(hào)加1以,即X+1。
  • 第三次握手:客戶端再次發(fā)送確認(rèn)包(ACK) SYN標(biāo)志位為0,ACK標(biāo)志位為1。并且把服務(wù)器發(fā)來(lái)ACK的序號(hào)字段+1,放在確定字段中發(fā)送給對(duì)方.并且在數(shù)據(jù)段放寫序列號(hào)的+1。

比如:A給B打電話,B:喂(第一次響應(yīng))A:喂(第二次響應(yīng))老王啊。。。(第三次響應(yīng))

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

1255547-46e1ea6fe74c2cdd.jpg

UDP(用戶數(shù)據(jù)報(bào)協(xié)議)

  • 將數(shù)據(jù)及源和目的封裝成數(shù)據(jù)包中,不需要建立連接
  • 每個(gè)數(shù)據(jù)報(bào)的大小限制在64K之內(nèi)
  • 無(wú)需連接(不通過(guò)三次握手),因策是不可靠協(xié)議
  • 不需要建立連接,速度快

UDP是面向無(wú)連接、傳輸不可靠、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)、速度快的傳輸層協(xié)議。注意,UDP傳輸?shù)氖菙?shù)據(jù)報(bào)包,而TCP是流。

UDP是面向無(wú)連接的協(xié)議,只要知道接收端的IP和端口,且網(wǎng)絡(luò)是可達(dá)的,任何主機(jī)都可以向接收端發(fā)送數(shù)據(jù)。這時(shí)候,如果一次能讀取超過(guò)一個(gè)報(bào)文的數(shù)據(jù),則會(huì)亂套。
比如,主機(jī)A向發(fā)送了報(bào)文P1,主機(jī)B發(fā)送了報(bào)文P2,如果能夠讀取超過(guò)一個(gè)報(bào)文的數(shù)據(jù),那么就會(huì)將P1和P2的數(shù)據(jù)合并在了一起,這樣的數(shù)據(jù)是沒(méi)有意義的。

UDP的使用,比如廣播

UDP客戶端-服務(wù)端程序設(shè)計(jì)基本框架

1255547-1408d36562bec859.jpg

Socket通信過(guò)程

每一個(gè)應(yīng)用或是服務(wù)都有一個(gè)端口。比如DNS的端口號(hào)53,http的端口號(hào)80都是對(duì)應(yīng)一個(gè)應(yīng)用或者服務(wù)的端口。我們能由DNS請(qǐng)求到查詢信息,是因?yàn)镈NS服務(wù)器時(shí)時(shí)刻刻都在監(jiān)聽(tīng)53端口,當(dāng)收到我們的查詢請(qǐng)求以后,就能夠返回我們想要的IP信息。所以,從程序設(shè)計(jì)上來(lái)講,應(yīng)該包含以下步驟:

  • 服務(wù)端利用Socket監(jiān)聽(tīng)端口
  • 客戶端發(fā)起連接
  • 服務(wù)端返回信息,建立連接,開(kāi)始通信
  • 客戶端,服務(wù)端斷開(kāi)連接

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ì)算機(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ù)牟l(fā)服務(wù)。

Socket連接

建立Socket連接至少需要一對(duì)套接字,其中一個(gè)運(yùn)行與客戶端,稱之為ClientSocket;另一個(gè)運(yùn)行于服務(wù)端,稱之為ServerSocket。

Socket之間的連接過(guò)程分為三個(gè)步驟:

  • 服務(wù)器監(jiān)聽(tīng):服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶端的連接請(qǐng)求
  • 客戶端請(qǐng)求:指客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求
  • 連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽(tīng)到或者說(shuō)接收到客戶端套接字的連接請(qǐng)求時(shí),就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽(tīng)狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,327評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,996評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 177,316評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 63,406評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,128評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 55,524評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,576評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,759評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,310評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,065評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,249評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,821評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,479評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,909評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 36,140評(píng)論 1 290
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,984評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,228評(píng)論 2 375

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

  • 一: 網(wǎng)絡(luò)各個(gè)協(xié)議:TCP/IP、SOCKET、HTTP 網(wǎng)絡(luò)七層由下往上分別為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層...
    iYeso閱讀 1,442評(píng)論 0 13
  • 1.1 TCP/IP協(xié)議組 TCP/IP協(xié)議(傳輸控制協(xié)議)由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成 IP層負(fù)責(zé)...
    F麥子閱讀 2,806評(píng)論 0 25
  • ?拿到從節(jié)點(diǎn)的代理對(duì)象: 通過(guò)代理對(duì)象執(zhí)行測(cè)試:
    許你一枝花閱讀 514評(píng)論 0 0
  • 是為了什么 讓我遇見(jiàn)了你 是為了什么 讓我擁有了你 是為了什么 讓我和你一直在一起 此刻是遇見(jiàn)你的219天 是擁有...
    鳳棲明天閱讀 168評(píng)論 0 1
  • 小區(qū)周圍的紫薇花開(kāi)了。
    蒼山暮雪閱讀 376評(píng)論 6 3