10分鐘理解TCP携冤、UDP 和端口號

前言

在我們開始學(xué)習(xí)網(wǎng)絡(luò)編程的時候,我們發(fā)現(xiàn)一些名詞出現(xiàn)的頻率極其高闲勺,比如 TCP/IP曾棕、UDP、OSI 七層網(wǎng)絡(luò)模型等菜循。這肯定不是偶然翘地,因為它們極其重要,才會被人反復(fù)提及癌幕。尤其在面試的時候衙耕,面試官喜歡把它們拿來,當(dāng)作考察面試者基礎(chǔ)功底的重要環(huán)節(jié)勺远。為了不讓文章顯得冗余橙喘,我們今天只談網(wǎng)絡(luò)中的 TCP、UDP 和端口

協(xié)議胶逢、TCP 和 UDP

在了解 TCP(Transmission Control Protocol 即傳輸控制協(xié)議) 和 UDP(User Datagram Protocol 即用戶數(shù)據(jù)包協(xié)議) 之前厅瞎,我們先要知道一個名詞,即協(xié)議初坠。它到底是什么磁奖?它其實就是一套約定成俗的規(guī)則。就像開會的時候某筐,我們達(dá)成了一些共識,先開發(fā)那個接口冠跷,項目什么時候上線等等南誊。

可以毫不夸張地說計算機(jī)網(wǎng)絡(luò)的構(gòu)建與發(fā)展,奠基石就是各種網(wǎng)絡(luò)協(xié)議蜜托。它們定義了信息通訊的方式抄囚,以及如何收發(fā)信息等,比如:

  • IP 協(xié)議負(fù)責(zé)將多個包交換網(wǎng)絡(luò)連接起來橄务,并管理通訊 IP 源地址和目標(biāo)地址的協(xié)議

  • TCP 和 UDP 協(xié)議則是位于應(yīng)用層和 IP 層之間幔托,負(fù)責(zé)它們之間信息傳輸?shù)闹匾獏f(xié)議

既然是協(xié)議,大家都必須遵守蜂挪,否則重挑,今天張三定一個協(xié)議,李四不同意棠涮,他明天再定一個協(xié)議谬哀,這就亂了套。因此严肪,不同的大廠和許多公司就聯(lián)合起來組成一個組織史煎,將這些協(xié)議統(tǒng)一規(guī)范起來谦屑。你就必須得用這些規(guī)定好的協(xié)議,否則就無法通信篇梭。這才實現(xiàn)了“地球村”的夢想氢橙。今天無論用什么設(shè)備,在世界的任何角落恬偷,用哪種國家的語言悍手,都可以很方便地使用網(wǎng)絡(luò)進(jìn)行通信

TCP 和 UDP 的特點

用一個不算嚴(yán)謹(jǐn)?shù)恼f法總結(jié) TCP 就是,女孩子如果遇到 TCP 這樣的男生喉磁,就嫁了吧谓苟。因為TCP的核心特點就是靠譜。他的特定包括协怒,面向連接涝焙、可靠、基于字節(jié)流控制的傳輸孕暇,就像一個管道一樣將應(yīng)用層和 IP 層連接起來

而與之相對應(yīng)的仑撞,UDP 就像二十多歲的浪子。他們不夠可靠妖滔,但卻充滿熱情隧哮。一切以效率為先,他們可以馬上答應(yīng)你很多事情座舍,并且愿意立馬付出實踐沮翔。你這一秒說佛珠浪漫,他不管身處何處曲秉,立馬搭飛機(jī)給你去取采蚀,下一秒說想去聽周杰倫的演唱會,他立馬給你訂票承二。當(dāng)然榆鼠,人的精力和時間都有限,所以就可能出現(xiàn)不可控的意外亥鸠,比如根本沒有足夠的錢買門票等妆够。這和UDP相仿,它提供無連接通信负蚊,但不對傳送的數(shù)據(jù)包提供可靠性保證

TCP 和 UDP 的特點總結(jié)

pic_1.png

TCP 和 UDP 的使用場景

不同的人神妹,因性格不同,做事的方式也不一樣家妆,你不能說這樣就一定好灾螃,那樣就一定不好,對于 TCP 和 UDP 也是一樣揩徊,在不同的場景中腰鬼,他們各有各的妙用

