本系列文章为408考研计算机网络知识点整理仅涉及到一些重要的考研知识点并不完全包含全部知识,参考书目和视频资料:谢希仁 计算机网络(第8版),王道考研计算机网络,B站湖科大计算机网络微课堂。

4.6 IPv4数据报的首部格式

一个 IP 数据报由首部数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

  • 版本——占 4 位,指 IP 协议的版本 目前的 IP 协议版本号为 4 (即 IPv4)
  • 首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节
  • 区分服务——占 8 位,用来获得更好的服务。在旧标准中叫做服务类型,但实际上一直未被使用过。1998 年这个字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段。
  • 总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。 总长度必须不超过最大传送单元 MTU
  • 标识(identification)    占 16 位,它是一个计数器,用来产生数据报的标识。
  • 标志(flag)    占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF = 0 时才允许分片。
  • 片偏移(13 位)指出:较长的分组在分片后某片在原分组中的相对位置。 片偏移以 8 个字节为偏移单位。
  • 生存时间(8 位)记为 TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值。
  • 协议(8 位)字段指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程。常见协议TCP(6),UDP(17),OSPF(89),IGMP(2),ICMP(1),IPv6(41)
  • 首部检验和(16 位)字段只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
  • 源地址和目的地址都各占 4 字节
  • IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。 实际上这些选项很少被使用。 

4.7 IP 层转发分组的流程

IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件

网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。 

分组转发算法

(1)  从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N

(2)  若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。

(3)  若路由表中有目的地址为 D 特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。

(4)  若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。

(5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。

(6)  报告转发分组出错。

4.8 网际控制报文协议ICMP

为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。

ICMP 不是高层协议,而是 IP 层的协议。ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。   

4.8.1 ICMP差错报文

ICMP 差错报告报文共有 5 种

终点不可达

源点抑制(Source quench)  

时间超过

参数问题

改变路由(重定向)(Redirect)  

不应发送 ICMP 差错报告报文的几种情况

  • 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
  • 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
  • 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
  • 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。

4.8.2 ICMP询问报文

分类

应用

分组网间探测PING:

  • 用来测试主机或路由器间的连通性
  • 应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
  • 使用ICMP回送请求和回答报文

跟踪路由traceroute:

  • 用来测试IP数据报从源主机到达目的主机要经过哪些路由器
  • Windows版本
    • tracert命令
    • 应用层直接使用网际层ICMP
    • 使用了ICMP回送请求和回答报文以及差错报告报文
  • Unix版本
    • traceroute命令
    • 在运输层使用UDP协议
    • 仅使用ICMP差错报告报文

4.9 IP多播和网络转换地址NAT

4.9.1 IP多播

  • (1) 多播使用组地址—— IP 使用 D 类地址支持多播。多播地址只能用于目的地址,而不能用于源地址。 
  • (2) 永久组地址——由因特网号码指派管理局 IANA 负责指派。
  • (3) 动态的组成员
  • (4) 使用硬件进行多播

因特网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E。因此 TCP/IP 协议使用的以太网多播地址块的范围是:从 00-00-5E-00-00-00到 00-00-5E-FF-FF-FF

D 类 IP 地址可供分配的有 28 位,在这 28 位中的前 5 位不能用来构成以太网硬件地址。

D 类 IP 地址与以太网多播地址的映射关系

4.9.2 网际组管理协议IGMP和多播路由选择协议

为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP (Internet Group Management Protocol)。

连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。

4.9.3 网络转换地址NAT

虽然因特网采用了无分类编址方式来减缓IPV4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPV4地址空间即将面临耗尽的危险仍然没有被解除。
1994年提出了一种网络地址转换NAT的方法再次缓解了IPV4地址空间即将耗尽的问题。
NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。

网络地址转换的过程

  • 内部主机 X 用本地地址 IPX 和因特网上主机 Y 通信所发送的数据报必须经过 NAT 路由器。
  • NAT 路由器将数据报的源地址 IPX 转换成全球地址 IPG,但目的地址 IPY 保持不变,然后发送到因特网。
  • NAT 路由器收到主机 Y 发回的数据报时,知道数据报中的源地址是 IPY 而目的地址是 IPG
  • 根据 NAT 转换表,NAT 路由器将目的地址 IPG 转换为 IPX,转发给最终的内部主机 X。

该转换方法存在一个问题:如果NAT路由器具有N个全球IP地址,那么至多只能有N个内网主机能够同时和因特网上的主机通信。