端口号是什么概念

本文介绍了网络中逻辑意义上端口的概念、分类,包括按端口号分布和协议类型划分。还说明了在Windows系统中查看、关闭和开启端口的方法,同时列举了21、23、25等多个常见端口的用途、漏洞,并给出相应的操作建议,以保障系统安全。

在上网的时候,我们经常会看到“端口”这个词,也会经常用到端口号,比如在FTP地址后面增加的“21”,21就表示端口号。那么端口到底是什么意思呢?怎样查看端口号呢?一个端口是否成为网络恶意攻击的大门呢?,我们应该如何面对形形色色的端口呢?下面就将介绍这方面的内容,以供大家参考。

端口简介:本文介绍端口的概念,分类,以及如何关闭/开启一个端口

端口概念 

  在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。我们这里将要介绍的就是逻辑意义上的端口。 

端口分类 

  逻辑意义上的端口有多种分类标准,下面将介绍两种常见的分类:

  1. 按端口号分布划分

  (1)知名端口(Well-Known Ports)

  知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。

  (2)动态端口(Dynamic Ports)

  动态端口的范围从1024到65535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放所占用的端口号。

  不过,动态端口也常常被病毒木马程序所利用,如冰河默认连接端口是7626、WAY 2.4是8011、Netspy 3.0是7306、YAI病毒是1024等等。

  2. 按协议类型划分

  按协议类型划分,可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等端口。下面主要介绍TCP和UDP端口:

  (1)TCP端口

  TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供可靠的数据传输。常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等等。

  (2)UDP端口

  UDP端口,即用户数据包协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。常见的有DNS服务的53端口,SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和4000端口等等。

