不管是TCP或是UDP都會有Port 0至Port 65535這麼多, 而這些Port被分為三類~
‣ Well Known Ports (0 – 1023)
公定的Port, 範圍:0 – 1023, 使用在一般常見的Service功能, 如 HTTP﹑FTP…。
‣ Registered Ports (1024 – 49151)
註冊的Port, 範圍:1024 – 49151, 大部分為廠商開發程式後, 為了避免和其它程式使用相同的Port而有所衝突, 因此向http://www.iana.org 註冊專屬的Port來使用,
如 Port 2179/TCP 就是微軟註冊用來給 RDP for virtual machines 使用。
‣ Dynamic or Private Ports (49152 – 65535)
後半段的Ports主要是給用戶端啟動用戶端程式時使用的Port, 採動態取得的方式,
不過一般說來用戶端程式並不會真的乖乖的使用這個範圍的Port, 而是直接找有空閒的Port就開始使用了,
‣ Well Known Ports (0 – 1023)
公定的Port, 範圍:0 – 1023, 使用在一般常見的Service功能, 如 HTTP﹑FTP…。
‣ Registered Ports (1024 – 49151)
註冊的Port, 範圍:1024 – 49151, 大部分為廠商開發程式後, 為了避免和其它程式使用相同的Port而有所衝突, 因此向http://www.iana.org 註冊專屬的Port來使用,
如 Port 2179/TCP 就是微軟註冊用來給 RDP for virtual machines 使用。
‣ Dynamic or Private Ports (49152 – 65535)
後半段的Ports主要是給用戶端啟動用戶端程式時使用的Port, 採動態取得的方式,
不過一般說來用戶端程式並不會真的乖乖的使用這個範圍的Port, 而是直接找有空閒的Port就開始使用了,
所以用戶端使用的Port常常會落在1024 – 65535範圍裡。
这里有更加详细的port定义列表:
http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml
自定义监听端口不要定义在 Dynamic or Private Ports (49152 – 65535)范围内。
如果我们自定义一个监听端口为50000(在Dynamic or Private Ports范围内)。如下图所示,A创建到B的6008端口的连接,这时A是从一个随机分配的端口发出连接的(譬如这里的50000端口),当连接建立后,B发回给A数据时,将会发往A的50000端口,这些行为都是正确的。但是如果开启我们自己的程序区监听50000端口将会失败(已被占用)。
A B
50000----------------------->6008