🌐 第三章 网络间的通用语言TCP/IP
📄 一句话概括

TCP/IP 的上两层:传输层是"管道工"——把货可靠(TCP)或快速(UDP)地送到对方程序手里,还负责用端口分清货该给哪个程序;应用层才是最终干活的店员——网页、域名翻译、邮件全是它的业务。标题里的"做准备"就是指:传输层把通道铺稳,应用程序只管谈生意。

一、位置回顾:上两层 = 会客的层

3.2 拆完下两层(接口层管一段、网际层管全程),货已经能横跨千网送到目标电脑了。但 1.5 说过——电脑本身不会上网,程序才会上网:

应用层      ← 最终干活的程序(HTTP/DNS/SMTP)★ 本节
传输层      ← 把货送到"程序"手里(TCP/UDP + 端口)★ 本节
─────── 3.2 分界线 ───────
网际层      ← 跨网全程(IP)
网络接口层  ← 这一段路(以太网/Wi-Fi)

一句话分工:传输层管"送到对端哪个程序",应用层管"程序拿货干什么活"。

二、传输层:管道工 + 分房员

传输层干两件事,缺一不可:

1. 送达方式二选一(收 3.2 埋的坑)

TCP(保价快递) UDP(同城闪送)
口号 可靠送达 快速送达
手段 先打招呼建立连接、确认收货、丢了补发、乱序重排 打包就发,不管对方在不在
快慢 稍慢(管家规矩多) 快(没有仪式感)
适合 网页、文件、邮件——丢一个字节都不行 视频通话、游戏、直播——卡一下没关系
💡 填 3.2 的坑

3.2 说过"IP 尽力而为、丢了不补"。"可靠"不是 IP 给的,是传输层的 TCP 在上面补出来的——确认、补发、重排全靠它。所以:网络基础不等于服务可靠,可靠是花钱(开销)买的服务。

2. 端口:把货分给正确的程序

一台服务器上同时跑着几十个程序(网页服务、域名翻译、邮件……),货到了楼里怎么分?靠端口:

💡 收 Java 13.2 的旧账

当时写 Socket 代码里的 new Socket("host", 8080) 和 ServerSocket(8080)——那个 8080 就是本节的软件端口。Java 课本的"IP 找主机、端口找程序",在这里拿到了协议层的出处。

三、应用层:真正干活的店员

四层连读(把 3.2 + 本节拼起来):接口层运一段 → 网际层跨全程 → 传输层送到程序 → 应用层干成事——寄快递的完整旅程到此闭环。

四、动手 Demo17:亲眼看端口分房

  1. 打开命令行(Win+R → cmd): netstat -an | findstr LISTENING
  2. 列出你电脑上正在守号的程序(0.0.0.0:8080 表示"在 8080 号房间听电话")
  3. 开个网页再执行一遍,对比新增的 ESTABLISHED 行——每一条都是一根"已接通的管道",冒号后面就是对方房间号
  4. 30 秒观察:本机随机占用的号都在几千到几万(散客号),而浏览器访问网站永远默认去 443/80(知名号)——名册各归各位。
❓ 自测一下
  1. "为驱动应用程序做准备"——做准备的是哪层?做什么准备?
  2. TCP 和 UDP 怎么选?视频通话用的是哪个,为什么?
  3. IP、端口各负责找到什么?完整地址怎么写?
  4. "可靠送达"是谁的功劳?IP 为什么不负责这个?

答案:① 传输层——铺通道(TCP/UDP 连接)+ 分对程序(端口);② 看业务:要完整选 TCP、要实时选 UDP;视频通话用 UDP,卡一下能容忍、丢帧重发反而添乱;③ IP 找楼(设备)、端口找房间(程序),写作 IP:端口;④ 传输层 TCP(确认+补发+重排);IP 只尽力而为——可靠是上层花钱买的服务,分层各司其职。

常见误区:

  1. ❌ "TCP 一定比 UDP 好" → 只是取舍不同:保价快递和闪送没有优劣,看货
  2. ❌ "端口是设备上的插座" → 那是 2.3 的物理端口;本节端口是 0~65535 的编号,纯软件概念
  3. ❌ "一台服务器一个 IP 只能跑一个服务" → 端口就是为了让一台机器同时跑几十个服务
  4. ❌ "应用层协议(如 HTTP)负责把数据送到对方电脑" → 送达全程是下三层的活,应用层只管业务对话

六、下一步学什么

相关笔记