端口号理解

把"谁听门铃"和"谁去按门铃"分开想,一句话就能拆清楚:

  1. **"我自己的端口号"**------叫**源端口**,随便挑(操作系统自动从 49152-65535 里抓一个临时号,用完就扔)。

  2. **"我要去的端口号"**------叫**目的端口**,必须跟对方"开门营业"的号对上,否则敲错门。


用 SNMP 举例

  • 网管软件(你的电脑)→ 交换机

源端口:临时 64523(无所谓)

目的端口:UDP 161(交换机必须在 161 上"听"SNMP 请求)

  • 交换机主动报警(Trap)→ 网管软件

源端口:161(交换机随手用)

目的端口:UDP 162(网管软件必须在 162 上"听"Trap)

所以:

  • **161 是"对方"的监听端口**------你想读/写设备,就发 UDP 包到它的 161。

  • **162 是"自己"的监听端口**------如果你想收 Trap,就要在本机开 UDP 162,让设备能把报警发过来。


再看一次 Web 浏览

浏览器访问 `https://www.bilibili.com`

源端口:本机 62788(随机,你无需管)

目的端口:远程 443(必须固定,否则打不开页面)


结论

  • **源端口**无所谓,系统给你随机;

  • **目的端口**必须跟对方服务匹配(HTTP→80,HTTPS→443,SNMP→161,SNMP-Trap→162)。

  • **两端端口号无需一样**------只要"发送方目的端口 = 接收方监听端口"就能对上暗号。

"监听端口"就是服务方"开门营业"的柜台号,谁想来买东西,就得排这个队。

443 号柜台不是 B 站私有,而是**整个互联网公认的"HTTPS 柜台"**------所有想卖"加密网页"的站点,都必须在这里支摊子。


一次刷 B 站的真实流程

  1. 你在地址栏敲 `www.bilibili.com`,浏览器先问 DNS:"这域名在哪?"

DNS 回答:"202.112.23.56"(举例)。

  1. 浏览器构造 TCP 包:

源端口:本机随机 62788

目的端口:远程 **443**(因为地址栏是 https://)

  1. 数据包冲到 202.112.23.56 这台服务器,服务器的操作系统看到"目的端口 = 443",就把它交给**监听在 443 的那个进程**------通常是 nginx/Apache。

  2. nginx 收到请求,返回首页,全程柜台号始终是 443,不会换地方。


同一个端口给无数网站共用,会不会打架?

不会,因为柜台号只在一台**物理服务器**本地唯一。

  • 202.112.23.56:443 → B 站

  • 142.250.72.46:443 → Google

  • 104.16.123.96:443 → Cloudflare 上的某个小博客

它们 IP 不同,就像"不同商场里的 443 号柜台",顾客根据**IP+端口**的"完整地址"找上门,互不干扰。


如果一台服务器要跑两个 HTTPS 站点怎么办?

还是共用 443,靠**SNI(Server Name Indication)**------客户端在 TLS 握手时把域名明文带过去,nginx 按域名再把流量分给背后的 A 站或 B 站进程。端口依旧只有一个 443。


一句话总结

443 是**全球统一的"加密网页柜台"**,所有 HTTPS 站点都开在这;

不同网站**IP 不同**,所以不会抢柜台;

你访问任何 https:// 开头的地址,目的端口都是 443,无一例外。

W5500支持多个socket的用处:

同一个设备同时作为服务器和客户端

这才是W5500多Socket的强大之处!你的设备可以同时

  1. 作为服务器:Socket 0监听80端口,提供Web配置页面

  2. 作为客户端:Socket 1连接远程80端口,获取天气信息

    // Socket 0: 作为Web服务器(本地端口80)
    w5500_socket_init(0, Sn_MR_TCP | Sn_MR_TCP_SERVER, 80, 0);
    w5500_socket_command(0, Sn_CR_LISTEN);

    // Socket 1: 作为Web客户端(目的端口80)
    w5500_socket_init(1, Sn_MR_TCP | Sn_MR_TCP_CLIENT, 0, 0);
    w5500_set_dest_ip(1, api_server_ip); // 设置远程服务器IP
    w5500_set_dest_port(1, 80); // 设置目的端口为80
    w5500_socket_command(1, Sn_CR_CONNECT);

网络摄像头(只有一条网线)同时需要:

  1. Socket 0: TCP服务器,端口80 → 提供视频流(RTSP)

  2. Socket 1: TCP服务器,端口81 → 提供配置网页

  3. Socket 2: UDP客户端,端口5000 → 发送运动检测报警

  4. Socket 3: TCP客户端,端口8000 → 连接云存储服务

用户场景:

  1. 手机看实时视频 (通过Socket 0)

  2. 同时用电脑改摄像头设置 (通过Socket 1)

  3. 摄像头检测到人,发送报警到手机 (通过Socket 2)

  4. 所有录像自动备份到云端 (通过Socket 3)

相关推荐
副露のmagic2 小时前
更弱智的算法学习 day13
学习·算法
微露清风3 小时前
系统性学习C++进阶-第十四讲-二叉搜索树
开发语言·c++·学习
brave and determined3 小时前
传感器学习(day19):ToF传感技术:从测距到三维视觉革命
嵌入式硬件·学习·嵌入式系统·st·tof·嵌入式设计·flightsense
复业思维202401084 小时前
Altium Designer (24.2.2)中更改库以及保持器件参数不变
笔记·学习·硬件工程
巧克力味的桃子4 小时前
进制转换3 学习笔记
笔记·学习
Purple Coder5 小时前
人工智能学习路线
学习
小帅学编程5 小时前
Spring(侧重注解开发)
java·学习·spring
爱喝水的鱼丶5 小时前
SAP-ABAP:在SAP世界里与特殊字符“斗智斗勇”:一份来自实战的避坑指南
运维·服务器·数据库·学习·sap·abap·特殊字符
科技林总5 小时前
【系统分析师】认证介绍
学习