理解 TCP(一):端口

更好閱讀體驗:《理解 TCP 和 UDP》— By Gitbook git

端口與進程

TCP 的包是不包含 IP 地址信息的,那是 IP 層上的事,可是有源端口和目的端口。
就是說,端口這一東西,是屬於 TCP 知識範疇的。 服務器

咱們知道兩個進程,在計算機內部進行通訊,能夠有管道、內存共享、信號量、消息隊列等方法。
而兩個進程若是須要進行通信最基本的一個前提是可以惟一的標識一個進程,在本地進程通信中咱們可使用 「PID(進程標識符)」 來惟一標識一個進程。
但 PID 只在本地惟一,若是把兩個進程放到了不一樣的兩臺計算機,而後他們要通訊的話,PID 就不夠用了,這樣就須要另一種手段了。 網絡

解決這個問題的方法就是在運輸層使用 「協議端口號 (protocol port number)」,簡稱 「端口 (port)」.
咱們知道 IP 層的 ip 地址能夠惟一標識主機,而 TCP 層協議和端口號能夠惟一標識主機的一個進程,這樣咱們能夠利用:「ip地址+協議+端口號」惟一標示網絡中的一個進程。
在一些場合,也把這種惟一標識的模式稱爲「套接字 (Socket)」tcp

這就是說,雖然通訊的重點是應用進程,但咱們只要把要傳送的報文交到目的主機的某一個合適的端口,剩下的工做就由 TCP 來完成了。 操作系統

認識端口

TCP 用一個 16 位端口號來標識一個端口,可容許有 65536 ( 2的16次方) 個不一樣的端口號,範圍在 0 ~ 65535 之間。 計算機網絡

端口號根據服務器使用仍是客戶端使用,以及常見不常見的維度來區分,主要有如下類別:code

  1. 服務器端使用的端口號
    • 熟知端口號
    • 登記端口號
  2. 客戶端使用的端口號

下面展開來講說。 隊列

端口號的分類

服務器端使用的端口號

熟知端口號
取值範圍:0 ~ 1023。
能夠在 www.iana.org 查到,服務器機器一接通電源,服務器程序就運行起來,爲了讓因特網上全部的客戶程序都能找到服務器程序,服務器程序所使用的端口就必須是固定的,而且總所衆所周知的。 進程

一些常見的端口號: ip

應用程序 FTP TELNET SMTP DNS TFTP HTTP HTTPS SNMP
熟知端口號 21 23 25 53 69 80 443 161

登記端口號
取值範圍:1024 ~ 49151。
這類端口沒有熟知的應用程序使用,可是須要登記,以防重複

客戶端使用的端口號

取值範圍:49152 ~ 65535。
這類端口僅在客戶端進程運行時才動態選擇。
又叫 短暫端口號,表示這種端口的存在時間是短暫的,客戶進程並不在乎操做系統給它分配的是哪個端口號,由於客戶進程之因此必須有一個端口號,是爲了讓傳輸層的實體可以找到本身。

PS:在/etc/services文件中能夠查看全部知名服務使用的端口。

參考

《後臺開發 核心技術與應用實踐》
《計算機網絡》

相關文章
相關標籤/搜索