端口号是什么意思?3389、5005、8080这些数字是谁定的,端口映射和端口冲突一次搞明白

上个月帮表弟配远程桌面,端口映射那张表里外部端口我让他填13389,内部端口填3389。他问了我一句:这俩为啥不填一样的数,还害我多记四位?我张嘴就说「为了安全」,他追问安全在哪,我卡壳了。回家打开电脑敲了行 netstat,看着满屏的数字把这事从头捋了一遍——端口号这套东西,我用了这么多年,其实一直是半懂。这篇就把这层窗户纸捅破。
先说清楚:IP找到楼,端口找到房间
一条数据要在网上送到地方,地址是分两段写的。前一段是IP地址,负责找到机器;后一段是端口号,负责找到这台机器上的具体程序。用小区打比方:IP是楼栋号,端口是房间号。快递单只写「3栋」是送不到人手里的,后面必须跟个房号。
为什么需要这么一层?你手机连着WiFi,微信、B站、游戏同时在线,三条线的数据都涌向同一个IP。要是没有端口,数据到了手机门口,谁也不知道这包是该给微信还是给游戏。所以每个联网的程序开工前都会向系统领一个或几个端口号,相当于在这栋楼里挂了个信箱。数据包头上写着「发到31.10的5005号信箱」,系统照着分拣,谁的信谁收,互不串门。
端口号是16个比特的数字,所以范围是0到65535,总共六万五千多个号,一台机器够用了。你在家用电脑上敲 netstat -ano,本地地址那一列里冒号后面的数字就是端口,能看到几十条目同时在干活。一条连接的完整身份是「源IP+源端口+目的IP+目的端口+协议」这五样,我在写TCP和UDP区别那篇提过一嘴,这篇专门把端口这一格讲透。
65535个号,是分三六九等的
这六万多个号不是随便抓的,国际上有个组织统一管着登记簿,分了三档,各有各的规矩:
| 档位 | 号段 | 谁在用 | 例子 |
| 知名端口 | 0 - 1023 | 写进标准的老前辈,系统服务专用 | 网页80、加密网页443、SSH 22、DNS 53 |
| 注册端口 | 1024 - 49151 | 软件厂商登记过的,给自家软件留的门牌 | 远程桌面3389、群晖5000、MySQL 3306 |
| 动态端口 | 49152 - 65535 | 系统随手抓给你当回信地址的 | 你刷视频时手机临时领的号 |
前两档是「守着门等人来」的服务端端口,号码固定,别人按号找上门。第三档是「主动出门」的客户端端口,你点开一个视频,系统从这档里随手抓一个号当回信信箱,用完就还,下次再来换一个。所以你在路由器设备列表里看到手机的连接,本地端口五位数一直变,那是正常现象,不是被黑了。
自己在家搭服务挑端口有条土规矩:避开前1024,也别撞大软件登记过的号,从一万号往上挑。我第一次给家里NAS配WebDAV,随手填了个8080,结果和另一个工具打架,后面讲冲突排查时细说。
家里常打交道的号,我整理成一张表贴弱电箱里
干这行折腾几年,散落在各篇文章里的端口号不少,我把家用场景里真会撞上的那些归到一张表里,打印出来贴在弱电箱盖内侧,配映射的时候不用再翻文章:
| 端口号 | 干嘛的 | 协议 | 啥时候会碰上 |
| 80 / 443 | 网页 / 加密网页 | TCP | 家宽基本封了这俩,别指望它俩对外开门 |
| 22 | SSH远程登录 | TCP | NAS开SSH默认就是它,也是最被扫的号 |
| 53 | DNS域名解析 | UDP为主 | 改DNS填223.5.5.5走的就是这条路 |
| 3389 | Windows远程桌面 | TCP | 出差别连家里电脑,映射的就是它 |
| 5000 / 5005 | 群晖后台 / WebDAV | TCP | NAS开WebDAV时5005明文5006加密,别记串 |
| 554 | 摄像头RTSP取流 | TCP/UDP | NAS添加摄像头手填的地址尾巴就是它 |
| 9 | 网络唤醒魔术包 | UDP | 远程开机转发这个号,手机App默认端口还得多改一步 |
| 1900 / 5353 | 投屏发现 / 局域网设备发现 | UDP | 手机能搜到电视,靠的是这俩组播口 |
| 8080 | 备用网页口 | TCP | 各种管理页爱用,也是冲突重灾区 |
这张表里有个细节值得多说一句:1900和5353是靠组播干活的,手机搜电视、搜打印机时满屋子广播的就是它们,我写组播那篇时抓包看它们跑了好几兆。这也是为什么开了AP隔离或者划了VLAN之后投屏就搜不到——发现这一步被拦在门外了,后面流程全断。
8080被占用了?三步把真凶揪出来
端口冲突是我踩过的最憋屈的坑。有回我起个本地小工具,日志里就一句「端口被占用,程序退出」,没了。到底谁占的?它不说。这种时候三步就能破案:
第一步,命令行敲 netstat -ano | findstr :8080,把8080换成你冲突的那个号。输出里最后一列是PID,进程编号。第二步,打开任务管理器,切到「详细信息」那栏,找到PID列点一下按编号排序,对上号就知道是哪个进程了。第三步,要么右键结束它,要么把自己的工具改个端口。我那次查出来是前一天没退干净的一个下载工具占着8080,进程名挂在那儿我还纳闷了半天——原来它后台常驻。
改端口通常比杀进程省事,尤其对方是系统离不开的服务。挑号就按前面说的土规矩,一万往上。另外提一句,同样的命令在Linux上是 ss -tlnp,NAS上排查Docker容器端口冲突时用得上,我在Docker那篇里提过容器内外端口是两套路径,冲突时先想这一层。
TCP的443和UDP的443,是两扇不同的门
这是最反直觉的一点:TCP和UDP各管各的端口表。TCP的443号门和UDP的443号门,是同一栋楼里两个不同房间,互相不通。你在端口转发或者水星、腾达后台里配映射时,那个「协议」下拉选TCP、选UDP还是选ALL,本质上就是在决定开哪扇门。选ALL不是含糊处理,是TCP一条加UDP一条,两条规则合一。
配完连不上,除了查公网IP这些大路毛病,先回头核协议。游戏机是最典型的:PS5联机官方给的表分TCP和UDP两列,TCP的1935和UDP的3074是两个条目,你只转了TCP那扇,UDP的门照样关着,游戏里该黄灯还是黄灯。我家NAS的下载工具也一样,BT的追踪和节点互通大头在UDP,只开TCP等于瘸了半条腿。
再说回表弟那个问题的完整答案:外部端口为啥要填13389这种高位数。网上爬虫扫门是有字典的,22、3389、8080这些常见号排在第一梯队挨个敲门。你把外部端口挪到一万三往上,字典撞不中,敲门声直接少一大截。我在NAS上转发过22号,半个月日志里几千条爆破记录,后来改了高位端口世界清净多了。挪端口不是保险柜,密码该16位还是16位,两道锁一起上才算数。
端口全关着才安全?家用别焦虑,盯三个地方就够
看到这可能有人开始慌:我家里这么多门开着,是不是很危险?恰恰相反。家里路由器的NAT天生是个只进不出挡人的门卫,你没主动做过映射,外面谁也敲不进你家的任何一扇门。真正要盯的是三个会开门的地方:
| 开门的地方 | 怎么看 | 我的做法 |
| 自己配的端口转发 | 后台转发规则列表 | 外部端口一律高位,密码16位起步 |
| UPnP自动开的映射 | 路由器UPnP映射列表 | 定期翻一眼,不认识的条目就删 |
| DMZ主机 | 后台DMZ设置页 | 家用基本不碰,碰过记得关 |
给设备做映射之前还有个前置动作别省:先给设备绑好静态IP。门牌是按IP+端口开的,设备重启后IP一漂,映射就开到了别人家头上,这是我第一趟白配的病根。水星和腾达两家后台的映射入口我分别写过水星版和腾达版,字段就四个,对着填就行。
收尾给个顺序:先记住家里常用那几个号(贴弱电箱那张表),冲突了用netstat按PID揪人,自己搭服务挑一万往上的高位,配映射先核协议再核内外端口,收尾每季度翻一眼UPnP列表。表弟听完这套,把外部端口改成了他生日后四位再加一万——行吧,反正字典也撞不中,勉强算毕业。

发表评论