传输层基础

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

相关推荐
L_090714 小时前
【C++】面向对象三大特性之多态
开发语言·c++
IT瑞先生14 小时前
运维专题3——业务进程排查方法论
运维·网络
PNP Robotics14 小时前
PNP机器人亮相南京学术论坛,分享具身智能多模态数据采集前沿成果
人工智能·深度学习·学习·机器学习·virtualenv
threelab14 小时前
Three.js 银河星系效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能
枳实-叶14 小时前
【Linux驱动开发】第10天:设备树零基础入门——DTS/DTB/DTC全解+编译流程
linux·运维·驱动开发
毕小宝14 小时前
AI 编程应用:实现 npm CLI 工具 scp-upload
学习
程序员敲代码吗14 小时前
探索JavaScript对象创建的灵活方式
开发语言·javascript·ecmascript
清钟沁桐14 小时前
mlir 编译器学习笔记之十 -- 数据类型
笔记·学习·mlir
red_redemption14 小时前
自由学习记录(190)
学习
枳实-叶14 小时前
【Linux驱动开发】第11天:设备树(Device Tree)超详细全解:从诞生背景到工作原理
linux·运维·驱动开发