端口号的分类

1.什么是端口号?
在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口,如RJ-45端口、SC端口等等。逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。由于物理端口和逻辑端口数量较多,为了对端口进行区分,将每个端口进行了编号,这就是端口号。

2.端口号的分类

(1)公认端口(Well Known Ports):这类端口也常称之为”常用端口”。这类端口的端口号从0到1024,它们紧密绑定于一些特定的服务。通常这些端口的通信明确表明了某种服务的协议,这种端口是不可再重新定义它的作用对象。
(2) 注册端口(Registered Ports):端口号从1025到49151。它们松散地绑定于一些服务。也是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。这些端口多数没有明确的定义服务对象,不同程序可根据实际需要自己定义 。
(3) 动态和/或私有端口(Dynamic and/or Private Ports):端口号从49152到65535。理论上,不应把常用服务分配在这些端口上。实际上,有些较为特殊的程序,特别是一些木马程序就非常喜欢用这些端口,因为这些端口常常不被引起注意,容易隐蔽。

按协议类型划分可分为TCP端口、UDP端口、IP端口、ICMP(Internet控制消息协议)。
3.网络服务中常用的端口号

(1)FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
(2)Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
(3)SMTP:定义了简单邮件传送协议,很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。
(4)POP3:它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。

### 端口号分类及定义 端口号是传输层协议(如TCP和UDP)中的一个重要概念,用于标识进程与进程之间的通信。以下是端口号的主要分类及其定义: #### 1. **公认端口(Well-Known Ports)** - 范围:`0` 到 `1023` - 定义:这些端口被称作系统端口或常用端口,通常绑定到特定的服务上[^4]。例如: - 端口 `21`:FTP(文件传输协议)控制连接 - 端口 `80`:HTTP(超文本传输协议) - 端口 `443`:HTTPS(安全超文本传输协议) - 特点:这些端口由互联网号码分配机构(ICANN)管理,并且不能重新定义其作用对象。 #### 2. **注册端口(Registered Ports)** - 范围:`1024` 到 `49151` - 定义:这些端口为没有公认端口的应用程序使用[^2]。任何应用程序都可以申请使用这些端口,但需要在IANA(互联网号码分配机构)按照规定的手续进行登记,以避免重复。 - 特点:这些端口通常用于特定应用或服务,但不像公认端口那样具有普遍性。 #### 3. **动态/私有端口(Dynamic or Private Ports)** - 范围:`49152` 到 `65535` - 定义:这些端口也被称为短暂端口,主要用于客户端进程运行时动态选择[^2]。客户端只需确保该端口号在本机上是唯一的即可。 - 特点:这些端口的存在时间较短,通常在会话结束后被释放。 #### 4. **临时端口(Ephemeral Ports)** - 范围:通常为 `1024` 到 `65535`,具体范围可能因操作系统而异[^3]。 - 定义:临时端口是由操作系统为客户端应用程序动态分配的端口,用于与服务器建立连接。它们仅在会话期间存在,会话结束后会被释放。 - 特点:这些端口通常位于注册端口和动态端口范围内。 ### 示例代码:检查端口状态 以下是一个简单的Python脚本,用于检查某个端口是否开放: ```python import socket def check_port(host, port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(2) try: result = sock.connect_ex((host, port)) if result == 0: return f"端口 {port} 是开放的。" else: return f"端口 {port} 是关闭的。" finally: sock.close() # 示例 print(check_port("127.0.0.1", 80)) # 检查本地主机的80端口 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值