- 重度粉毛厨2026-08-2211469
问题
请快速思考三个问题:
问题1
一个进程监听了 127.0.0.1:80/tcp
再启动一个进程,监听 0.0.0.0:80/tcp
能成功吗?
问题2
一个进程监听了 0.0.0.0:80/tcp
再启动一个进程,监听 127.0.0.1:80/tcp
能成功吗?
问题3
先将 [fd00::ffff:ff00] 绑定给 lo
启动一个进程监听 [::]:80/tcp
再启动一个进程监听 [fd00::ffff:ff00]:80/tcp
能成功吗?
结论
事实上,以上三个实验都会收到 EADDRINUSE,即 errno 98: Address already in use
因此,对于这个问题而言:
我有个业务需要常驻后台,监听80/443端口。
这个业务仅供本机访问,但是进程本身需要可以访问外网。
鉴于 80/443 是相当常用的端口,直接 bind 0.0.0.0 [::] 显然不合适。
ULA 的 fd00::/8是一个很好的选择,符合 RFC4193 的定义,而且随机一个 /64 子网就基本上不会和其他服务发生冲突。但是:
如果绑定到 lo,那本质上还会出现与 [::] …在Linux发行版的默认配置下(即不开启地址或端口重用),只要监听的IP落在当前网络命名空间的网卡下,其他进程就无法避免 Wildcard Address 在同端口监听时发生冲突。
主楼 - 9527-oo2026-08-2212543
你是种子用户,为啥你的id不会变颜色啊
- marre2026-08-2234689
- 重度粉毛厨2026-08-2211469
- DisplayKing2026-08-228775
0 已经包含所有了 包括 127
- listening2026-08-229449
本质还是不了解计算机网络,理论功底不过关。
- PJ5682026-08-2217545
解决了困扰我多个世纪的问题,谢谢佬。
- 文月2026-08-2220366