Socket

網(wǎng)絡(luò)七層由下往上分別為物理層档泽、數(shù)據(jù)鏈路層俊戳、網(wǎng)絡(luò)層、傳輸層馆匿、會話層抑胎、表示層和應(yīng)用層。 其中物理層渐北、數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層通常被稱作媒體層阿逃,是網(wǎng)絡(luò)工程師所研究的對象; 傳輸層腔稀、會話層盆昙、表示層和應(yīng)用層則被稱作主機層羽历,是用戶所面向和關(guān)心的內(nèi)容焊虏。

  • http協(xié)議對應(yīng)于應(yīng)用層
  • tcp/udp協(xié)議對應(yīng)于傳輸層
  • ip協(xié)議對應(yīng)于網(wǎng)絡(luò)層
    三者本質(zhì)上沒有可比性狐蜕。何況HTTP協(xié)議是基于TCP連接的辙培。TCP/IP是傳輸層協(xié)議逮壁,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸挺智;而HTTP是應(yīng)用層協(xié)議积担,主要解決如何包裝數(shù)據(jù)。我們在傳輸數(shù)據(jù)時榆鼠,可以只使用傳輸層(TCP/IP)遥昧,但是那樣的話,由于沒有應(yīng)用層褥琐,便無法識別數(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是對TCP/IP協(xié)議的封裝谷异,Socket本身并不是協(xié)議分尸,而是一個調(diào)用接口(API),通過Socket歹嘹,我們才能使用TCP/IP協(xié)議寓落。

什么是Socket?

Socket又稱之為“套接字”,是系統(tǒng)提供的用于網(wǎng)絡(luò)通信的方法荞下。它的實質(zhì)并不是一種協(xié)議伶选,沒有規(guī)定計算機應(yīng)當怎么樣傳遞消息,只是給程序員提供了一個發(fā)送消息的接口尖昏,程序員使用這個接口提供的方法仰税,發(fā)送與接收消息。
Socket描述了一個IP抽诉、端口對陨簇。它簡化了程序員的操作,知道對方的IP以及PORT就可以給對方發(fā)送消息迹淌,再由服務(wù)器端來處理發(fā)送的這些消息河绽。所以,Socket一定包含了通信的雙方唉窃,即客戶端(Client)與服務(wù)端(server)耙饰。

TCP

TCP是面向連接的、傳輸可靠(保證數(shù)據(jù)正確性且保證數(shù)據(jù)順序)纹份、用于傳輸大量數(shù)據(jù)(流模式)苟跪、速度慢廷痘,建立連接需要開銷較多(時間,系統(tǒng)資源)件已。
TCP是一種流模式的協(xié)議笋额,是面向連接的,也就是說篷扩,在連接持續(xù)的過程中兄猩,socket中收到的數(shù)據(jù)都是由同一臺主機發(fā)出的(劫持什么的不考慮),因此鉴未,知道保證數(shù)據(jù)是有序的到達就行了厦滤,至于每次讀取多少數(shù)據(jù)不關(guān)心。

TCP三次握手

所謂三次握手(Three-way Handshake)歼狼,是指建立一個TCP連接時掏导,需要客戶端和服務(wù)器總共發(fā)送3個包。三次握手的目的是連接服務(wù)器指定端口羽峰,建立TCP連接,并同步連接雙方的序列號和確認號并交換TCP窗口大小信息趟咆。在socket編程中,客戶端執(zhí)行connect()時梅屉,將觸發(fā)三次握手 圖片來源于
標哥的技術(shù)博客

Paste_Image.png

SYN(synchronous)是同步標志值纱;ACK (Acknowledgement)是確認標志,seq是序列號坯汤。
第一次握手:客戶端發(fā)送一個TCP的SYN標志位置1的包虐唠,指明客戶打算連接的服務(wù)器的端口,以及初始序號X,保存在包頭的序列號字段里惰聂。
第二次握手:服務(wù)器發(fā)回確認包(ACK)應(yīng)答疆偿。即SYN標志位和ACK標志位均為1同時,將確認序號設(shè)置為客戶的序列號加1以搓幌,即X+1杆故。
第三次握手:客戶端再次發(fā)送確認包(ACK) SYN標志位為0,ACK標志位為1溉愁。并且把服務(wù)器發(fā)來ACK的序號字段+1处铛,放在確定字段中發(fā)送給對方.并且在數(shù)據(jù)段放寫序列號的+1。
關(guān)于三次握手拐揭,知乎上有個段子我覺得挺好的撤蟆。
「喂喂喂,能聽到嗎堂污?」
「沒問題家肯。能聽到就回一聲》笱唬」
「沒問題息楔。」

TCP四次揮手

四次揮手的流程:


Paste_Image.png

當Server端收到Client端的SYN連接請求報文后扒披,可以直接發(fā)送SYN+ACK報文值依。其中ACK報文是用來應(yīng)答的,SYN報文是用來同步的碟案。但是關(guān)閉連接時愿险,當Server端收到FIN報文時,很可能并不會立即關(guān)閉SOCKET价说,所以只能先回復(fù)一個ACK報文辆亏,告訴Client端,”你發(fā)的FIN報文我收到了”鳖目。只有等到我Server端所有的報文都發(fā)送完了扮叨,我才能發(fā)送FIN報文,因此不能一起發(fā)送领迈。故需要四步握手彻磁。

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

Paste_Image.png

UDP

UDP是面向無連接、傳輸不可靠狸捅、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)衷蜓、速度快的傳輸層協(xié)議。注意尘喝,UDP傳輸?shù)氖菙?shù)據(jù)報包磁浇,而TCP是流。
UDP是面向無連接的協(xié)議朽褪,只要知道接收端的IP和端口置吓,且網(wǎng)絡(luò)是可達的,任何主機都可以向接收端發(fā)送數(shù)據(jù)缔赠。這時候交洗,如果一次能讀取超過一個報文的數(shù)據(jù),則會亂套橡淑。比如构拳,主機A向發(fā)送了報文P1,主機B發(fā)送了報文P2梁棠,如果能夠讀取超過一個報文的數(shù)據(jù)置森,那么就會將P1和P2的數(shù)據(jù)合并在了一起,這樣的數(shù)據(jù)是沒有意義的符糊。


