在数据链路层之上,是网络层。网络层提供了独立于传输网络并且全网络统一的地址,即 IP 地址,还提供了独立于传输网络并且用 IP 地址表示发送端和接收端的分组,即 IP 分组。
IP地址
IP 地址分为 IPV4 和 IPV6。IPV4 是用 32 位二进制数表示的 IP 地址,而 IPV6 使用 128 位二进制数表示的 IP 地址。
以下使用的 IP 地址均是现流行的 <b>IPV4</b>。
<br />
IP 地址有两种编址方式,一种是分类编址,另一种是无分类编址。
分类编址:
分类编址将 IP 地址分为 ABCDE 五类地址,如下:
- ABC 这三类地址称为单播地址,包括网络号和主机号两部分
- 主机号全为 0 表示网络地址,比如 192.1.1.0 是一个 C 类的网络地址
- 主机号全为 1 表示广播地址,比如 192.1.1.255 是一个 C 类的广播地址
- 32 位全为 1 表示受限广播地址(限于发送终端所在网络)
- 0.0.0.0 表示 IP 地址无法确定,终端没有分配 IP 地址前可以作为 IP 分组的源地址
- 127.x.x.x 是回送测试地址
- 224.0.0.1 表示网络中所有支持组播的终端和路由器
- 224.0.0.2 表示网络中所有支持组播的路由器
- 224.0.0.9 表示网络中所有运行 RIP 进程的路由器
无分类编址
由于在分类编址中存在浪费 IP 地址、无法有效精简路由项和 C 类网络地址使用率较低的问题,人们提出了<b>无分类编址</b>。
无分类编址通过<b>子网掩码</b>指明 IP 地址中作为网络号的位数,如 5.1.1.2/255.0.0.0 或 5.1.1.2/8 表示前 8 个二进制数为网络号,剩下的 24 位为主机号。
IP分组
- 版本:4 位。IPV4 的版本号为 4,即 0100,IPV6 的版本号为 6,即 0110
- 首部长度:4 位,以 32 位字即 4 个字节为单位。该字段的最小值为 5,用于没有可选项的情况
- 服务类型:8 位。 用于指定 IP 分组的优先级、延迟、吞吐率和可靠性要求等要求的组合。前三位表示优先级,第四位表示时延,第五位为吞吐率,第六位为可靠性,剩下两位为保留位
- 总长度:16 位,以字节为单位。表示包括首部和数据的 IP 分组的长度,最大值为 65535
- 标识:16位。用于标识属于同一 IP 分组的数据片,属于同一 IP 分组的数据片该字段值相同
- 标志: 3 位。分别为 DF、MF 和保留位。DF = 1 表示不允许分片, MF = 0 表示该片为最后一片
- 片偏移:13 位,以 8 个字节为单位。表示当前数据片在原始 IP 分组中的位置
- 生存时间:8 位。用于限制 IP 分组在网络中的存在时间,由终端设定
- 协议:8 位。表示数据所属的高层协议类型
- 首部校验和:16 位。对首部用检验和算法计算出的检错码,没每经过一个路由器计算一次
- 源地址和目的地址:32 位。表示源终端和目的终端的 IP 地址
- 可选项:包括 保密、严格的源站选路、不严格的源站选路、记录路由和时间戳
IP over 以太网
基于以太网的 IP 的关键是如何根据终端的 IP 地址获得 MAC 地址,这就要用到 <b>ARP(Address Resolution Protocol) 协议</b>
工作流程:
假设终端 A 需要通过终端 B 的 IP 地址获得终端 B 的 MAC 地址
- 终端 A 发送以下格式的广播帧:
网络中所有终端都接收到请求帧,所有终端都根据给出的 IP 地址确定自己是否为目的终端
只有终端 B 回复 终端 A,回复帧的格式如下:
Internet 控制报文协议
Internet 控制报文协议 (Internet Control Message Protocol,ICMP)分为<b>差错报告报文</b>和<b>询问报文</b>
差错报告报文:
- 终点不可达:
网络不可达
主机不可达
协议不可达
端口不可达
需要分片但 DF 位置 1
源路由失败
- 源站抑制:
当路由器或主机由于拥塞而丢弃IP分组时,就向IP分组的发送终端发送源站抑制报文,要求IP分组的发送终端降低发送速率。
- 超时:
当路由器接收到生存时间为零的IP分组
接收终端在规定时间内不能接收到分片某个IP分组后产生的全部数据片
- 参数问题:
当路由器或目的终端接收到首部字段有错的IP分组,且已无法再继续转发该IP分组
- 改变路由:
当路由器发现分组接收到的端口和将要转发出去的端口相同时,可以要求发送该分组的终端改变路由
#######询问报文:
- 回送请求和响应:
路由器或主机通过回送请求报文向一个特定设备发出询问
接收到该报文的设备(主机或路由器)必须向发送回送请求报文的源设备回答一个回送响应报文
- 时间戳请求和响应:
时间戳请求报文用于向某个目的设备询问当前的日期和时间
时间戳响应报文用于回送接收请求报文的日期和时间及发送响应报文的日期和时间
- 地址掩码请求和响应:
主机通过子网掩码请求和响应来获知所在网络的子网掩码
- 路由器询问和通告:
主机通过广播路由器询问报文查询网络内路由器的工作状态
接收到路由器询问报文的路由器通过广播路由器通告报文来通告其路由信息