跳至主要內容

3.IPV4

𝓳𝓭𝔂𝓼𝔂𝓪大约 13 分钟

IPv4 分组

IPv4 分组的格式

一个IP分组由首部和数据部分组成。首部前一部分的长度固定,共20B,是所有IP 分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制

注意

在IP数据报首部中有三个关于长度的标记,首部长度、总长度、片偏移,基本单位分別为 4B、1B、8B(需要记住)。题目中经常会出现这几个长度之间的加减运算。另外,要熟悉IP数据报首部的各个字段的意义和功能,但不需要记忆 IP 数据报的首部,正常情况下如果需要参考首部,题目都会直接给出。第5章学到的TCP、UDP的首部也是一样的。

image.png
image.png

IP 首部的部分重要字段含义如下:

  1. 版本。指IP协议的版本,目前广泛使用的版本号为4
  2. 首部长度。占4位,可以表示的最大十进制数是15。以32 位为单位,最大值为 60B (15x4B)。最常用的首部长度是20B,此时不使用任何选项[1](即可选字段)。
  3. 总长度。占16位。指首部和数据之和的长度,单位为字节,因此数据报的最大长度为2161=65535B2^{16}-1=65535\mathrm{B}。以太网帧的最大传送单元 (MTU)为1500B,因此当一个IP数据报封装成帧时,数据报的总长度(首部加数据)一定不能超过下面的数据链路层的MTU值
  4. 标识。占16位。它是一个计数器,每产生一个数据报就加 1,并赋值给标识字段。但它并不是“序号〞(因为IP是无连接服务)。当一个数据报的长度超过网络的 MTU 时,必须分片,此时每个数据报片都复制一次标识号,以便能正确重装成原来的数据报
  5. 标志。占3位。标志字段的最低位为 MF, MF=1 表示后面还有分片,MF=0 表示最后一个分片。标志字段中间的一位是DF,只有当DF=0时才允许分片。
  6. 片偏移。占13 位。它指出较长的分组在分片后,某片在原分组中的相对位置。片偏移以8个字节为偏移单位。除最后一个分片外,每个分片的长度一定是8B 的整数倍[2]
  7. 生存时间(TTL)。占8位。数据报在网络中可通过的路由器数的最大值,标识分组在网络中的寿命,以确保分组不会永远在网络中循环。路由器在转发分组前,先把 TTL 减1。若TTL 被减为0,则该分组必须丢弃。
  8. 协议。占8位。指出此分组携带的数据使用何种协议,即分组的数据部分应上交给哪个协议进行处理,如TCP、UDP 等。其中值为5表示 TCP,值为 17 表示 UDP。
  9. 首部校验和。占16位。首部校验和只校验分组的首部,而不校验数据部分
  10. 源地址字段。占4B,标识发送方的IP地址。
  11. 目的地址字段。占4B,标识接收方的IP地址。

IP数据报分片

  • 一个链路层数据报能承载的最大数据量称为最大传送单元(MTU)
  • 当IP 数据报的总长度大于链路MTU 时,就需要将IP数据报中的数据分装在多个较小的 IP 数据报中,这些较小的数据报称为
  • 片在目的地的网络层重新组装。目的主机使用 IP首部中的标识、标志和片偏移字段来完成对片的重组
  • 当一个路由器需要将一个数据报分片时,形成的每个数据报(即片)都具有原始数据报的标识号
  • 目的主机在对片进行重组时,使用片偏移字段来确定片应放在原始IP数据报的哪个位置。
IP 分片的例子
IP 分片的例子

IPv4地址与 NAT

IPv4 地址

image.png
image.png

在各类IP 地址中,有些IP地址具有特殊用途,不用做主机的IP 地址:

  1. 主机号全为0表示本网络本身,如 202.98.174.0
  2. 主机号全为1表示本网络的广播地址,又称直接广播地址,如 202.98.174.255
  3. 127.x.x.x保留为环回自检 (Loopback Test)地址,此地址表示任意主机本身
  4. 32位全为0,即0.0.0.0 表示本网络上的本主机
  5. 32位全为 1,即255.255.255.255 表示整个 TCP/IP 网络的广播地址,又称受限广播地址[3]
image.png
image.png

A类地址可用的网络数为2722^7-2,减2的原因是:第一,网络号字段全为0的卫地址是保留地址,意思是“本网络”;第二,网络号为 127 的IP地址是环回自检地址

