網(wǎng)絡(luò)協(xié)議TCP/IP敢靡、UDP挂滓、Http、Socket啸胧、XMPP區(qū)別

簡而言之:

UDP:
  UDP是一種面向無連接的用戶數(shù)據(jù)報服務(wù)(user data protocol)赶站,不需要和服務(wù)器也能交互,只需要知道ip和監(jiān)聽端口纺念,不需要鏈接沒有目的的socket贝椿,只是將數(shù)據(jù)報投遞出去,不管接收方是否成功接收到陷谱,因此是一種不可靠的傳輸烙博,可能會造成數(shù)據(jù)丟包,但由于這些特征烟逊,傳輸效率要優(yōu)于TCP渣窜。例如QQ傳輸
TCP:
  TCP是一種面向連接的傳輸控制協(xié)議(transform contorl protocol),必須要和服務(wù)器交互,具有高安全性宪躯,可靠性乔宿,需要和服務(wù)器進行三次握手,能根據(jù)具體網(wǎng)絡(luò)擁堵情況進行延時访雪。例如MSN傳輸
  TCP/IP實際上是一組協(xié)議详瑞,它包括上百個各種功能的協(xié)議,如:遠程登錄臣缀、文件傳輸和電子郵件等坝橡,而TCP協(xié)議和IP協(xié)議是保證數(shù)據(jù)完整傳輸?shù)膬蓚€基本的重要協(xié)議。通常說TCP/IP是Internet協(xié)議族精置,而不單單是TCP和IP计寇。
Socket:
  socket就像是TCP與UDP的外接API。有兩種連接操作方式脂倦,面向連接的(TCP)和面向無連接的(UDP)饲常。使用UDP無需要指定一個socket目的地,而是用TCP必須要指定一個socket目的地狼讨,需要進行預(yù)鏈接贝淤,否則連接不到。

優(yōu)點:

1.傳輸數(shù)據(jù)為字節(jié)級政供,傳輸數(shù)據(jù)可自定義播聪,數(shù)據(jù)量小朽基。相應(yīng)的移動端開發(fā),手機費用低
2.傳輸數(shù)據(jù)時間短离陶,性能高
3.適合C/S之間信息實時交互
4.可以加密稼虎,數(shù)據(jù)安全性高

缺點:

1.需要對傳輸?shù)臄?shù)據(jù)進行解析,轉(zhuǎn)化為應(yīng)用級的數(shù)據(jù)
2.對開發(fā)人員的開發(fā)水平要求高
3.相對于Http協(xié)議傳輸招刨,增加了開發(fā)量

適用場景:

網(wǎng)絡(luò)游戲霎俩,銀行交互,支付沉眶。

HTTP:HTTP協(xié)議即超文本傳送協(xié)議(Hypertext Transfer Protocol )打却,是Web聯(lián)網(wǎng)的基礎(chǔ),也是手機聯(lián)網(wǎng)常用的協(xié)議之一谎倔,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用柳击、所以支持HTTP就一定支持TCP傳輸。常見的請求方式有g(shù)et和post片习,web服務(wù)捌肴。
  HTTP連接最顯著的特點是客戶端發(fā)送的每次請求都需要服務(wù)器回送響應(yīng),在請求結(jié)束后藕咏,會主動釋放連接状知。從建立連接到關(guān)閉連接的過程稱為“一次連接”。

優(yōu)點:

 1.基于應(yīng)用級的接口使用方便
 2.要求的開發(fā)水平不高孽查,容錯性強

缺點:

 1.傳輸速度慢试幽,數(shù)據(jù)包大。
 2.如實現(xiàn)實時交互卦碾,服務(wù)器性能壓力大
 3.數(shù)據(jù)傳輸安全性差

適用場景:

公司OA服務(wù),互聯(lián)網(wǎng)服務(wù)

具體點來講:(以下大部分基于百度百科)

網(wǎng)絡(luò)起宽、由下往上分為
  物理層洲胖、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層坯沪、傳輸層绿映、會話層、表示層和應(yīng)用層腐晾。
  通過初步的了解叉弦,知道IP協(xié)議對應(yīng)于網(wǎng)絡(luò)層,TCP協(xié)議對應(yīng)于傳輸層藻糖,而 HTTP協(xié)議對應(yīng)于應(yīng)用層淹冰,

三者從本質(zhì)上來說沒有可比性
  socket則是對TCP/UDP協(xié)議的封裝和應(yīng)用(程序員層面上)。

