TCP / UDP 概念
一条消息是怎么从这台电脑,跑到那台电脑的?
商用通识
◎学完你会
- 说清一条消息在网络上要经过哪几层,IP 和端口各解决什么问题;
- 用一句话讲明白 TCP 与 UDP 的根本差别,并按场景选对协议;
- 理解"可靠"不是白来的——握手、确认、重传,都是它的代价。
1一条消息的旅程:为什么要分层
发消息时你只管"发给谁、发什么",中间这一堆活都是网络自己在干。点下面任意一层,看它负责什么。
寄快递打个比方:应用层是你要寄的东西;传输层决定寄"挂号信"(TCP)还是"明信片"(UDP);网络层只负责写清寄到哪个城市(IP);链路层是最后一公里的快递员。四层各管一段,谁也不越界。
2TCP 还是 UDP:先问"这活儿怕不怕丢"
点一个真实场景,看该选哪个协议、为什么。
| TCP | UDP |
| 要连接吗 | 要,先三次握手 | 不要,直接发 |
| 丢包 | 自动重传,不丢 | 丢了就丢了,不补 |
| 顺序 | 保证按序到达 | 不保证,可能乱序 |
| 速度 / 延迟 | 稳,但有等待 | 快,延迟低 |
| 典型场景 | 文件、网页、邮件 | 通话、直播、游戏、DNS |
3动手实验:同样发 6 条消息,怎么会不一样
向对端发 6 条消息,途中会"丢"一个包。用「单步」一步步走,或点「自动播放」看完整过程。
— 还没开始 —
4四个词,先记住
| 词 | 一句话 |
| IP | 找到"哪台机器"(小区 + 楼栋) |
| 端口 | 找到"哪个程序"(门牌号);16 位,0~65535 |
| socket | IP + 端口 = 一个网络端点,程序收发数据的"插座" |
| 三次握手 | TCP 建立连接前的"你在吗 — 我在 — 好,开始" |
// UDP:不用连,直接发(像寄明信片)
sendto(sock, "hi", ...);
// TCP:先连上,再当"管道"用(像打电话)
connect(sock, ...); // 三次握手就发生在这里
write(sock, "hi", 2);
!最容易搞混的四件事
① UDP 不是"坏掉的 TCP"。它只是主动放弃了可靠,换来低延迟与低成本——该快的地方用它才聪明。
② 端口不是物理插口。它是操作系统给程序的门牌号;同一台机器上,浏览器和游戏靠不同端口同时收数据。
③ 光有 IP 不够。IP 把数据送到机器,但机器上跑着很多程序——没有端口,数据到了也不知道交给谁。
④ "连接"不是天生的。TCP 连接要靠三次握手主动建立;UDP 压根没有"连接"这回事。
?练一练
下面哪一句描述的是 TCP?
TCP 先三次握手,靠确认 + 重传做到不丢不乱;A 是 UDP,C 是 DNS,D 是路由(网络层)干的活。
一对一视频通话,通常用哪个协议?
通话要的是"实时"。偶尔丢一两帧,人眼几乎无感;但若用 TCP,等重传会让画面越卡越迟。所以通话 / 直播 / 游戏多用 UDP,抗丢包交给应用层。
顺着想一下:为什么"IP 只能找到机器,端口才能找到程序"?
一台电脑同时跑着浏览器、微信、游戏。IP 把数据送到这台机器后,操作系统再按数据里的端口号决定交给哪个程序——就像快递送到楼了,还得靠门牌号找到具体哪一户。端口号占 16 位,范围 0~65535。
用 TCP 下载大文件时,第 3 个数据包在途中丢了,接下来最可能发生什么?
TCP 按序号确认:接收方发现缺了 #3,发送方超时后只重传 #3;最终交给应用的是完整且有序的字节流。这正是"可靠"的代价——多花一点时间和往返。
✦跨学科:为什么延迟"优化不掉"
无论 TCP 还是 UDP,数据都要沿着光纤或电磁波跑。光在真空里约 30 万公里/秒,在光纤里更慢(约 20 万公里/秒)。
北京到纽约约 1.1 万公里,单程理论最快也要 ≈ 55 毫秒,往返就 110 毫秒——还没算路由器和交换机的排队时间。所以低延迟方案的目标不是"消灭延迟",而是把白白浪费掉的等待降到最低:这正是 UDP 在实时场景里胜出的物理原因。