网络地址转换 (NAT)

网络地址转换(NAT)是指通过将专用网络地址(如Intranet)转换为公用地址(如Internet), 从而对外隐藏内部管理的 IP 地址。

此外,为了网络安全,划出了部分 IP 地址为私有IP地址。私有IP地址只用于 LAN,不用于 WAN连接

私有IP地址网段如下:

  1. A类:1个A类网段,即10.0.0.0~10.255.255.255。
  2. B类:16个B 类网段,即172.16.0.0~172.31.255.255。
  3. C类:256个C 类网段,即 192.168.0.0~192.168.255.255。

在因特网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发

image.png
image.png

注意

普通路由器在转发 IP 数据报时,不改变其源IP地址和目的IP地址。而NAT 路由器在转发IP数据报时,一定要更换其IP地址(转换源IP地址或目的IP地址)。普通路由器仅工作在网络层,而NAT 路由器转发数据报时需要查看和转换传输层的端口号。

相关信息

MAC 地址会随着信息被发往不同的网络而改变,但IP地址当且仅当信息在私人网络中传递时才会改变

子网划分与子网掩码、CIDR

子网划分

RFC950规定,对分类的IPv4进行子网划分,子网号不能为全0或全1,现在全1和全0的子网号也可使用,但一定要谨慎使用,要弄清你的路由器所用的路由选择软件是否支持全0或全1的子网号

注意

子网之间的数据传输需要通过路由器进行

无分类编址CIDR

网络层转发分组的过裎

  1. 从收到的IP 分组的首部提取目的主机的IP地址D(即目的地址)。
  2. 若查找到特定主机路由(目的地址为D),就按照这条路由的下一跳转发分组;否则从转发表中的下一条(即按前缀长度的顺序)开始检查,执行步骤3)。
  3. 将这一行的子网掩码与目的地址 D进行按位与运算。若运算结果与本行的前缀匹配,则查找结束,按照“下一跳〞指出的进行处理(或者直接交付本网络上的目的主机,或通过指定接口发送到下一跳路由器)。否则,若转发表还有下一行,则对下一行进行检查, 重新执行步骤3)。否则,执行步骤4)。
  4. 若转发表中有一个默认路由,则把分组传送给默认路由;否则,报告转发分组出错。

值得注意的是,转发表(或路由表)并未给分组指明到某个网络的完整路径(即先经过哪个路由器,然再经过哪个路由器等)。转发表指出,到某个网络应当先到某个路由器(即下一跳路由器),在到达下一跳路由器后,再继续查找其转发表,知道下一步应当到哪个路由器。这样一步一步地查找下去,直到最后到达目的网络。

注意

得到下一跳路由器的 IP 地址后,并不是直接将该地址填入待发送的数据报,而是将该IP地址转换成 MAC 地址(通过 ARP),将此 MAC 地址放到MAC 帧首部中,然后根据这个MAC地址找到下一跳路由器。在不同网络中传送时,MAC 帧中的源地址和目的地址要发生变化, 但是网桥在转发帧时,不改变帧的源地址,请注意区分。

提示

转发表中还可以增加两个特殊的路由

  1. 主机路由:对特定目的主机的P地址专门指明一个路由,以方便网络管理员控制和测试网络。若特定主机的P地址是a.b.c.d,则转发表中对应项的目的网络是a.b.c.d/32。/32表示的子网掩码没有意义,但这个特殊的前缀可以用在转发表中。
  2. 默认路由:用特殊前缀0.0.0.0/0表示默认路由,全0掩码和任何目的地址进行按位与运算,结果必然为全0,即必然和转发表中的0.0.0.0/0相匹配。只要目的网络是其他网络(不在转发表中),就一律选择默认路由。

ARP、DHCP 与 ICMP

1.IP地址与硬件地址

IP地址是网络层使用的地址,它是分层次等级的。硬件地址是数据链路层使用的地址 (MAC 地址),它是平面式的。在网络层及网络层之上使用IP地址,IP地址放在IP 数据报的首部,而MAC 地址放在MAC 帧的首部。通过数据封装,把 IP 数据报分组封装为 MAC 帧后,数据链路层看不见数据报分组中的IP地址。

由于路由器的隔离,IP 网络中无法通过广播 MAC 地址来完成跨网络的寻址,因此在网络层只使用 IP 地址来完成寻址

