传输层基础

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

相关推荐
敖行客 Allthinker2 分钟前
企业级多台服务器组装 K3s 高性能集群实战指南
运维·服务器·团队开发
码兄科技16 分钟前
Java AI智能体开发实战:从零构建企业级智能应用指南
java·开发语言·人工智能
czysoft23 分钟前
se被限速
科技·学习·it·技术·魔法·先进·领先
zh路西法26 分钟前
【现代控制理论与卡尔曼滤波】从状态空间到Python仿真实现
开发语言·python
Evand J35 分钟前
【论文复现】MATLAB例程,存在测距误差的WSN无锚点分布式自定位,《WSN中存在测距误差的无锚点分布式自定位方法》
开发语言·分布式·matlab·定位·导航·wsn
techdashen1 小时前
kTLS 进入 rustls 组织:把 TLS 的数据面交给内核
开发语言·php
Web极客码1 小时前
在WordPress Multisite中添加超级管理员用户
服务器·php·网站
子不语1801 小时前
从0开始学习S7-1200+ET200SP(3)——两台S7-1200通过TCP连接
网络协议·学习·tcp/ip
Lhappy嘻嘻1 小时前
Java 并发编程(六)|并发进阶高频:CAS、锁升级
java·开发语言
techdashen1 小时前
Arborium:把 tree-sitter 语法高亮打包成 Rust 文档生态的基础设施
开发语言·后端·rust