端口号理解

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

  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)

相关推荐
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20163 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本3 天前
离散数学第六课
学习·离散数学
AI职业加油站3 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊3 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
我爱cope3 天前
【操作系统 | 计算机硬件:CPU、内存与 I/O 如何支撑操作系统?】
学习·操作系统