传输层基础

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

相关推荐
搬码后生仔1 小时前
【navicat不安装sql server直接远程连接服务器数据库】
运维·服务器·数据库
Gary Studio1 小时前
Frameworks学习预览
学习
for_ever_love__1 小时前
UI学习:单例传值
学习·ui·ios·objective-c
wangbing11251 小时前
Java处理csv文件总是丢数据
java·开发语言·python
The_superstar61 小时前
2026.4.28衡山派学习复习笔记
笔记·学习
Rust语言中文社区1 小时前
【Rust日报】2026-04-28 Pacquet:pnpm 的 Rust 重写版本
开发语言·后端·rust
XD7429716361 小时前
001. MSP430G2553 入门总述:从零开始学习这颗单片机
单片机·嵌入式硬件·学习·嵌入式·msp430g2553
wuxinyan1231 小时前
大模型学习之路01:提示工程从入门到精通(第一篇)
人工智能·学习·提示词
for_ever_love__1 小时前
UI学习:通知传值
学习·ui·ios·objective-c