比如在開發(fā)一個游戲的的程序是嵌赠,對于玩家登陸賬號,因為我們要確保不同的玩家能登陸到自己的賬號熄赡,這個時候就要應(yīng)用 TCP 協(xié)議姜挺。而對于控制游戲中角色的移動,我們只需根據(jù)玩家鼠標(biāo)的點擊移動角色彼硫,如果因為小概率的網(wǎng)絡(luò)問題炊豪,對于玩家來說,再次進(jìn)行角色移動操作即可拧篮,成本和風(fēng)險在可控范圍內(nèi)词渤,因此就可以使用 UDP 協(xié)議

我們從以上可以看出,如果是基礎(chǔ)服務(wù)功能串绩,則最好使用 TCP 協(xié)議缺虐,保證服務(wù)的可靠性。以確保過程中礁凡,每一個網(wǎng)絡(luò)包能夠正確抵達(dá)目的地高氮。而相較于 UDP ,程序員則需要自己去進(jìn)一步做丟包情況和字節(jié)傳輸順序的處理

可不要因此就覺得 UDP 非常難用顷牌,正相反剪芍,其實有大量的服務(wù)是基于 UDP 協(xié)議的。比如 DNS 解析服務(wù)窟蓝。每一臺電腦訪問外網(wǎng)網(wǎng)頁罪裹,都需要通過 DNS 服務(wù)解析域名,從中找到對應(yīng)的 IP 地址运挫。這個時候如果 DNS 出了問題坊谁,我們其實只需要再一次進(jìn)行 DNS 尋址查詢即可。唯一的副作用滑臊,可能就是有一丁點兒延遲罷了

pic_2.png

另一個 UDP 的應(yīng)用就是 IP 電話, 我們常把它稱作 VoIP(Voice over IP)箍铲,它的原理可以簡化的理解為雇卷,把撥打電話從以往的電話通訊,轉(zhuǎn)移到網(wǎng)絡(luò)通訊上颠猴,類似于我們現(xiàn)在的微信通話关划。當(dāng)你和某人通話的時候,用的就是 UDP 翘瓮,想象一下贮折,其實我們這個時候需要的并不是可靠性,而是實時性资盅。如果不幸中間有一點信息損失了调榄,比如你媽說:“過年給我把對象帶回來踊赠,不然就別回來了”。由于信息損失一部分每庆,像這樣——“過年給 把對象帶 來筐带,不然 別回 了”,其實我們是可以理解一整句話的意思的缤灵。而如果用 TCP伦籍,我們可能說一句話,別人 30 秒之后才能聽到腮出,這顯然是不能忍受的

因此帖鸦,我們明白了,在日常的開發(fā)過程中胚嘲,我們應(yīng)該根據(jù)不同的應(yīng)用場景作儿,選擇對應(yīng)的 TCP 或者 UDP 作為網(wǎng)絡(luò)傳輸協(xié)議,而不能因為我們對 UDP 不熟悉慢逾,就從心理上抗拒它

端口及其特點

如果 IP 是用來定位街區(qū)的立倍,那么端口就是對應(yīng)于該街區(qū)中每一戶的門牌號。在通訊過程中侣滩,數(shù)據(jù)通過各種通訊協(xié)議最終抵達(dá)設(shè)備(如計算機(jī))后口注,這里的設(shè)備就相當(dāng)于一個街區(qū),而在設(shè)備計算機(jī)內(nèi)部有很多程序在跑君珠,數(shù)據(jù)進(jìn)來之后寝志,必須要給它一個對應(yīng)的門牌號(即端口號),程序才方便進(jìn)行后續(xù)操作

端口號屬于傳輸協(xié)議的一部分策添,因此我們可以說材部,數(shù)據(jù)通過 IP 地址發(fā)送對應(yīng)的數(shù)據(jù)到指定設(shè)備上,而通過端口號把數(shù)據(jù)發(fā)送到指定的服務(wù)或程序上

pic_3.png

程序一般不止是監(jiān)聽指定的端口號唯竹,而且也會明確對應(yīng)的傳輸協(xié)議乐导。所以我們在進(jìn)行數(shù)據(jù)傳輸?shù)臅r候,既要指定對應(yīng)的端口號浸颓,也要指定對應(yīng)的通訊協(xié)議物臂,很多人僅僅會說:程序 A 監(jiān)聽著 33001 端口,這個是不正確的产上,至少是不完全正確的棵磷。相應(yīng)的,我們應(yīng)該這樣說:程序 A 使用 TCP 協(xié)議晋涣,監(jiān)聽 33001 端口仪媒,當(dāng)然你也可以說:程序 A 使用 UDP 協(xié)議,監(jiān)聽 33001 端口