查看端口

  在Windows 2000/XP/Server 2003中要查看端口,可以使用Netstat命令:

  依次点击“开始→运行”,键入“cmd”并回车,打开命令提示符窗口。在命令提示符状态下键入“netstat -a -n”,按下回车键后就可以看到以数字形式显示的TCP和UDP连接的端口号及状态(。

  小知识:Netstat命令用法

  命令格式:Netstat -a -e -n -o -s

  -a 表示显示所有活动的TCP连接以及计算机监听的TCP和UDP端口。

  -e 表示显示以太网发送和接收的字节数、数据包数等。

  -n 表示只以数字形式显示所有活动的TCP连接的地址和端口号。

  -o 表示显示活动的TCP连接并包括每个连接的进程ID(PID)。

  -s 表示按协议显示各种连接的统计信息,包括端口号。 

关闭/开启端口

  在介绍各种端口的作用前,这里先介绍一下在Windows中如何关闭/打开端口,因为默认的情况下,有很多不安全的或没有什么用的端口是开启的,比如Telnet服务的23端口、FTP服务的21端口、SMTP服务的25端口、RPC服务的135端口等等。为了保证系统的安全性,我们可以通过下面的方法来关闭/开启端口。

  关闭端口

  比如在Windows 2000/XP中关闭SMTP服务的25端口,可以这样做:首先打开“控制面板”,双击“管理工具”,再双击“服务”。接着在打开的服务窗口中找到并双击“Simple Mail Transfer Protocol (SMTP)”服务,单击“停止”按钮来停止该服务,然后在“启动类型”中选择“已禁用”,最后单击“确定”按钮即可。这样,关闭了SMTP服务就相当于关闭了对应的端口。

  开启端口

  如果要开启该端口只要先在“启动类型”选择“自动”,单击“确定”按钮,再打开该服务,在“服务状态”中单击“启动”按钮即可启用该端口,最后,单击“确定”按钮即可。

  提示:在Windows 98中没有“服务”选项,你可以使用防火墙的规则设置功能来关闭/开启端口。


 21端口:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务。

  端口说明:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务,FTP服务主要是为了在两台计算机之间实现文件的上传与下载,一台计算机作为FTP客户端,另一台计算机作为FTP服务器,可以采用匿名(anonymous)登录和授权用户名与密码登录两种方式登录FTP服务器。目前,通过FTP服务来实现文件的传输是互联网上上传、下载文件最主要的方法。另外,还有一个20端口是用于FTP数据传输的默认端口号。

  在Windows中可以通过Internet信息服务(IIS)来提供FTP连接和管理,也可以单独安装FTP服务器软件来实现FTP功能,比如常见的FTP Serv-U。

  操作建议:因为有的FTP服务器可以通过匿名登录,所以常常会被黑客利用。另外,21端口还会被一些木马利用,比如Blade Runner、FTP Trojan、Doly Trojan、WebEx等等。如果不架设FTP服务器,建议关闭21端口。

  23端口:23端口主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序。

  端口说明:23端口主要用于Telnet(远程登录)服务,是Internet上普遍采用的登录和仿真程序。同样需要设置客户端和服务器端,开启Telnet服务的客户端就可以登录远程Telnet服务器,采用授权用户名和密码登录。登录之后,允许用户使用命令提示符窗口进行相应的操作。在Windows中可以在命令提示符窗口中,键入“Telnet”命令来使用Telnet远程登录。

  操作建议:利用Telnet服务,黑客可以搜索远程登录Unix的服务,扫描操作系统的类型。而且在Windows 2000中Telnet服务存在多个严重的漏洞,比如提升权限、拒绝服务等,可以让远程服务器崩溃。Telnet服务的23端口也是TTS(Tiny Telnet Server)木马的缺省端口。所以,建议关闭23端口。

  25端口:25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。

  端口说明:25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务器所开放,主要用于发送邮件,如今绝大多数邮件服务器都使用该协议。比如我们在使用电子邮件客户端程序的时候,在创建账户时会要求输入SMTP服务器地址,该服务器地址默认情况下使用的就是25端口(如图)。

  端口漏洞:

  1. 利用25端口,黑客可以寻找SMTP服务器,用来转发垃圾邮件。

  2. 25端口被很多木马程序所开放,比如Ajan、Antigen、Email Password Sender、ProMail、trojan、Tapiras、Terminator、WinPC、WinSpy等等。拿WinSpy来说,通过开放25端口,可以监视计算机正在运行的所有窗口和模块。

  操作建议:如果不是要架设SMTP邮件服务器,可以将该端口关闭。

 53端口:53端口为DNS(Domain Name Server,域名服务器)服务器所开放,主要用于域名解析,DNS服务在NT系统中使用的最为广泛。

  端口说明:53端口为DNS(Domain Name Server,域名服务器)服务器所开放,主要用于域名解析,DNS服务在NT系统中使用的最为广泛。通过DNS服务器可以实现域名与IP地址之间的转换,只要记住域名就可以快速访问网站。

  端口漏洞:如果开放DNS服务,黑客可以通过分析DNS服务器而直接获取Web服务器等主机的IP地址,再利用53端口突破某些不稳定的防火墙,从而实施攻击。近日,美国一家公司也公布了10个最易遭黑客攻击的漏洞,其中第一位的就是DNS服务器的BIND漏洞。

  操作建议:如果当前的计算机不是用于提供域名解析服务,建议关闭该端口。
  ------------------------------------------

  67、68端口:67、68端口分别是为Bootp服务的Bootstrap Protocol Server(引导程序协议服务端)和Bootstrap Protocol Client(引导程序协议客户端)开放的端口。

  端口说明:67、68端口分别是为Bootp服务的Bootstrap Protocol Server(引导程序协议服务端)和Bootstrap Protocol Client(引导程序协议客户端)开放的端口。Bootp服务是一种产生于早期Unix的远程启动协议,我们现在经常用到的DHCP服务就是从Bootp服务扩展而来的。通过Bootp服务可以为局域网中的计算机动态分配IP地址,而不需要每个用户去设置静态IP地址。

  端口漏洞:如果开放Bootp服务,常常会被黑客利用分配的一个IP地址作为局部路由器通过“中间人”(man-in-middle)方式进行攻击。

  操作建议:建议关闭该端口。
  -------------------------------------------

  69端口:TFTP是Cisco公司开发的一个简单文件传输协议,类似于FTP。

  端口说明:69端口是为TFTP(Trival File Tranfer Protocol,次要文件传输协议)服务开放的,TFTP是Cisco公司开发的一个简单文件传输协议,类似于FTP。不过与FTP相比,TFTP不具有复杂的交互存取接口和认证控制,该服务适用于不需要复杂交换环境的客户端和服务器之间进行数据传输。

  端口漏洞:很多服务器和Bootp服务一起提供TFTP服务,主要用于从系统下载启动代码。可是,因为TFTP服务可以在系统中写入文件,而且黑客还可以利用TFTP的错误配置来从系统获取任何文件。

  操作建议:建议关闭该端口。

转载于:https://www.cnblogs.com/zhangchenliang/archive/2012/09/02/2667750.html

<think>在PHY芯片(如RTL8218E)中,一个物理芯片通常包含多个端口(例如8个端口)。这些端口在芯片内部是连续的,并且每个端口在芯片内部都有相对编号(0到7)。而在整个交换机系统中,每个端口都有一个全局唯一的端口号(MAC ID)。 相对端口号(phyPort)指的是在一个多端口PHY芯片内部,端口的相对索引(从0开始)。而基础端口号(basePort)指的是该PHY芯片的第一个端口(端口0)在系统中的全局端口号。 例如: - 假设系统中有两个RTL8218E芯片,每个芯片有8个端口。 - 第一个芯片的基础端口号(basePort)为0,那么它的端口在系统中的全局端口号是0,1,2,...,7。 - 第二个芯片的基础端口号(basePort)为8,那么它的端口在系统中的全局端口号是8,9,10,...,15。 对于一个给定的全局端口号(port),我们可以通过以下方式计算出它在PHY芯片内部的相对端口号(phyPort): phyPort = port - basePort 例如,全局端口号9: basePort = 8(因为9属于第二个芯片,第二个芯片的基础端口号是8) phyPort = 9 - 8 = 1(即该芯片的第二个端口) 这样,当我们访问PHY芯片的寄存器时,我们使用基础端口号(basePort)来定位到具体的PHY芯片(通过MDIO总线),然后使用相对端口号(phyPort)来访问该芯片内部对应端口的寄存器(因为有些寄存器是每个端口独立设置的)。 在RTL8218E芯片中,每个端口的寄存器结构是相同的,但需要通过不同的页(page)或寄存器地址偏移来访问。因此,相对端口号用于确定在芯片内部访问哪个端口的寄存器。 下面是一个具体的例子,展示如何通过基础端口号和相对端口号来设置PHY芯片的寄存器: 假设我们要设置全局端口号9(属于第二个PHY芯片,相对端口号1)的某个寄存器。 步骤: 1. 确定该端口所属的PHY芯片的基础端口号(basePort=8)。 2. 计算相对端口号(phyPort=1)。 3. 通过MDIO总线访问基础端口号8(即第二个PHY芯片),然后根据相对端口号1来设置相应的寄存器。 在RTL8218E中,每个端口都有自己独立的寄存器组,通过分页机制和端口选择寄存器来选择当前操作的端口。例如,在页8中,有一个寄存器(如寄存器0x10)的某些位用于选择当前要配置的端口(0~7)。然后,再设置该端口的中断掩码寄存器。 因此,相对端口号是用于在同一个PHY芯片内部区分不同端口的关键。</think>在 PHY 芯片(如 RTL8218E)的上下文中,"相对端口号"(phyPort)指的是一个端口在**单个 PHY 芯片内部**的索引位置,而不是在整个系统中的全局端口号。让我详细解释这个概念: ### 相对端口号 (phyPort) 的概念 1. **物理芯片与端口关系**: - 像 RTL8218E 这样的 PHY 芯片通常是多端口的(例如 8 端口) - 一个物理芯片包含多个逻辑端口(例如端口 0-7) - 系统中可能有多个这样的 PHY 芯片 2. **全局端口号 vs 相对端口号**: | 概念 | 描述 | 示例 | |------|------|------| | **全局端口号 (port)** | 在整个系统中的唯一标识符 | 0, 1, 2, ..., 15 (整个系统) | | **基础端口号 (basePort)** | PHY 芯片的第一个端口在系统中的全局 ID | 芯片1: 0, 芯片2: 8 | | **相对端口号 (phyPort)** | 在 PHY 芯片内部的端口索引 (0 到 N-1) | 芯片1: 0-7, 芯片2: 0-7 | 3. **计算关系**: ```c phyPort = port - basePort; ``` - `port`: 系统全局端口号 - `basePort`: 当前 PHY 芯片的第一个端口的全局 ID - `phyPort`: 芯片内部的相对索引 (0 到 PORT_NUM_IN_8218E-1) ### 实际示例 假设系统中有两个 RTL8218E 芯片(每个芯片 8 端口): - **芯片1**: - basePort = 0 (第一个端口的全局 ID) - 端口映射: | 全局端口 (port) | 相对端口 (phyPort) | |-----------------|-------------------| | 0 | 0 | | 1 | 1 | | ... | ... | | 7 | 7 | - **芯片2**: - basePort = 8 (第一个端口的全局 ID) - 端口映射: | 全局端口 (port) | 相对端口 (phyPort) | |-----------------|-------------------| | 8 | 0 | | 9 | 1 | | ... | ... | | 15 | 7 | ### 为什么需要相对端口号? 1. **寄存器访问**: ```c // 访问芯片1的phyPort=1 (全局端口1) 的寄存器 hal_miim_write(unit, basePort=0, page, reg, value); // 访问芯片2的phyPort=1 (全局端口9) 的寄存器 hal_miim_write(unit, basePort=8, page, reg, value); ``` 2. **芯片内部寄存器结构**: RTL8218E 使用相对端口号访问内部寄存器: ```c // 设置中断掩码 (使用相对端口号) ret = _phy_8218e_intrIntpinCommonMask_set(unit, basePort, phyPort, mask); ``` 3. **PHY 芯片内部结构**: ```plaintext RTL8218E 芯片内部结构: +-----------------------+ | PHY 芯片 | | +-----------------+ | | | 端口0 (phyPort=0)| | | +-----------------+ | | | 端口1 (phyPort=1)| | | +-----------------+ | | ... | | +-----------------+ | | | 端口7 (phyPort=7)| | | +-----------------+ | +-----------------------+ ``` ### 完整示例代码 ```c // 获取PHY芯片基础端口和相对端口 int get_phy_port_info(uint unit, uint port, uint *basePort, uint *phyPort) { // 获取基础端口(芯片的第一个端口) *basePort = HWP_PHY_BASE_MACID(unit, port); if (*basePort == HWP_NONE) return RT_ERR_PORT_ID; // 计算相对端口号 *phyPort = port - *basePort; // 验证相对端口是否有效 if (*phyPort >= PORT_NUM_IN_8218E) return RT_ERR_PORT_ID; return RT_ERR_OK; } // 设置PHY寄存器(使用相对端口) int phy_register_write(uint unit, uint port, uint page, uint reg, uint16 value) { uint basePort, phyPort; uint16 origPage; int ret; // 1. 获取端口信息 if ((ret = get_phy_port_info(unit, port, &basePort, &phyPort)) != RT_ERR_OK) return ret; // 2. 保存并切换页面 hal_miim_read(unit, basePort, 0, 30, &origPage); hal_miim_write(unit, basePort, 0, 30, page); // 3. 写入寄存器(实际使用phyPort选择内部寄存器) hal_miim_write(unit, basePort, phyPort, reg, value); // 4. 恢复原始页面 hal_miim_write(unit, basePort, 0, 30, origPage); return RT_ERR_OK; } ``` ### 为什么这种设计很重要? 1. **硬件抽象**: - 驱动程序不需要知道物理芯片在系统中的位置 - 通过 `basePort + phyPort` 模型统一访问不同位置的芯片 2. **可扩展性**: - 轻松添加更多 PHY 芯片 - 支持不同端口数量的 PHY 变体 3. **寄存器复用**: - 所有端口的寄存器结构相同 - 通过 `phyPort` 选择访问哪个端口的寄存器副本 4. **MDIO 寻址简化**: - MDIO 总线通过 `basePort` 选择 PHY 芯片 - PHY 芯片内部通过 `phyPort` 选择具体端口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值