也可以說巨柒,TPC/UDP協(xié)議是傳輸層協(xié)議樱拴,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸柠衍,
  而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)晶乔。

關(guān)于TCP/IP和HTTP協(xié)議的關(guān)系珍坊,網(wǎng)絡(luò)有一段比較容易理解的介紹:
“我們在傳輸數(shù)據(jù)時,可以只使用(傳輸層)TCP/IP協(xié)議正罢,但是那樣的話阵漏,如果沒有應(yīng)用層,便無法識別數(shù)據(jù)內(nèi)容翻具。

如果想要使傳輸?shù)臄?shù)據(jù)有意義履怯,則必須使用到應(yīng)用層協(xié)議。
  應(yīng)用層協(xié)議有很多呛占,比如HTTP虑乖、FTP、TELNET等晾虑,也可以自己定義應(yīng)用層協(xié)議疹味。

CSDN上有個比較形象的描述:
HTTP是轎車,提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動機帜篇,提供了網(wǎng)絡(luò)通信的能力糙捺。

實際上,傳輸層的TCP是基于網(wǎng)絡(luò)層的IP協(xié)議的笙隙,而應(yīng)用層的HTTP協(xié)議又是基于傳輸層的TCP協(xié)議的洪灯,而Socket本身不算是協(xié)議,就像上面所說竟痰,它只是提供了一個針對TCP或者UDP編程的接口签钩。
  WEB使用HTTP協(xié)議作應(yīng)用層協(xié)議,以封裝HTTP文本信息坏快,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡(luò)上铅檩。”

實際上莽鸿,Socket跟TCP/IP協(xié)議沒有必然的聯(lián)系昧旨。
Socket編程接口在設(shè)計的時候,就希望也能適應(yīng)其他的網(wǎng)絡(luò)協(xié)議祥得。
所以說兔沃,Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已,是對TCP/IP協(xié)議的抽象级及,
從而形成了我們知道的一些最基本的函數(shù)接口乒疏,比如create、listen饮焦、connect缰雇、accept入偷、send、read和write等等械哟。
網(wǎng)絡(luò)有一段關(guān)于socket和TCP/IP協(xié)議關(guān)系的說法比較容易理解:
“TCP/IP與UDP只是一個協(xié)議棧疏之,就像操作系統(tǒng)的運行機制一樣,必須要具體實現(xiàn)暇咆,同時還要提供對外的操作接口锋爪。
這個就像操作系統(tǒng)會提供標(biāo)準(zhǔn)的編程接口,比如win32編程接口一樣爸业,
TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開發(fā)所用的接口其骄,這就是Socket編程接口〕犊酰”

關(guān)于TCP/IP協(xié)議的相關(guān)只是拯爽,用博大精深來講我想也不為過,單單查一下網(wǎng)上關(guān)于此類只是的資料和書籍文獻的數(shù)量就知道钧忽,
  這個我打算會買一些經(jīng)典的書籍(比如《TCP/IP詳解:卷一毯炮、卷二、卷三》)進行學(xué)習(xí)耸黑,今天就先總結(jié)一些基于基于TCP/IP協(xié)議的應(yīng)用和編程接口的知識桃煎,也就是剛才說了很多的HTTP和Socket。

下面是一些經(jīng)常在筆試或者面試中碰到的重要的概念大刊,特在此做摘抄和總結(jié)为迈。

一、什么是TCP連接的三次握手
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器缺菌,并進入SYN_SEND狀態(tài)葫辐,等待服務(wù)器確認;
第二次握手:服務(wù)器收到syn包,必須確認客戶的SYN(ack=j+1)伴郁,同時自己也發(fā)送一個SYN包(syn=k)耿战,即SYN+ACK包,此時服務(wù)器進入SYN_RECV狀態(tài);
第三次握手:客戶端收到服務(wù)器的SYN+ACK包蛾绎,向服務(wù)器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢鸦列,客戶端和服務(wù)器進入ESTABLISHED狀態(tài)租冠,完成三次握手。

握手過程中傳送的包里不包含數(shù)據(jù)薯嗤,三次握手完畢后顽爹,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)。
  理想狀態(tài)下骆姐,TCP連接一旦建立镜粤,在通信雙方中的任何一方主動關(guān)閉連接之前捏题,TCP 連接都將被一直保持下去。
  斷開連接時服務(wù)器和客戶端均可以主動發(fā)起斷開TCP連接的請求肉渴,斷開過程需要經(jīng)過“四次握手”(過程就不細寫了公荧,就是服務(wù)器和客戶端交互,最終確定斷開)