指定傳輸協(xié)議和端口谢鹊,顯而易見的好處在于算吩,當(dāng)我們進(jìn)行端口轉(zhuǎn)發(fā)或者構(gòu)建網(wǎng)絡(luò)防火墻的時候留凭,我們可以很方便的通過協(xié)議和端口進(jìn)行隔離。以防止不可預(yù)見的意外發(fā)生赌莺。對于計算機(jī)來說冰抢,通過這種方式可以防止外網(wǎng)各種不必要的數(shù)據(jù),進(jìn)入本地局域網(wǎng)

你可能會想艘狭,這么多端口號挎扰,如果大家都用同一個,那不是也有沖突巢音。沒錯遵倦,這就需要一個專門的組織來管理它們,IANA( Internet Assigned Numbers Authority 即互聯(lián)網(wǎng)號碼分配局 )官撼,它負(fù)責(zé)管理端口注冊梧躺。大多數(shù)主流的程序,都有一個明確的已注冊端口傲绣,比如常見的 FTP 監(jiān)聽 20掠哥、 21 端口,而 HTTP 服務(wù)監(jiān)聽 80 端口等秃诵。如果有一個程序想注冊某個端口续搀,那么 IANA 會先去查一查這個端口是否已被注冊,如果已經(jīng)被注冊了菠净,它則會拒絕申請

端口號根據(jù)范圍分為三種

  1. Well-Known Ports(即公認(rèn)端口號)

它是一些眾人皆知著名的端口號禁舷,這些端口號固定分配給一些服務(wù),我們上面提到的 HTTP 服務(wù)毅往、 FTP服務(wù)等都屬于這一類牵咙。知名端口號的范圍是:0-1023

  1. Registered Ports(即注冊端口)

它是不可以動態(tài)調(diào)整的端口段,這些端口沒有明確定義服務(wù)哪些特定的對象攀唯。不同的程序可以根據(jù)自己的需要自己定義洁桌,注冊端口號的范圍是:1024-49151

  1. Dynamic, private or ephemeral ports(即動態(tài)、私有或臨時端口號)

顧名思義侯嘀,這些端口號是不可以注冊的另凌,這一段的端口被用作一些私人的或者定制化的服務(wù),當(dāng)然也可以用來做動態(tài)端口服務(wù)残拐,這一段的范圍是:49152–65535

參考資料:

tail_qrcode.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碟嘴,隨后出現(xiàn)的幾起案子溪食,更是在濱河造成了極大的恐慌,老刑警劉巖娜扇,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件错沃,死亡現(xiàn)場離奇詭異栅组,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)枢析,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門玉掸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人醒叁,你說我怎么就攤上這事司浪。” “怎么了把沼?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵啊易,是天一觀的道長。 經(jīng)常有香客問我饮睬,道長租谈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任捆愁,我火速辦了婚禮割去,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昼丑。我一直安慰自己呻逆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布矾克。 她就那樣靜靜地躺著页慷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胁附。 梳的紋絲不亂的頭發(fā)上酒繁,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機(jī)與錄音控妻,去河邊找鬼州袒。 笑死,一個胖子當(dāng)著我的面吹牛弓候,可吹牛的內(nèi)容都是我干的郎哭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼菇存,長吁一口氣:“原來是場噩夢啊……” “哼夸研!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起依鸥,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤亥至,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姐扮,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡絮供,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了茶敏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壤靶。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惊搏,靈堂內(nèi)的尸體忽然破棺而出贮乳,到底是詐尸還是另有隱情,我是刑警寧澤胀屿,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布塘揣,位于F島的核電站,受9級特大地震影響宿崭,放射性物質(zhì)發(fā)生泄漏亲铡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一葡兑、第九天 我趴在偏房一處隱蔽的房頂上張望奖蔓。 院中可真熱鬧,春花似錦讹堤、人聲如沸吆鹤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疑务。三九已至,卻和暖如春梗醇,著一層夾襖步出監(jiān)牢的瞬間知允,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工叙谨, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留温鸽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓手负,卻偏偏與公主長得像涤垫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子竟终,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355