🔌 第二章 用电信号传输TCP/IP数据
📄 一句话概括

IP 头写源/目的 IP、协议号、TTL——目的 IP 全程不变(NAT 除外),协议号告诉收方载荷归 TCP 还是 UDP。

📝 本节和前面几节的关系

工单第③步展开——填 IP 信封。

一、四个关键字段

源 IP(回信地址)、目的 IP(终点)、协议号(6=TCP/17=UDP)、 TTL(每过一跳减 1,防死循环)。

二、终点与下一跳

目的 IP 是终点主机;MAC 头才是下一跳—— 沿途路由器每跳换写 MAC,IP 不动(NAT 例外)。

三、动手 Demo:IP 头部长什么样

关键字段速览:

for f, e, u in [('源 IP','192.168.0.5','回信寄给谁'),
               ('目的 IP','172.20.1.1','终点在哪'),
               ('协议号','6(TCP)','载荷给上层谁'),
               ('TTL','64','防环:过一跳减一')]:
    print('%-8s %-14s %s' % (f, e, u))

实跑输出:

--------------------------------------------------------------------
IP 头部长什么样
--------------------------------------------------------------------
  IP 头的关键字段:

  字段        例子            用途
  ---------------------------------------------
  源 IP       192.168.0.5     回信寄给谁
  目的 IP     172.20.1.1      终点在哪
  协议号      6(TCP)          载荷给上层谁
  TTL         64              防环:过一跳减一
  ---------------------------------------------

  注意:目的 IP 全程不变(NAT 除外),
  变的是每跳换写的 MAC 头。

TTL 典型初值 64/128——tracert 就是靠 TTL 逐跳加一 逼出沿途路由器的应答。

30 秒实验

  1. tracert 一个外网地址,看 TTL 的游戏。
  2. Wireshark 找一个包的协议号字段值。
  3. 想想 NAT 改写 IP 后,回包怎么找到回来的路。

常见误区

  1. 以为沿途每跳都改目的 IP——NAT 场景才改。
  2. 以为 TTL 是秒数——是跳数。
自测三问(点开对答案) 1. 协议号 6 和 17 各代表什么? —— TCP 和 UDP。 2. TTL 防什么? —— 包在网络里死循环。 3. 全程不变的字段是什么? —— 源/目的 IP(NAT 除外)。

相关笔记