1. 理解"IP + 端口 = 服务"
概述:
IP 定位主机
端口定位主机上的进程/服务
也就是说,网络里真正要找到的不是"电脑"本身,而是:
某台电脑上的某个程序
比如:
192.168.1.10:22
意思不是"找到这台机器"就结束了,而是:
找到 192.168.1.10 这台机器上的 22 号端口对应的服务
1)为什么光有 IP 不够
一台服务器上可以同时运行很多服务:
-
SSH
-
网站
-
数据库
-
Redis
-
Jupyter
-
自己写的 API
如果只有 IP,没有端口,系统根本不知道你要访问哪个程序。
所以:
IP + 端口
本质上就是一个网络入口标识。
2)举例说明
(1)
10.0.0.5:3306
拆解:
这是 10.0.0.5 这台机器上的 MySQL 之类数据库服务入口
(2)
203.0.113.8:443
拆解:
这是某台公网服务器上的 HTTPS 服务入口
(3)
ssh -p 60000 user@1.2.3.4
拆解:
-
ssh:使用 SSH 客户端 -
-p 60000:目标端口不是默认 22,而是 60000 -
user@1.2.3.4:连接 1.2.3.4 这台机器,并尝试以 user 身份登录
3. "连接超时 vs 拒绝连接"
1)连接超时(timeout)
连接超时的感觉是:
我发起了连接请求,但一直没人理我
也就是客户端发出请求后,长时间等不到回应。
常见原因:
-
网络根本不通
-
路由到不了目标
-
防火墙丢弃了数据包
-
校园网/运营商限制
-
目标 IP 写错
-
目标端口被中间网络静默拦截
你可以把它理解成:
你去敲门,但门后一点动静都没有
2)拒绝连接(connection refused)
拒绝连接的感觉是:
我已经到目标机器门口了,
目标机器明确告诉我:这个端口没人提供服务
常见原因:
-
目标主机在线
-
目标端口可达
-
但该端口没有程序在监听
比如:
-
SSH 服务没启动
-
端口写错了
-
服务只监听了别的端口
-
本机立刻返回 RST 拒绝
你可以把它理解成:
你去敲门,里面有人立刻回应:这间房没人办公
3)两者的本质区别
连接超时
说明更像是:
路上出了问题,或者请求被静默丢掉了
拒绝连接
说明更像是:
路是通的,目标主机也活着,但目标端口没有服务
4)怎么判断
如果是 timeout
优先怀疑:
-
IP 不通
-
防火墙
-
NAT / 路由
-
网络出口限制
-
中间链路问题
如果是 refused
优先怀疑:
-
服务没启动
-
端口写错
-
监听地址不对
-
SSH 配置端口和你访问端口不一致
总结:
timeout:先查网络路径
refused:先查目标服务
4. TCP/UDP 使用场景
1)TCP 的特点
TCP 是:
-
面向连接
-
可靠传输
-
有顺序
-
有重传
-
有流量控制和拥塞控制
所以 TCP 适合:
必须完整、准确、有顺序送达的数据
典型场景:
-
SSH
-
HTTP / HTTPS
-
文件传输
-
数据库连接
-
邮件
-
远程登录
因为这些应用不能接受:
-
少一段
-
乱序
-
半截数据
比如 SSH 如果用 UDP,键盘输入乱了、丢了,就没法正常远程控制。
2)UDP 的特点
UDP 是:
-
无连接
-
不保证可靠
-
不保证顺序
-
开销小
-
延迟低
所以 UDP 适合:
更重视实时性,
允许少量丢失,
应用自己能容忍或补救
典型场景:
-
语音通话
-
视频直播
-
在线游戏
-
DNS 查询
-
某些实时控制场景
比如视频会议里,偶尔丢一帧还能接受;
但如果每丢一帧都等重传,画面反而会卡得更严重。
3)怎么做判断
你可以问自己两个问题:
问题 1:数据必须一字不差吗?
如果必须,那通常偏向 TCP。
问题 2:我更怕"丢一点"还是更怕"延迟变大"?
-
更怕丢失:偏 TCP
-
更怕延迟:偏 UDP