TCP/UDP協(xié)議, 以及Socket通信

寫于: 2016年05月04日

TCP協(xié)議基本介紹

TCP協(xié)議是自IP協(xié)議出來后有一常用的信息傳輸協(xié)議. 是一個基于連接的萝快、安全的帅涂、雙向的傳輸協(xié)議.

現(xiàn)在, TCP協(xié)議一般都和IP協(xié)議共同使用, 我們稱之為TCP/IP.

TCP說白了就是互聯(lián)網(wǎng)擴張的時候, 數(shù)據(jù)從一段經(jīng)過無數(shù)個路由器和交換機到達(dá)指定的另一端的解決方案, 該方案包括最小路徑教翩、最快時間阱洪、下一站路由器的選擇等.

在計算機中的TCP協(xié)議

我們的計算機或者手機, 在連入網(wǎng)絡(luò)之后, 就可以和別的設(shè)備做信息交互.

TCP協(xié)議要做到的 就是保證你的信息能夠準(zhǔn)確扰藕、安全槽奕、快速地發(fā)送到你要發(fā)送的另一臺設(shè)備上.

識別一臺設(shè)備的唯一方式就是用IP地址.

每一臺計算機或者手機, 連入網(wǎng)絡(luò)之后都會有一個獨立的IP地址, 這個IP地址用于標(biāo)識這臺設(shè)備, 并且IP地址不會與別的設(shè)備共用.

TCP的傳輸原理

定義兩臺計算機 S、C.

計算機S: Service, 服務(wù)器

計算機C: Client, 客戶端

TCP協(xié)議規(guī)定, 兩臺設(shè)備傳輸協(xié)議簽必須要進(jìn)行連接 (基于連接的傳輸協(xié)議), 同時服務(wù)器不能主動向客戶端提出連接, 只有客戶端才能主動向服務(wù)器發(fā)送連接請求.

TCP協(xié)議規(guī)定, 實現(xiàn)TCP協(xié)議的客戶端必須要有一個端口號. 端口號是一個1~65535的整數(shù). 該整數(shù)用于區(qū)分應(yīng)用程序 (比如比的電腦上的QQ支持TCP協(xié)議, 瀏覽器支持TCP協(xié)議, 端口的定義就是為了保證QQ服務(wù)器發(fā)過來的數(shù)據(jù)能夠被QQ進(jìn)程所接受, 而不是給你的瀏覽器進(jìn)程. 理論上, 只需要兩個端口號不一樣即可).

C 主動向 S 發(fā)出連接請求, 連接成功后, S會發(fā)送給C一個連接成功的標(biāo)識數(shù)據(jù), C收到這個數(shù)據(jù)表示連接成功, 之后兩臺設(shè)備就可以進(jìn)行信息交互.

這兩臺設(shè)備連接成功之后, 均可以主動向另一端發(fā)送消息.

這里定義你的電腦IP是111.111.111.111 QQ進(jìn)程的端口號就是8888.

QQ服務(wù)器的IP是222.222.222.222 QQ服務(wù)器的端口號是9999.

你的 QQ 1234 要給一個QQ 4321發(fā)送一條消息叫"您好".
QQ進(jìn)程會進(jìn)行數(shù)據(jù)打包, 加入是JASON數(shù)據(jù):

{
       sourceId : "1234"
       targetId : "4321"
       content : "您好"
}

然后 QQ進(jìn)程便會提交TCP請求, 也就是"吧這個JSON數(shù)據(jù)發(fā)送到222.222.222.222的9999端口號上" .

操作系統(tǒng)便會吧JSON數(shù)據(jù)和IP數(shù)據(jù)以及端口號打包成一個特定的格式(TCP報文). 然后轉(zhuǎn)為二進(jìn)制數(shù)據(jù), 最后變?yōu)檎业哪M信號, 從你的計算機網(wǎng)卡發(fā)出, 到路由器, 再到因特網(wǎng).

QQ服務(wù)器收到數(shù)據(jù)后, 會隱藏式地發(fā)送一個接收確認(rèn)幀 (這個確認(rèn)幀是TCP規(guī)定的, 不是騰訊微了安全起見而特意寫的), 你的計算機收到這個確認(rèn)幀, 代表本次消息發(fā)送成功. 如果你的計算機長時間沒有收到確認(rèn)幀, 代表本次信息傳輸失敗(所以你可以知道這個消息是否安全的發(fā)送到你想要的位置) .

UDP協(xié)議基本介紹

UDP協(xié)議和TCP協(xié)議是在同一層次上的, 但是UDP協(xié)議是基于廣播的協(xié)議.

廣播和連接的區(qū)別

TCP就好比打電話,A有事情告訴B,但是B并不知道A有事情要告訴 他,所以B不會打電話給A败晴。而A要主動打電話給B,只有打電話成功, 并且B拿起電話后,AB才能語言交流,并且AB可以立馬知道對方是否 聽清自己說了什么