Paste_Image.png

Socket的通信過程
每一個應(yīng)用或者說服務(wù)都有一個端口凫海。比如DNS的端口號53,http的端口號80都是對應(yīng)一個應(yīng)用或者服務(wù)的端口男娄。我們能由DNS請求到查詢信息行贪,是因為DNS服務(wù)器時時刻刻都在監(jiān)聽53端口漾稀,當收到我們的查詢請求以后,就能夠返回我們想要的IP信息建瘫。所以崭捍,從程序設(shè)計上來講,應(yīng)該包含以下步驟:

服務(wù)端利用Socket監(jiān)聽端口啰脚;
客戶端發(fā)起連接殷蛇;
服務(wù)端返回信息,建立連接橄浓,開始通信粒梦;
客戶端,服務(wù)端斷開連接荸实。
Socket原理
套接字(socket)是通信的基石匀们,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點的抽象表示准给,包含進行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議昼蛀,本地主機的IP地址,本地進程的協(xié)議端口圆存,遠地主機的IP地址叼旋,遠地進程的協(xié)議端口。

應(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連接至少需要一對套接字,其中一個運行于客戶端兔综,稱為ClientSocket饿凛,另一個運行于服務(wù)器端,稱為ServerSocket软驰。

套接字之間的連接過程分為三個步驟:

服務(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ù)接收其他客戶端套接字的連接請求


本文轉(zhuǎn)載自
標哥的技術(shù)博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拴疤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子独泞,更是在濱河造成了極大的恐慌呐矾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懦砂,死亡現(xiàn)場離奇詭異蜒犯,居然都是意外死亡,警方通過查閱死者的電腦和手機荞膘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門罚随,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人羽资,你說我怎么就攤上這事淘菩。” “怎么了屠升?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵潮改,是天一觀的道長。 經(jīng)常有香客問我腹暖,道長汇在,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任脏答,我火速辦了婚禮糕殉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殖告。我一直安慰自己糙麦,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布丛肮。 她就那樣靜靜地躺著赡磅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宝与。 梳的紋絲不亂的頭發(fā)上焚廊,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天冶匹,我揣著相機與錄音,去河邊找鬼咆瘟。 笑死嚼隘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的袒餐。 我是一名探鬼主播飞蛹,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灸眼!你這毒婦竟也來了卧檐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤焰宣,失蹤者是張志新(化名)和其女友劉穎霉囚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匕积,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡盈罐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闪唆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盅粪。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悄蕾,靈堂內(nèi)的尸體忽然破棺而出票顾,到底是詐尸還是另有隱情,我是刑警寧澤笼吟,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布库物,位于F島的核電站,受9級特大地震影響贷帮,放射性物質(zhì)發(fā)生泄漏戚揭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一撵枢、第九天 我趴在偏房一處隱蔽的房頂上張望民晒。 院中可真熱鬧,春花似錦锄禽、人聲如沸潜必。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磁滚。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間垂攘,已是汗流浹背维雇。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晒他,地道東北人吱型。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像陨仅,于是被迫代替她去往敵國和親津滞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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

  • 一: 網(wǎng)絡(luò)各個協(xié)議:TCP/IP灼伤、SOCKET触徐、HTTP 網(wǎng)絡(luò)七層由下往上分別為物理層、數(shù)據(jù)鏈路層饺蔑、網(wǎng)絡(luò)層锌介、傳輸層...
    iYeso閱讀 1,436評論 0 13
  • 一嗜诀、網(wǎng)絡(luò)各個協(xié)議:TCP/IP猾警、SOCKET、HTTP等 網(wǎng)絡(luò)七層由下往上分別為物理層隆敢、數(shù)據(jù)鏈路層发皿、網(wǎng)絡(luò)層、傳輸層...
    杯水救車薪閱讀 2,266評論 0 17
  • 原諒時光遺失的過程拂蝎,自信的成長穴墅,時間可以治愈所有的壞情緒,它在等我長成自己想要的樣子温自!believe I can ...
    那個向暖閱讀 281評論 0 1
  • 我記得一個熱浪洶涌的午后 路過一家刨冰店 看到人們坐在一座“嘶嘶”冒著冷氣的小雪山前 將紅豆煉奶悼泌、芒果粒松捉、草莓醬連...
    正能量收獲閱讀 294評論 0 0