IP 分组通过多次路由转发到达目标网络后,改为在目标 LAN 中通过数据链路层的 MAC 地址以广播方式寻址。这样可以提高路由选择的效率。

注意

  1. 在IP层抽象的互联网上只能看到IP数据报。
  2. 虽然IP数据报首部中有源IP地址,但路由器只根据目的IP地址进行转发。
  3. 在局域网的链路层,只能看见 MAC 顿。IP数据报被封装在 MAC 帧中,通过路由器转发IP分组时,IP分组在每个网络中都被路由器解封装和重新封装,其 MAC 帧首部中的源地址和目的地址会不断改变。这也决定了无法使用 MAC 地址跨网络通信。
  4. 尽管互连在一起的网络的硬件地址体系各不相同,但IP 层抽象的互联网却屏蔽了下层这些复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机与主机或路由器之间的通信
  5. 路由器由于互连多个网络,因此它不仅有多个IP地址,也有多个硬件地址

地址解析协议 (ARP)

完成 IP 地址到 MAC 地址的映射,这就是地址解析协议 (Address Resolution Protocol, ARP)。
每台主机都设有一个ARP高速缓存,用来存放本局域网上各主机和路由器的IP地址到MAC地址的映射表,称ARP表。使用ARP来动态维护此ARP表。

ARP 由于 “看到了”IP地址,所以它工作在网络层,而NAT 路由器由于 “看到了” 端口,所以它工作在传输层

注意

ARP 用于解决==同一个局域网上的主机或路由器的 IP地址和硬件地址的映射问题==。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做,尽管 ARP 请求分组是广播发送的,但ARP 响应分组是普通的单播,即从一个源地址发送到一个目的地址。

动态主机配置协议(DHCP)

动态主机配置协议 (Dynamic Host Configuration Protocol, DHCP)常用于给主机动态地分配IP 地址,它提供了即插即用的联网机制,这种机制允许一台计算机加入新的网络和获取IP 地址而不用手工参与。DHCP 是应用层协议,它是基于 UDP 的。

DHCP 的客户端和服务器端

  1. 需要通过广播方式来进行交互,原因是在DHCP 执行初期,客户端不知道服务器端的 IP 地址,而在执行中间,客户端并末被分配IP地址
  2. 采用 UDP 而不采用TCP 的原因也很明显:TCP 需要建立连接,如果连对方的IP 地址都不知道,那么更不可能通过双方的套接字建立连接。

DHCP 是应用层协议,因为它是通过客户/服务器模式工作的,DHCP 客户端向 DHCP 服务器请求服务,而其他层次的协议是没有这两种工作方式的。

网际控制报文协议(ICMP)

在网络层使用了网际控制报文协议 (Internet Control Message Protocol, ICMP)来让主机或路由器报告差错和异常情况

ICMP 是网络层协议,报文的种类有两种,即ICMP 差错报告报文ICMP 询问报文

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

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

常见应用

分组网间探测 PING (用来测试两台主机之间的连通性)和 Traceroute,PING 使用了 ICMP 送请求和回答报文,Traceroute (Tracert)使用了 ICMP 时间超过报文。

注意

PING 工作在应用层,它直接使用网络层的ICMP,而未使用传输层的TCP 或UDP。Traceroute/Tracert 工作在网络层。

常见的对应关系

二进制十进制
10000000128
11000000192
11100000224
11110000240
11111000248
11111100252
11111110254
11111111255

NAT

概念

网络地址转换(NAT)是指通过将专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址

私有地址

私有地址网段如下:
A类:1个A类网段 10.0.0.0~10.255.255.255
B类:16个B类网段 172.16.0.0~172.31.255.255
C类:256个C类网段 192.168.0.0~192.168.255.255

NAT路由器

普通路由器在转发IP数据报的时候,不改变其源IP地址和目的IP地址,但是NAT路由器一定要更换其IP地址(转换源IP地址或目的IP地址),普通路由器仅工作在网络层,而NAT路由器转发数据报时需要查看和转换传输层的端口


  1. 观察格式图可知,表格中每一行都占 32 位,即4字节,固定部分有 5 行,对应的就是 20 字节 ↩︎

  2. 有效数据载荷是8的倍数 ↩︎

  3. 实际使用时,由于路由器对广播域的隔离,255.255.255.255 等效为本网络的广播地址 ↩︎