UDP就好比廣播,在一個廣場上,有一大堆人,你想要把一個消息通 過一個喇叭告訴一個叫“小新”的人浓冒。但是你不知道“小新”到底在廣場的 什么位置,甚至他到底有沒有在這個廣場上你都不確定。你拿起一個 麥克風(fēng),說“小新,你媽喊你回家吃飯”尖坤。你從外面的廣播聽到了這條 消息,所以你覺得你的消息發(fā)送成功了∥壤粒現(xiàn)在結(jié)果有三種:第一種, 廣場上壓根就沒有叫“小新”的人,所以沒人在乎你說什么;第二種, 你想找的那個“紀(jì)小新”真的在廣場上,他聽到你的消息后乖乖回家吃 飯了;第三種,廣場上不但有“紀(jì)小新”,還有“張小新”,結(jié)果兩個人都 各自回家吃飯了。后兩種情況可能會出問題,比如“紀(jì)小新”聽到消息 后,并不知道誰告訴他的,也不知道這個消息的真實性,所以他會很 糾結(jié)慢味。

從上面可以總結(jié)UDP是一個基于非連接的场梆、不安全的、單項的傳輸協(xié)議.

在計算機中的UDP協(xié)議

內(nèi)容和TCP差不多, 但去唄在于UDP的"發(fā)送成功"是指消息成功從你的電腦上發(fā)出, 而不是接受者真的接收到了你的消息

UDP傳輸原理

UDP傳輸不需要連接, 發(fā)送端只需要把自己的消息打包好(UDP報文), 然后從電腦上發(fā)到因特網(wǎng)即可, 不會有任何的確認(rèn)幀來反饋給你.

為什么存在UDP協(xié)議

UDP協(xié)議如此不安全, 為什么會存在??

其實很簡單, TCP的安全是有資源代價的, 一個TCP報文要安全傳輸, 必須要有資源對其進(jìn)行監(jiān)視才可以. 就像你雙十一買的東西, 你每天都要刷一刷物流信息一樣.

UDP不安全, 但占用的資源較少, 所以一般不需要有安全傳輸要求的信息可以使用UDP傳輸.

Socket

Socket是一個類, 每個編程語言都有自己的Socket. Socket就是單純的協(xié)議實現(xiàn).

TCP和UDP只是一個協(xié)議纯路、一個規(guī)定. 而Socket就是一個遵守這個協(xié)議, 遵守這個規(guī)定的執(zhí)行者.

每一個終端都可以通過Socket實現(xiàn)TCP和UDP的信息交互.

比如
iOS端實現(xiàn)TCP協(xié)議的類叫做NSSocket.
Android端實現(xiàn)TCP協(xié)議的類叫做JSocket.

雖然這是連個不同語言的不同類, 但是他們都遵循TCP協(xié)議. 所以他們可以在不同類型的操作系統(tǒng)上實現(xiàn)信息交互, 從而實現(xiàn)iOS和Android的信息交互.

HTTP協(xié)議基本介紹

HTTP本質(zhì)上是一種協(xié)議, 全稱是Hypertext Transfer Protocol, 即超文本傳輸協(xié)議.
HTTP協(xié)議是基于TCP協(xié)議拓展出來的協(xié)議, 與HTTP協(xié)議一樣的還有SMTP協(xié)議或油、POP3協(xié)議、FTP協(xié)議等.

實現(xiàn)原理

現(xiàn)在客戶端要發(fā)送 http://wwww.baidu.com/httptext?school=taili&name=nunu&class=ios

客戶端要做的事情

1.到全球域名解析獲取www.baidu.com的真實IP地址 (加入得到123.123.123.123)
2.創(chuàng)建一個Socket連接123.123.123.123的8080端口
3.連接成功繼續(xù), 連接失敗停止.
4.發(fā)送一個TCP報文, 內(nèi)容是"HTTP/1.0/httptext...{school.taili.name=nunu,class:ios}"
5.等待服務(wù)器回傳 (此時服務(wù)器快速把數(shù)據(jù)發(fā)給你).
6.斷開連接.

==HTTP驰唬、Socket顶岸、TCP的區(qū)別, 煩請關(guān)注另一篇 ==

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叫编,隨后出現(xiàn)的幾起案子辖佣,更是在濱河造成了極大的恐慌,老刑警劉巖搓逾,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凌简,死亡現(xiàn)場離奇詭異,居然都是意外死亡恃逻,警方通過查閱死者的電腦和手機雏搂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寇损,“玉大人凸郑,你說我怎么就攤上這事∶校” “怎么了芙沥?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我而昨,道長救氯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任歌憨,我火速辦了婚禮着憨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘务嫡。我一直安慰自己甲抖,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布心铃。 她就那樣靜靜地躺著准谚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪去扣。 梳的紋絲不亂的頭發(fā)上柱衔,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機與錄音愉棱,去河邊找鬼唆铐。 笑死,一個胖子當(dāng)著我的面吹牛羽氮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惫恼,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼档押,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了祈纯?” 一聲冷哼從身側(cè)響起令宿,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腕窥,沒想到半個月后粒没,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡簇爆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年癞松,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片入蛆。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡响蓉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哨毁,到底是詐尸還是另有隱情枫甲,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站想幻,受9級特大地震影響粱栖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脏毯,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一闹究、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抄沮,春花似錦跋核、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至率挣,卻和暖如春刻伊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背椒功。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工捶箱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人动漾。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓丁屎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旱眯。 傳聞我的和親對象是個殘疾皇子晨川,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

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