TCP / UDP 概念

一条消息是怎么从这台电脑,跑到那台电脑的?

商用通识

◎学完你会

1一条消息的旅程:为什么要分层

发消息时你只管"发给谁、发什么",中间这一堆活都是网络自己在干。点下面任意一层,看它负责什么。

寄快递打个比方:应用层是你要寄的东西;传输层决定寄"挂号信"(TCP)还是"明信片"(UDP);网络层只负责写清寄到哪个城市(IP);链路层是最后一公里的快递员。四层各管一段,谁也不越界。

2TCP 还是 UDP:先问"这活儿怕不怕丢"

点一个真实场景,看该选哪个协议、为什么。

TCPUDP
要连接吗要,先三次握手不要,直接发
丢包自动重传,不丢丢了就丢了,不补
顺序保证按序到达不保证,可能乱序
速度 / 延迟稳,但有等待快,延迟低
典型场景文件、网页、邮件通话、直播、游戏、DNS

3动手实验:同样发 6 条消息,怎么会不一样

向对端发 6 条消息,途中会"丢"一个包。用「单步」一步步走,或点「自动播放」看完整过程。

发送端
线路
选择上方的 TCP / UDP 开始
接收端
— 还没开始 —

4四个词,先记住

词一句话
IP找到"哪台机器"(小区 + 楼栋)
端口找到"哪个程序"(门牌号);16 位,0~65535
socketIP + 端口 = 一个网络端点,程序收发数据的"插座"
三次握手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 在实时场景里胜出的物理原因。