二同规、TCP和UDP的區(qū)別
1循狰、TCP是面向鏈接的,雖然說網(wǎng)絡(luò)的不安全不穩(wěn)定特性決定了多少次握手都不能保證連接的可靠性券勺,但TCP的三次握手在最低限度上(實際上也很大程度上保證了)保證了連接的可靠性;
   而UDP不是面向連接的绪钥,UDP傳送數(shù)據(jù)前并不與對方建立連接,對接收到的數(shù)據(jù)也不發(fā)送確認信號关炼,發(fā)送端不知道數(shù)據(jù)是否會正確接收程腹,當(dāng)然也不用重發(fā),所以說UDP是無連接的儒拂、不可靠的一種數(shù)據(jù)傳輸協(xié)議寸潦。
2、也正由于1所說的特點侣灶,使得UDP的開銷更小數(shù)據(jù)傳輸速率更高甸祭,因為不必進行收發(fā)數(shù)據(jù)的確認,所以UDP的實時性更好褥影。

知道了TCP和UDP的區(qū)別池户,就不難理解為何采用TCP傳輸協(xié)議的MSN比采用UDP的QQ傳輸文件慢了,但并不能說QQ的通信是不安全的凡怎,
  因為程序員可以手動對UDP的數(shù)據(jù)收發(fā)進行驗證校焦,比如發(fā)送方對每個數(shù)據(jù)包進行編號然后由接收方進行驗證啊什么的,
  即使是這樣统倒,UDP因為在底層協(xié)議的封裝上沒有采用類似TCP的“三次握手”而實現(xiàn)了TCP所無法達到的傳輸效率寨典。

三、利用Socket建立網(wǎng)絡(luò)連接的步驟
1房匆、服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字耸成,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)浴鸿,等待客戶端的連接請求井氢。
2、客戶端請求:指客戶端的套接字提出連接請求岳链,要連接的目標(biāo)是服務(wù)器端的套接字花竞。
   為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字掸哑,指出服務(wù)器端套接字的地址和端口號约急,然后就向服務(wù)器端套接字提出連接請求零远。
3、連接確認:當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求時厌蔽,就響應(yīng)客戶端套接字的請求牵辣,建立一個新的線程,把服務(wù)器端
   套接字的描述發(fā)給客戶端躺枕,一旦客戶端確認了此描述服猪,雙方就正式建立連接。

而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài)拐云,繼續(xù)接收其他客戶端套接字的連接請求罢猪。
  建立Socket連接至少需要一對套接字,其中一個運行于客戶端叉瘩,稱為ClientSocket 膳帕,另一個運行于服務(wù)器端,稱為ServerSocket 薇缅。
  套接字之間的連接過程分為三個步驟:服務(wù)器監(jiān)聽危彩,客戶端請求,連接確認泳桦。
  關(guān)于socket汤徽,筆者并沒有太深入復(fù)雜的使用經(jīng)歷。由于原生socket語法并不是非常友好灸撰,所以使用了ASyncSocket三方庫谒府,它內(nèi)部封裝了TCP/UDP兩種模式文件,使用時根據(jù)需要選擇導(dǎo)入方式即可浮毯。本質(zhì)上來講完疫,是基于建立一個單例Socket管理器,進行連接债蓝,傳輸壳鹤,斷開等一系列操作,非常方便饰迹。
  至于XMPP芳誓,XMPP是應(yīng)用層協(xié)議,底層依舊是建立在Socket通信之上啊鸭。
  對于ASyncSocket/XMPP的使用方法锹淌。簡言之都是通過單例管理器控制連接狀態(tài)以及傳輸動作,將來有時間再寫吧莉掂。

四葛圃、HTTP鏈接的特點

HTTP協(xié)議即超文本傳送協(xié)議(Hypertext Transfer Protocol )千扔,是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)閉連接的過程稱為“一次連接”抚垃。
  簡單的說喷楣,TCP就是單純建立連接,不涉及任何我們需要請求的實際數(shù)據(jù)鹤树,簡單的傳輸铣焊。
  http是用來收發(fā)數(shù)據(jù),即實際應(yīng)用上來的罕伯。
  第一:從傳輸層曲伊,先說下TCP連接,我們要和服務(wù)端連接TCP連接追他,需要通過三次連接坟募,包括:請求,確認邑狸,建立連接懈糯。即傳說中的“三次握手協(xié)議”。
