前言
在我們開始學(xué)習(xí)網(wǎng)絡(luò)編程的時(shí)候,我們發(fā)現(xiàn)一些名詞出現(xiàn)的頻率極其高,比如 TCP/IP、UDP、OSI 七層網(wǎng)絡(luò)模型等。這肯定不是偶然,因?yàn)樗鼈儤O其重要,才會(huì)被人反復(fù)提及。尤其在面試的時(shí)候,面試官喜歡把它們拿來(lái),當(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é)議) 之前,我們先要知道一個(gè)名詞,即協(xié)議。它到底是什么?它其實(shí)就是一套約定成俗的規(guī)則。就像開會(huì)的時(shí)候,我們達(dá)成了一些共識(shí),先開發(fā)那個(gè)接口,項(xiàng)目什么時(shí)候上線等等。
可以毫不夸張地說(shuō)計(jì)算機(jī)網(wǎng)絡(luò)的構(gòu)建與發(fā)展,奠基石就是各種網(wǎng)絡(luò)協(xié)議。它們定義了信息通訊的方式,以及如何收發(fā)信息等,比如:
- IP 協(xié)議負(fù)責(zé)將多個(gè)包交換網(wǎng)絡(luò)連接起來(lái),并管理通訊 IP 源地址和目標(biāo)地址的協(xié)議
- TCP 和 UDP 協(xié)議則是位于應(yīng)用層和 IP 層之間,負(fù)責(zé)它們之間信息傳輸?shù)闹匾獏f(xié)議
既然是協(xié)議,大家都必須遵守,否則,今天張三定一個(gè)協(xié)議,李四不同意,他明天再定一個(gè)協(xié)議,這就亂了套。因此,不同的大廠和許多公司就聯(lián)合起來(lái)組成一個(gè)組織,將這些協(xié)議統(tǒng)一規(guī)范起來(lái)。你就必須得用這些規(guī)定好的協(xié)議,否則就無(wú)法通信。這才實(shí)現(xiàn)了“地球村”的夢(mèng)想。今天無(wú)論用什么設(shè)備,在世界的任何角落,用哪種國(guó)家的語(yǔ)言,都可以很方便地使用網(wǎng)絡(luò)進(jìn)行通信
TCP 和 UDP 的特點(diǎn)
用一個(gè)不算嚴(yán)謹(jǐn)?shù)恼f(shuō)法總結(jié) TCP 就是,女孩子如果遇到 TCP 這樣的男生,就嫁了吧。因?yàn)門CP的核心特點(diǎn)就是靠譜。他的特定包括,面向連接、可靠、基于字節(jié)流控制的傳輸,就像一個(gè)管道一樣將應(yīng)用層和 IP 層連接起來(lái)
而與之相對(duì)應(yīng)的,UDP 就像二十多歲的浪子。他們不夠可靠,但卻充滿熱情。一切以效率為先,他們可以馬上答應(yīng)你很多事情,并且愿意立馬付出實(shí)踐。你這一秒說(shuō)佛珠浪漫,他不管身處何處,立馬搭飛機(jī)給你去取,下一秒說(shuō)想去聽周杰倫的演唱會(huì),他立馬給你訂票。當(dāng)然,人的精力和時(shí)間都有限,所以就可能出現(xiàn)不可控的意外,比如根本沒(méi)有足夠的錢買門票等。這和UDP相仿,它提供無(wú)連接通信,但不對(duì)傳送的數(shù)據(jù)包提供可靠性保證
TCP 和 UDP 的使用場(chǎng)景
不同的人,因性格不同,做事的方式也不一樣,你不能說(shuō)這樣就一定好,那樣就一定不好,對(duì)于 TCP 和 UDP 也是一樣,在不同的場(chǎng)景中,他們各有各的妙用
比如在開發(fā)一個(gè)游戲的的程序是,對(duì)于玩家登陸賬號(hào),因?yàn)槲覀円_保不同的玩家能登陸到自己的賬號(hào),這個(gè)時(shí)候就要應(yīng)用 TCP 協(xié)議。而對(duì)于控制游戲中角色的移動(dòng),我們只需根據(jù)玩家鼠標(biāo)的點(diǎn)擊移動(dòng)角色,如果因?yàn)樾「怕实木W(wǎng)絡(luò)問(wèn)題,對(duì)于玩家來(lái)說(shuō),再次進(jìn)行角色移動(dòng)操作即可,成本和風(fēng)險(xiǎn)在可控范圍內(nèi),因此就可以使用 UDP 協(xié)議
我們從以上可以看出,如果是基礎(chǔ)服務(wù)功能,則最好使用 TCP 協(xié)議,保證服務(wù)的可靠性。以確保過(guò)程中,每一個(gè)網(wǎng)絡(luò)包能夠正確抵達(dá)目的地。而相較于 UDP ,程序員則需要自己去進(jìn)一步做丟包情況和字節(jié)傳輸順序的處理
可不要因此就覺(jué)得 UDP 非常難用,正相反,其實(shí)有大量的服務(wù)是基于 UDP 協(xié)議的。比如 DNS 解析服務(wù)。每一臺(tái)電腦訪問(wèn)外網(wǎng)網(wǎng)頁(yè),都需要通過(guò) DNS 服務(wù)解析域名,從中找到對(duì)應(yīng)的 IP 地址。這個(gè)時(shí)候如果 DNS 出了問(wèn)題,我們其實(shí)只需要再一次進(jìn)行 DNS 尋址查詢即可。唯一的副作用,可能就是有一丁點(diǎn)兒延遲罷了
另一個(gè) UDP 的應(yīng)用就是 IP 電話, 我們常把它稱作 VoIP(Voice over IP),它的原理可以簡(jiǎn)化的理解為,把撥打電話從以往的電話通訊,轉(zhuǎn)移到網(wǎng)絡(luò)通訊上,類似于我們現(xiàn)在的微信通話。當(dāng)你和某人通話的時(shí)候,用的就是 UDP ,想象一下,其實(shí)我們這個(gè)時(shí)候需要的并不是可靠性,而是實(shí)時(shí)性。如果不幸中間有一點(diǎn)信息損失了,比如你媽說(shuō):“過(guò)年給我把對(duì)象帶回來(lái),不然就別回來(lái)了”。由于信息損失一部分,像這樣——“過(guò)年給 把對(duì)象帶 來(lái),不然 別回 了”,其實(shí)我們是可以理解一整句話的意思的。而如果用 TCP,我們可能說(shuō)一句話,別人 30 秒之后才能聽到,這顯然是不能忍受的
因此,我們明白了,在日常的開發(fā)過(guò)程中,我們應(yīng)該根據(jù)不同的應(yīng)用場(chǎng)景,選擇對(duì)應(yīng)的 TCP 或者 UDP 作為網(wǎng)絡(luò)傳輸協(xié)議,而不能因?yàn)槲覀儗?duì) UDP 不熟悉,就從心理上抗拒它
端口及其特點(diǎn)
如果 IP 是用來(lái)定位街區(qū)的,那么端口就是對(duì)應(yīng)于該街區(qū)中每一戶的門牌號(hào)。在通訊過(guò)程中,數(shù)據(jù)通過(guò)各種通訊協(xié)議最終抵達(dá)設(shè)備(如計(jì)算機(jī))后,這里的設(shè)備就相當(dāng)于一個(gè)街區(qū),而在設(shè)備計(jì)算機(jī)內(nèi)部有很多程序在跑,數(shù)據(jù)進(jìn)來(lái)之后,必須要給它一個(gè)對(duì)應(yīng)的門牌號(hào)(即端口號(hào)),程序才方便進(jìn)行后續(xù)操作
端口號(hào)屬于傳輸協(xié)議的一部分,因此我們可以說(shuō),數(shù)據(jù)通過(guò) IP 地址發(fā)送對(duì)應(yīng)的數(shù)據(jù)到指定設(shè)備上,而通過(guò)端口號(hào)把數(shù)據(jù)發(fā)送到指定的服務(wù)或程序上
程序一般不止是監(jiān)聽指定的端口號(hào),而且也會(huì)明確對(duì)應(yīng)的傳輸協(xié)議。所以我們?cè)谶M(jìn)行數(shù)據(jù)傳輸?shù)臅r(shí)候,既要指定對(duì)應(yīng)的端口號(hào),也要指定對(duì)應(yīng)的通訊協(xié)議,很多人僅僅會(huì)說(shuō):程序 A 監(jiān)聽著 33001 端口,這個(gè)是不正確的,至少是不完全正確的。相應(yīng)的,我們應(yīng)該這樣說(shuō):程序 A 使用 TCP 協(xié)議,監(jiān)聽 33001 端口,當(dāng)然你也可以說(shuō):程序 A 使用 UDP 協(xié)議,監(jiān)聽 33001 端口
指定傳輸協(xié)議和端口,顯而易見(jiàn)的好處在于,當(dāng)我們進(jìn)行端口轉(zhuǎn)發(fā)或者構(gòu)建網(wǎng)絡(luò)防火墻的時(shí)候,我們可以很方便的通過(guò)協(xié)議和端口進(jìn)行隔離。以防止不可預(yù)見(jiàn)的意外發(fā)生。對(duì)于計(jì)算機(jī)來(lái)說(shuō),通過(guò)這種方式可以防止外網(wǎng)各種不必要的數(shù)據(jù),進(jìn)入本地局域網(wǎng)
你可能會(huì)想,這么多端口號(hào),如果大家都用同一個(gè),那不是也有沖突。沒(méi)錯(cuò),這就需要一個(gè)專門的組織來(lái)管理它們,IANA( Internet Assigned Numbers Authority 即互聯(lián)網(wǎng)號(hào)碼分配局 ),它負(fù)責(zé)管理端口注冊(cè)。大多數(shù)主流的程序,都有一個(gè)明確的已注冊(cè)端口,比如常見(jiàn)的 FTP 監(jiān)聽 20、 21 端口,而 HTTP 服務(wù)監(jiān)聽 80 端口等。如果有一個(gè)程序想注冊(cè)某個(gè)端口,那么 IANA 會(huì)先去查一查這個(gè)端口是否已被注冊(cè),如果已經(jīng)被注冊(cè)了,它則會(huì)拒絕申請(qǐng)
端口號(hào)根據(jù)范圍分為三種
- Well-Known Ports(即公認(rèn)端口號(hào))
它是一些眾人皆知著名的端口號(hào),這些端口號(hào)固定分配給一些服務(wù),我們上面提到的 HTTP 服務(wù)、 FTP服務(wù)等都屬于這一類。知名端口號(hào)的范圍是:0-1023
- Registered Ports(即注冊(cè)端口)
它是不可以動(dòng)態(tài)調(diào)整的端口段,這些端口沒(méi)有明確定義服務(wù)哪些特定的對(duì)象。不同的程序可以根據(jù)自己的需要自己定義,注冊(cè)端口號(hào)的范圍是:1024-49151
- Dynamic, private or ephemeral ports(即動(dòng)態(tài)、私有或臨時(shí)端口號(hào))
顧名思義,這些端口號(hào)是不可以注冊(cè)的,這一段的端口被用作一些私人的或者定制化的服務(wù),當(dāng)然也可以用來(lái)做動(dòng)態(tài)端口服務(wù),這一段的范圍是:49152–65535
參考資料:
-
IP
+關(guān)注
關(guān)注
5文章
1718瀏覽量
149961 -
TCP
+關(guān)注
關(guān)注
8文章
1378瀏覽量
79301 -
UDP
+關(guān)注
關(guān)注
0文章
327瀏覽量
34043 -
應(yīng)用層
+關(guān)注
關(guān)注
0文章
46瀏覽量
11544
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
TCP和UDP的區(qū)別分析
tcp和udp的應(yīng)用場(chǎng)景
![<b class='flag-5'>tcp</b>和<b class='flag-5'>udp</b>的應(yīng)<b class='flag-5'>用場(chǎng)景</b>](https://file1.elecfans.com//web2/M00/A7/0C/wKgZomUMQgyAL9jfAAAMeOTUA_s948.png)
tcp和udp協(xié)議的異同
![<b class='flag-5'>tcp</b>和<b class='flag-5'>udp</b>協(xié)議的異同](https://file.elecfans.com/web1/M00/CF/1F/o4YBAF-s2ZaAGTVXAAA6Iwl5hA4090.png)
UDP的主要特點(diǎn)及其使用場(chǎng)景
TCP和UDP的原理以及區(qū)別
![<b class='flag-5'>TCP</b>和<b class='flag-5'>UDP</b>的原理以及區(qū)別](https://file1.elecfans.com/web2/M00/83/B4/wKgZomRl7BSAImANAANPiaddgZ4899.jpg)
UDP能否像TCP一樣實(shí)現(xiàn)可靠傳輸?
![<b class='flag-5'>UDP</b>能否像<b class='flag-5'>TCP</b>一樣實(shí)現(xiàn)可靠傳輸?](https://file.elecfans.com/web2/M00/3E/6A/pYYBAGJhBGGAGyDYAACBPQuBZQI711.png)
udp是什么協(xié)議 TCP與UDP的區(qū)別
TCP/UDP簡(jiǎn)介、特點(diǎn)及優(yōu)劣勢(shì)
![<b class='flag-5'>TCP</b>/<b class='flag-5'>UDP</b>簡(jiǎn)介、<b class='flag-5'>特點(diǎn)</b>及優(yōu)劣勢(shì)](https://file1.elecfans.com/web2/M00/A8/43/wKgaomUsneiAPNQ0AAAjRno7RNs818.png)
TCP與UDP的基本區(qū)別
![<b class='flag-5'>TCP</b>與<b class='flag-5'>UDP</b>的基本區(qū)別](https://file1.elecfans.com/web2/M00/AD/F3/wKgaomVRz7mATse4AAI_23YEDEI496.jpg)
UDP的特性與應(yīng)用場(chǎng)景
![<b class='flag-5'>UDP</b>的特性與應(yīng)<b class='flag-5'>用場(chǎng)景</b>](https://file1.elecfans.com/web2/M00/AF/C3/wKgZomVR0YaAUsxdAACfnLTMeIo111.jpg)
評(píng)論