3.IPV4
IPv4 分组
IPv4 分组的格式
一个IP分组由首部和数据部分组成。首部前一部分的长度固定,共20B,是所有IP 分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。
注意
在IP数据报首部中有三个关于长度的标记,首部长度、总长度、片偏移,基本单位分別为 4B、1B、8B(需要记住)。题目中经常会出现这几个长度之间的加减运算。另外,要熟悉IP数据报首部的各个字段的意义和功能,但不需要记忆 IP 数据报的首部,正常情况下如果需要参考首部,题目都会直接给出。第5章学到的TCP、UDP的首部也是一样的。

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

IPv4地址与 NAT
IPv4 地址

在各类IP 地址中,有些IP地址具有特殊用途,不用做主机的IP 地址:
- 主机号全为0表示本网络本身,如 202.98.174.0
- 主机号全为1表示本网络的广播地址,又称直接广播地址,如 202.98.174.255
- 127.x.x.x保留为环回自检 (Loopback Test)地址,此地址表示任意主机本身
- 32位全为0,即0.0.0.0 表示本网络上的本主机
- 32位全为 1,即255.255.255.255 表示整个 TCP/IP 网络的广播地址,又称受限广播地址[3]

A类地址可用的网络数为,减2的原因是:第一,网络号字段全为0的卫地址是保留地址,意思是“本网络”;第二,网络号为 127 的IP地址是环回自检地址
网络地址转换 (NAT)
网络地址转换(NAT)是指通过将专用网络地址(如Intranet)转换为公用地址(如Internet), 从而对外隐藏内部管理的 IP 地址。
此外,为了网络安全,划出了部分 IP 地址为私有IP地址。私有IP地址只用于 LAN,不用于 WAN连接
私有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。
在因特网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发

注意
普通路由器在转发 IP 数据报时,不改变其源IP地址和目的IP地址。而NAT 路由器在转发IP数据报时,一定要更换其IP地址(转换源IP地址或目的IP地址)。普通路由器仅工作在网络层,而NAT 路由器转发数据报时需要查看和转换传输层的端口号。
相关信息
MAC 地址会随着信息被发往不同的网络而改变,但IP地址当且仅当信息在私人网络中传递时才会改变
子网划分与子网掩码、CIDR
子网划分
RFC950规定,对分类的IPv4进行子网划分,子网号不能为全0或全1,现在全1和全0的子网号也可使用,但一定要谨慎使用,要弄清你的路由器所用的路由选择软件是否支持全0或全1的子网号
注意
子网之间的数据传输需要通过路由器进行
无分类编址CIDR
网络层转发分组的过裎
- 从收到的IP 分组的首部提取目的主机的IP地址D(即目的地址)。
- 若查找到特定主机路由(目的地址为D),就按照这条路由的下一跳转发分组;否则从转发表中的下一条(即按前缀长度的顺序)开始检查,执行步骤3)。
- 将这一行的子网掩码与目的地址 D进行按位与运算。若运算结果与本行的前缀匹配,则查找结束,按照“下一跳〞指出的进行处理(或者直接交付本网络上的目的主机,或通过指定接口发送到下一跳路由器)。否则,若转发表还有下一行,则对下一行进行检查, 重新执行步骤3)。否则,执行步骤4)。
- 若转发表中有一个默认路由,则把分组传送给默认路由;否则,报告转发分组出错。
值得注意的是,转发表(或路由表)并未给分组指明到某个网络的完整路径(即先经过哪个路由器,然再经过哪个路由器等)。转发表指出,到某个网络应当先到某个路由器(即下一跳路由器),在到达下一跳路由器后,再继续查找其转发表,知道下一步应当到哪个路由器。这样一步一步地查找下去,直到最后到达目的网络。
注意
得到下一跳路由器的 IP 地址后,并不是直接将该地址填入待发送的数据报,而是将该IP地址转换成 MAC 地址(通过 ARP),将此 MAC 地址放到MAC 帧首部中,然后根据这个MAC地址找到下一跳路由器。在不同网络中传送时,MAC 帧中的源地址和目的地址要发生变化, 但是网桥在转发帧时,不改变帧的源地址,请注意区分。
提示
转发表中还可以增加两个特殊的路由
- 主机路由:对特定目的主机的P地址专门指明一个路由,以方便网络管理员控制和测试网络。若特定主机的P地址是a.b.c.d,则转发表中对应项的目的网络是a.b.c.d/32。/32表示的子网掩码没有意义,但这个特殊的前缀可以用在转发表中。
- 默认路由:用特殊前缀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 地址以广播方式寻址。这样可以提高路由选择的效率。
注意
- 在IP层抽象的互联网上只能看到IP数据报。
- 虽然IP数据报首部中有源IP地址,但路由器只根据目的IP地址进行转发。
- 在局域网的链路层,只能看见 MAC 顿。IP数据报被封装在 MAC 帧中,通过路由器转发IP分组时,IP分组在每个网络中都被路由器解封装和重新封装,其 MAC 帧首部中的源地址和目的地址会不断改变。这也决定了无法使用 MAC 地址跨网络通信。
- 尽管互连在一起的网络的硬件地址体系各不相同,但IP 层抽象的互联网却屏蔽了下层这些复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机与主机或路由器之间的通信。
- 路由器由于互连多个网络,因此它不仅有多个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 的客户端和服务器端
- 需要通过广播方式来进行交互,原因是在DHCP 执行初期,客户端不知道服务器端的 IP 地址,而在执行中间,客户端并末被分配IP地址
- 采用 UDP 而不采用TCP 的原因也很明显:TCP 需要建立连接,如果连对方的IP 地址都不知道,那么更不可能通过双方的套接字建立连接。
DHCP 是应用层协议,因为它是通过客户/服务器模式工作的,DHCP 客户端向 DHCP 服务器请求服务,而其他层次的协议是没有这两种工作方式的。
网际控制报文协议(ICMP)
在网络层使用了网际控制报文协议 (Internet Control Message Protocol, ICMP)来让主机或路由器报告差错和异常情况
ICMP 是网络层协议,报文的种类有两种,即ICMP 差错报告报文和 ICMP 询问报文
不应发送ICMP 差错报告报文的几种情况:
- 对ICMP 差错报告报文不再发送ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP 差错报告报文。
- 对具有组播地址的数据报都不发送ICMP 差错报告报文。
- 对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报不发送ICMP 差错报告报文。
常见应用
分组网间探测 PING (用来测试两台主机之间的连通性)和 Traceroute,PING 使用了 ICMP 送请求和回答报文,Traceroute (Tracert)使用了 ICMP 时间超过报文。
注意
PING 工作在应用层,它直接使用网络层的ICMP,而未使用传输层的TCP 或UDP。Traceroute/Tracert 工作在网络层。
常见的对应关系
| 二进制 | 十进制 |
|---|---|
| 10000000 | 128 |
| 11000000 | 192 |
| 11100000 | 224 |
| 11110000 | 240 |
| 11111000 | 248 |
| 11111100 | 252 |
| 11111110 | 254 |
| 11111111 | 255 |
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路由器转发数据报时需要查看和转换传输层的端口