簡單就是:請求单雾,確認赚哗,連接。
  第二:從實際上的數(shù)據(jù)應(yīng)用來說http:
  在前面客戶端和應(yīng)用服務(wù)器建立TCP連接之后铁坎,就需要用http協(xié)議來傳送數(shù)據(jù)了蜂奸,HTTP協(xié)議簡單來說,還是請求硬萍,確認扩所,連接。
總體就是C發(fā)送一個HTTP請求給S朴乖,S收到了這個http請求祖屏,然后返回給Chttp響應(yīng),然后C的中間件或者說瀏覽器把這些數(shù)據(jù)渲染成為了網(wǎng)頁买羞,展示在用戶面前袁勺。

http請求步驟:
第一步:發(fā)送一個http請求給S,這個請求包括請求頭和請求內(nèi)容:

request header(請求頭)包括:
1.請求的方法是POST/GET,請求的URL畜普,http協(xié)議版本
2.請求的數(shù)據(jù)期丰,和編碼方式3是否有cookie和cooies,是否緩存等。

post和get請求方式的區(qū)別:
get把請求內(nèi)容放在URL后面钝荡,但是URL長度有限制街立。而post是以表單的形勢,適合要輸入密碼之類的埠通,因為不在URL中顯示赎离,所以比較安全。

request body(請求體):即請求的內(nèi)容.

第二步:S收到了http請求端辱,然后根據(jù)請求頭梁剔,返回http響應(yīng)。

response header:包括了1.cookies或者sessions2.狀態(tài)碼3.內(nèi)容大小等
response body:即響應(yīng)的內(nèi)容舞蔽,包括荣病,JS什么的。

第三步:C收到了以后渗柿,就由瀏覽器完成一系列的渲染众雷,包括執(zhí)行JS腳本等。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末做祝,一起剝皮案震驚了整個濱河市砾省,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌混槐,老刑警劉巖编兄,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異声登,居然都是意外死亡狠鸳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門悯嗓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來件舵,“玉大人,你說我怎么就攤上這事脯厨∏觯” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵合武,是天一觀的道長临梗。 經(jīng)常有香客問我,道長稼跳,這世上最難降的妖魔是什么盟庞? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮汤善,結(jié)果婚禮上什猖,老公的妹妹穿的比我還像新娘票彪。我一直安慰自己,他們只是感情好不狮,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布抹镊。 她就那樣靜靜地躺著,像睡著了一般荤傲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颈渊,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天遂黍,我揣著相機與錄音,去河邊找鬼俊嗽。 笑死雾家,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绍豁。 我是一名探鬼主播芯咧,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竹揍!你這毒婦竟也來了敬飒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤芬位,失蹤者是張志新(化名)和其女友劉穎无拗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昧碉,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡英染,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了被饿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片四康。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狭握,靈堂內(nèi)的尸體忽然破棺而出闪金,到底是詐尸還是另有隱情,我是刑警寧澤论颅,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布毕泌,位于F島的核電站,受9級特大地震影響嗅辣,放射性物質(zhì)發(fā)生泄漏撼泛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一澡谭、第九天 我趴在偏房一處隱蔽的房頂上張望愿题。 院中可真熱鬧损俭,春花似錦、人聲如沸潘酗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仔夺。三九已至琐脏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缸兔,已是汗流浹背日裙。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惰蜜,地道東北人昂拂。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像抛猖,于是被迫代替她去往敵國和親格侯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • 1.1 TCP/IP協(xié)議組 TCP/IP協(xié)議(傳輸控制協(xié)議)由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成 IP層負責(zé)...
    F麥子閱讀 2,781評論 0 25
  • 參考:http://www.2cto.com/net/201611/569006.html TCP HTTP UD...
    F麥子閱讀 2,940評論 0 14
  • 轉(zhuǎn)自 TCP/IP葛闷,Http,Socket双藕,XMPP的區(qū)別網(wǎng)絡(luò)由下往上分為 物理層淑趾、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層忧陪、傳輸層扣泊、會...
    ZMJun閱讀 1,347評論 1 10
  • 我的兒子景柯豪近范,一個性格比較內(nèi)向,做事比較慢但又很認真的一個小男生延蟹。 2007年8月5日晚上十一點迎來我家庭的新成...
    景柯豪閱讀 300評論 0 0
  • 與這個國家的第一次眼神接觸评矩,便是滿滿的微笑,可能是因為早就被它的神秘打動阱飘,所以覺得這里的笑容都洋溢著海洋與陽光的味...
    101ddbb28c89閱讀 149評論 0 2