在編寫伺服器的時候,埠號是任意的嗎?還是必須要3333呢?
講個場景,銀行當做伺服器,銀行里每一個窗口當做一個服務,每個窗口的服務內容不一樣。你我他可以當做客戶端,需要到窗口辦事,但是我們每個人辦的事情不一樣,如果每個窗口服務沒有一個編號表示對應的服務,你我他怎麼知道要去哪個窗口辦理業務。
我是分割線
==========================================================
@邏輯 我又看了下題主問的問題,我可能理解偏了
埠的作用:
我們知道一台主機(對應一個IP地址)可以提供很多服務,比如web服務,ftp服務等等。如果只有一個IP,無法卻分不同的網路服務,所以我們採用」IP+埠號」來區分不同的網路服務。
埠的定義:
埠號是標識主機內唯一的一個進程,IP+埠號就可以標識網路中的唯一進程。在我們通常用的Socket編程中,IP+埠號就是套接字
埠號是由16比特進行編號,範圍是0-65535,按照道理來講,這些埠你都可以隨便用。但是你不是vip用戶,所以有一些埠被vip用戶占著。比如FTP 21 Ssh 22等等,所以給埠分了類,規定你可以使用埠的範圍。
埠的分類
分類的維度很多,這裡我們按照服務端使用還是客戶端使用分類
a.服務端使用的埠號
- 預留埠號
取值範圍0-1023,這些埠我們編程的時候不能使用,是那些vip應用程序使用的,只有超級用戶特權的應用才允許被分配一個預留埠號
- 登記埠號
取值範圍1024-49151,就是我們平時編寫伺服器使用的埠號範圍 ,題主提到的埠號,只要在這個範圍就好
b.客戶端使用的埠號
取值範圍49152-65535,這部分是客戶端進程運行時動態選擇的範圍,又叫臨時埠號
理論上埠是任意的,互相之間沒有區別,選哪一個都一樣。不過實際使用中1024以前的都屬於保留埠,相當於電話里的三位號五位號一樣,往往是有約定俗成的用途的。想要在那裡開埠也往往需要root許可權。那之後的幾萬個只要沒被佔用都是可以用的。但是49151又是一個分界線,那之後的往往是不用的。
埠的一部分(小於1024的)是保留地址,但是還是可以算便用,搜索一下,就知道每個埠是給誰保留的,後面一部分埠則是預留的,通常服務埠是隨便用,再往後的就算是給client 留的,然而你還是可以隨便用
3333的埠號可以更改,只要沒有程序佔用,就可以使用,從技術上來說,想咋干咋干,但是從習慣來講,大概3000到9000是很多 web伺服器的埠選擇區間,,上完的也正常,mongodb的埠就是27017但是也可以配置成23317任意的,別和知名的服務衝突就好。常見的比如Web伺服器是80FTP伺服器是20、21
……
當然這些服務的埠是也可以進行自定義!埠號,就是告訴計算機數據包屬於哪個程序的。打個比方,計算機系統相當於學校,IP地址相當於學校的地址,埠號相當於學生的名字。如果不寫名字,快遞包裹即使到了學校門口也送不到收貨人手上。
一些系統程序有固定的埠號,數字都比較小,申請的時候別用那些就好,其他上萬個號碼隨便挑,比如23333…
當然 2333 也是可以的
是隨便取的。但1024之下的不要隨便用,搞不好一個系統服務就起不來了。另外常用軟體埠也要避開比如3389,1433,3306等。我還沒聽說過常用軟體里有超過10000以上的,理論上10000到65535之間隨便取。
如果所有埠都一樣,那還有必要人為指定嗎
要是大家都遵守「必須是3333」豈不是都衝突了?顯然,埠衝突的情況很少發生,以上不成立。你不和別人衝突就行了,並沒有什麼硬性規定。當然,某些約定俗成的保留埠你需要注意,即使本機暫時沒用到。
埠號是伺服器端與客戶端共同協商一致定下的,前提是不能使用別人已經佔用的埠號,如21。伺服器端確定了埠號,客戶端就通過該埠號請求服務。伺服器好比銀行,開了幾個窗口1,2,3,窗口號就是埠號。每個窗口具體處理啥業務是銀行決定(伺服器端開發者),並在大廳以提示方式告訴客戶,客戶根據自己的業務到對應窗口辦理。只有到對應的埠才能處理對應的業務服務。
除了1024以內的 都可以隨便填
是的,編寫伺服器軟體時的埠號是任意的,只要你確定不會和伺服器中其他軟體的埠號衝突就可以了。為了避免可能的衝突,應避免常用埠號,例如80,443,21等。
寫客戶端軟體時,要保證跟伺服器軟體的埠號相同即可。你也可以用4444,5555,6666等等都沒有關係
推薦閱讀:
※互聯網經濟的泡沫還有多久破裂?未來十年內編程行業如何?
※怎麼在移動端調試web前端?
※無線WiFi鄰頻干擾的影響有多大?
※網路工程專業的前景如何?
※如何看待武漢大學首個人工智慧專業在電子信息學院開設,而不是計算機或軟體學院?