本篇笔记课程来源:王道计算机考研 计算机网络
【计算机网络】第四章:网络层(上)
一、网络层的功能1. 基本概要2. 功能总览
二、IPv41. IPv4 数据报2. IPv4 地址3. 子网划分与子网掩码Ⅰ. 基本概念Ⅱ. 默认设置Ⅲ. 主机发送 IP 数据报的过程Ⅳ. 路由器转发 IP 数据报的过程
4. 无分类编址 CIDR5. 路由聚合6. 网络地址转换 NAT7. 地址解析协议 ARP8. 动态主机配置协议 DHCP9. 网际控制报文协议 ICMP
三、IPv6 地址
一、网络层的功能
1. 基本概要
网络层为传输层提供服务,将传输层的数据帧封装成 “IP 数据报”。网络中的路由器根据 IP 数据报首部中的源 IP 地址、目的 IP 地址进行 “分组转发”。因此,网络层实现了 “主机到主机” 的传输数据链路层为网络层提供服务,将网络层的 IP 数据报(分组)封装成帧,传输给下一个相邻结点(实现相邻节点的传输)
2. 功能总览
异构网络互联
异构:每个网络的拓扑结构不同、物理层与数据链路层的实现不同、主机类型也各不相同
接入网络的每台主机至少拥有一个 IP 地址通常,路由器的每个接口都需要分配一个 IP 地址(最新技术标准已经取消了这个强制要求) 实现互联的设备:路由器(Router),在 TCP/IP 文献中,路由器也称为网关(Gateway) 路由与转发
路由:
各个路由器之间相互配合,规划 IP 数据报(分组)的最佳转发路径各个路由器需要运行 “路由协议”,最终生成各自的 “路由表” 转发:
一台路由器,根据自己的 “转发表”,将收到的 IP 数据报从合适的接口转发出去转发表是精简版的路由表,更精简的数据结构有助于快速检索 拥塞控制
拥塞
原因:网络上出现过量分组,超负荷,引起网络性能下降现象:网络上的分组数增加,但吞吐量反而降低
比如路上车多了,就会堵车
拥塞控制方法:
开环控制(静态的方法):部署网络时,就提前设计好预防拥塞的方法,一旦网络系统开始运行,就不再修改闭环控制(动态的方法):动态监视网络状态,及时发现哪里发生拥塞,并将拥塞信息传递给相关路由器(如:通过 ICMP),相关路由器及时调整 “路由表”
二、IPv4
IP 协议(Internet Protocol,网际协议)是互联网的核心。ARP 协议用于查询同一个网络中的【主机 IP 地址,MAC 地址】之间的映射关系ICMP 协议用于网络层实体之间相互通知 “异常事件”IGMP 协议用于实现 IP 组播
1. IPv4 数据报
IP 数据报也称为 IP 分组,格式如下: 首部包括:固定部分(20 B),可变部分(0 ~ 40 B)版本:占 4 bit,用于区分网络层使用的 IP 协议版本(v4、v6)首部长度:占 4 bit,表示 IP 数据报首部占多少字节,以 ×4B 为单位区分服务:占 8 bit,不用管一般用不到总长度:占 16 bit,表示 IP 数据报总共占多少字节(涵盖首部、数据部分),以 ×1B 为单位标识:占 16 bit,由 IP 数据报的 “源主机” 生成,通常是自增序列标志:占 3 bit
最低位 MF(More Fragment):MF=1 表示后面还有分片,MF=0 表示这是最后一个分片次低位 DF(Don‘t Fragment):DF=1 表示不允许被分片,DF=0 表示允许被分片最高位不管 片偏移:占 13 bit,表示数据部分在 “被分片前” 的位置,以 ×8B 为单位生存时间:占 8 bit,常记为 TTL
是数据报在网络中可通过的路由器数的最大值TTL 的初始值通常由源主机设置;每经过一个路由器,路由器就将 TTL 减 1,如果 TTL 减到 0,就直接丢弃分组,并向源主机发送 ICMP 报文 协议:占 8 bit,用于说明当前数据报为哪个协议服务(TCP 是 6,UDP 是 17)首部校验和:占 16 bit,
每个路由器仅校验首部,而不校验数据部分如果该字段设为全 0,表示不用校验校验和的计算方法与 UDP 相同 源地址、目的地址:各占 32 bit,IPv4 地址,字面意思。最大传送单元(MTU):一个数据链路层数据帧能承载的最大数据量。以太网的 MTU = 1500 B。分片问题
实际传输过程中,“数据部分” 的长度受下一段链路的最短 / 最长帧长限制,如果一个 IP 数据报的总长度超出了下一段链路的 MTU,就需要将 “数据部分” 分片。 每个分片都是一个可以被单独转发的 IP 数据报,都包含首部IP 数据报的 “分片” 可能在源主机、或任何一个路由器中发生只有目的主机才会对分片进行 “重组”各分片有可能乱序到达目的主机由于首部的 “片偏移” 字段是以 ×8B 为单位,因此,除了最后一个分片外,其他每个分片的数据部分必须是 8B 的整数倍
2. IPv4 地址
IPv4 协议发明于 1981 年。地址位数为 32 位(232 ≈ 42亿),IP 地址资源由 ICANN(互联网名字和数字分配机构)进行分配。 IP 地址的两级结构:<网络号, 主机号>
IP 地址有 32 bit,8 bit 一组,分为 4 组,每组用十进制表示最初的 IP 地址分配要求每台主机、每个路由器接口被分配的 IP 地址都是全球唯一的从属于同一个网络的所有主机、路由器接口的 IP 地址 “网络号” 都相同网络号不定长,可根据前几个比特判断类别(A、B、C、D、E),从而推测出网络号占几位 路由器和路由器连接的接口可以不分配 IP 地址,但路由器和其他节点连接的接口必须分配 IP 地址当一台新主机接入网络时,需要给它分配一个 IP 地址,并配置 “默认网关”(网关就是路由器)特殊的 IP 地址
这些特殊地址 不能 指派给网络中的任何一台主机或路由器 “私用”如下表中,当网络号确定,主机号全 0、全 1 不可被私用。说明,如果一个网络中,主机号占
N
N
N bit,那么这个网络中,最多支持
2
N
−
2
2^N-2
2N−2 台主机和路由器下表中已被确定的网络号或主机号记为
Y
Y
Y
网络号主机号作为分组 源地址?作为分组 目的地址?代表的含义
Y
Y
Y全 0❌❌表示整个网络本身(只能用于路由表、转发表)
Y
Y
Y全 1❌✅向网络号为
Y
Y
Y 的网络广播 IP 分组0
Y
Y
Y✅❌表示本网络中主机号为
Y
Y
Y 的主机全 0全 0✅❌本网络上的主机(会在 DHCP 协议中使用)全 1全 1❌✅向本网络广播 IP 分组127非全 0 或非全 1 的任何数✅✅环回自检地址。表示一台主机本身,用于本地软件环回测试
3. 子网划分与子网掩码
Ⅰ. 基本概念
子网划分
是初代 IP 地址的升级版,子网划分前是两级结构,子网划分后是三级结构:<网络号,子网号,主机号>原理:假设有一个 IP 地址段,原网络号不变(不能动),原主机号占
n
n
n bit,那么可以将前
k
k
k bit 划出来作为子网号,用剩余的
n
−
k
n-k
n−k bit 作为主机号,这样就能划分出
2
k
2^k
2k 个子网(每个子网包含的 IP 地址块大小相等)每个子网中,主机号不能分配为全 0 / 全 1(子网本身和子网广播地址) 子网掩码
子网掩码为 32 bit,子网地址(网络号 + 子网号)有
n
n
n 位,子网掩码的高
n
n
n 位就为 1,低
32
−
n
32-n
32−n 位为 0用子网掩码、IP 地址 逐位与,算出 <网络号,子网号>(可合称为 “网络前缀”)。只有网络前缀相同的 IP 地址,才归属于同一个网络(或子网)如果一个网络内部进行了子网划分,那么这个网络中的每台主机、每个路由器接口都需要配置 IP 地址、默认网关、子网掩码如果一台路由器支持子网划分技术,那么在它的转发表中,需要包含 <目的网络号,子网掩码,转发接口>子网掩码的 CIDR 记法:比如 255.255.255.0 有 24 个 1,就记为 IP/24
Ⅱ. 默认设置
默认子网掩码
如果一个传统网络(A、B、C 类)内部没有进行子网划分,那么可以将对应此网络的转发表项设置为 “默认子网掩码”A 类默认 255.0.0.0、B 类默认 255.255.0.0、C 类默认 255.255.255.0 默认路由
默认路由(默认转发表项)设置全 0 0.0.0.0:<目的网络号全 0,子网掩码全 0>在路由转发表中,如果所有表项都不匹配,那么将从 “默认路由” 转发出去
Ⅲ. 主机发送 IP 数据报的过程
判断目的主机和本机是否属于同一网络
检查本机 IP 地址和目的 IP 地址的网络前缀是否相同(需要用本机配置的子网掩码 “逐位与”)若网络前缀相同,说明目的主机和本机属于同一个网络若网络前缀不同,说明不属于同一个网络 将 IP 数据报封装成 MAC 帧并发送到链路上
如果目的主机与本机属于同一个网络,就通过 ARP 协议找到目的主机的 MAC 地址,再将 IP 数据报封装成帧,并将帧发送给目的主机如果目的主机与本机不属于同一个网络,就通过 ARP 协议找到默认网关的 MAC 地址,再将 IP 数据报封装成帧,并将帧发送给默认网关
Ⅳ. 路由器转发 IP 数据报的过程
路由器的某个接口收到一个 IP 数据报对 IP 数据报首部进行校验,并从中找到目的 IP 地址查 “转发表”
转发表的表项包含 <目的网络号,子网掩码,转发接口>检查目的 IP 地址与每个表项能否匹配(将目的 IP 地址、子网掩码 “逐位与”,匹配表项中的目的网络号)至少 “默认路由” 表项一定是可以匹配成功的(兜底) 转发
根据查转发表的结构,将 IP 数据报从匹配的接口转发出去如果匹配的 “转发接口” 和该 IP 数据报的入口相同,就不用再把 IP 数据报转发回去
4. 无分类编址 CIDR
无分类编址(Classless Inter-Domain Routing,CIDR),即无类别域间路由选择。
传统 IP 地址分配方案分配不灵活,利用率低,为缓解 IP 地址耗尽,于 1993 年推出 CIDRCIDR 取消了 IP 地址传统的 A/B/C/D/E 分类,IP 地址块分配更灵活,利用率更高,一定程度上缓解了 IP 地址耗尽CIDR 的 IP 地址 = <网络前缀,主机号>,其中网络前缀不定长CIDR 记法:192.168.1.1/24,表示在这个 IP 地址中,网络前缀占 24 位,主机号占 8 位 定长子网划分:与传统的子网划分技术同理
在一个 CIDR 地址块中,把主机号前
k
k
k bit 抠出来作为定长子网号,这样就能划分出
2
k
2^k
2k 个子网(每个子网包含的 IP 地址快大小相等)缺点:每个子网都一样大,不够灵活,IP 地址利用率低,浪费有限的 IP 地址资源 变长子网划分
在一个 CIDR 地址块中,划分子网时,子网号长度不固定(每个子网包含的 IP 地址块大小不同)Tips:点对点链路是一个最小的子网,至少需要保留 2 bit 作为主机号(2 个接口 + 全 1 + 全 0 = 4 个 IP)优点:子网划分更灵活,且方便地址资源的分层级管理
不管是定长还是变长,在每个子网中,主机号全 0、全 1 的 IP 地址不能分配给特定节点私用。
变长子网划分技巧:利用类似于 从根到叶构造二叉哈夫曼树
原始 CIDR 地址块作为根节点(假设可以自由分配的主机号占
h
h
h bit)每个分支节点必须同时拥有左右结点,左 0、右 1(反过来也行)每个叶子节点对应一个子网,根据根节点到达叶子节点的路径来分析子网对应的 IP 地址块范围整棵树的高度不能超过
h
−
1
h-1
h−1(因为即便最小的子网叶至少要保留
2
2
2 bit 主机号)
5. 路由聚合
路由聚合:对于一个路由转发表,如果几条路由表项的转发接口相同,部分网络前缀相同,那么可以将这几条路由表项聚合为一条。这种地址的聚合称为路由聚合,也称构成超网。路由聚合与 CIDR 搭配使用:
采用 CIDR 技术后,路由器转发一个 IP 数据报在查转发表时,由于 “路由聚合”,一个 IP 地址在转发表中可能会匹配多个表项,此时应使用最长前缀匹配原则 优点:可以减少路由表的大小,表更小,查询更快缺点:可能会引入额外的无效地址
6. 网络地址转换 NAT
网络地址转换(Network Address Translation,NAT)
传输层的端口号
IP 地址 + 端口号确定一个特定的进程网络层实现了 “主机到主机” 的通信。网络层在 IP 数据报的首部,指明源 IP 地址、目的 IP 地址传输层实现了 “端到端”(进程到进程)的通信,传输层在 TCP(或 UDP)报文段的首部,指明源端口、目的端口 私有 IP 地址(内网 IP)
只允许分配给局域网内部的节点,不允许分配给互联网上的节点每个局域网内部都可以自行分配这些私有 IP 地址私有 IP 地址是可复用的,只要求局域网内唯一,不要求全球唯一
常用私有 IP:
10.0.0.0 ~ 10.255.255.255172.16.0.0 ~ 172.31.255.255192.168.0.0 ~ 192.168.255.255
公网 IP 地址(外网 IP / 全球 IP 地址)
通常由 ISP 提供,全球唯一公网 IP 是一个局域网与外界通信时所需使用的 IP 地址 NAT 路由器
作用:转发 IP 数据报时,进行内网 IP、外网 IP 的相互转换NAT 表:记录地址转换关系 <内网 IP:端口号> ⇔ <外网 IP:端口号>一个 IP 数据报
从内网转发到外网,会更改源 IP 地址、源端口号从外网转发到内网,会更改目的 IP 地址、目的端口号 NAT 路由器包含传输层的功能(因为端口号是传输层的概念),普通路由器仅包含网络层及以下的功能
7. 地址解析协议 ARP
MAC 地址:
总共 48 bit,是网络适配器出厂时分配好的,全球唯一一台主机至少有一个网络适配器(网线插口背后的芯片),因此主机至少有一个 MAC 地址一台路由器有多个转发接口,每个接口背后都是一个网络适配器,因此路由器有多个 MAC 地址 以太网 MAC 帧:
在类型的位置,0x0800 表示是 IPv4 的 PDU,0x0806 表示是 ARP 的 PDU ARP 协议的作用:在一个局域网内部,可以通过 ARP 协议查询到一个 IP 地址对应的 MAC 地址ARP 表(ARP 缓存):
每台主机、每台路由器都有自己的 ARP 表ARP 表是一个数据结构,用于记录 <主机 IP 地址,MAC 地址> 之间的映射关系需要定期更新 ARP 表项 ARP 请求分组:
ARP 请求分组封装进 MAC 帧(广播帧),帧目的地址全 1,源地址为请求发送方 MAC 地址ARP 请求分组内容:
我是谁?——请求方的 IP 地址、MAC 地址我想找谁?—— 响应方的 IP 地址 ARP 响应分组:
ARP 响应分组封装进 MAC 帧(单播帧),目的地址是请求方 MAC 地址,源地址是响应方 MAC 地址ARP 响应分组内容:响应方的 IP 地址、MAC 地址 ARP 分组格式,共 28 B
8. 动态主机配置协议 DHCP
动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)是应用层协议,使用 UDP 提供的服务,给网络层所需要的参数进行初始化DHCP 的作用:给刚接入网络的主机动态分配 IP 地址、配置默认网关、子网掩码等网络相关的参数DHCP 使用客户 / 服务器模型(C/S)
客户 UDP 端口号为 68,服务器 UDP 端口为 67DHCP 客户:新接入网络的主机(希望获得 IP 地址等配置)DHCP 服务器:负责分配 IP 地址的主机,管理一系列 IP 地址池。在家庭网络中,通常由家庭路由器兼职 “DHCP 服务器”在一个大型网络中可以有多台 DHCP 服务器
DHCP 协议步骤:
客户 → 服务器:DHCP 发现报文
携带信息:客户主机的 MAC 地址(还可以提出对 IP 地址租用期的要求)网络层:源 IP 地址为 0.0.0.0,目的 IP 地址为 255.255.255.255(广播 IP 数据报)链路层:源 MAC为客户的 MAC 地址,目的 MAC 为全 1(广播帧) 服务器 → 客户:DHCP 提供报文
携带信息:给客户分配的 IP 地址、租用期、子网掩码、默认网关网络层:源 IP 地址为 DHCP 服务器的 IP 地址,目的 IP 为 255.255.255.255(广播 IP 数据报)链路层:源 MAC 为服务器的 MAC 地址,目的 MAC 为客户的 MAC 地址(单播帧) 客户 → 服务器:DHCP 请求报文
携带信息:客户机确认要使用的 IP 地址网络层:源 IP 地址为 0.0.0.0,目的 IP 地址为 255.255.255.255(广播 IP 数据报)链路层:源 MAC为客户的 MAC 地址,目的 MAC 为全 1(广播帧) 服务器 → 客户:DHCP 确认报文
携带信息:与报文 2 类似(图片参考报文 2)网络层:源 IP 地址为 DHCP 服务器的 IP 地址,目的 IP 为 255.255.255.255(广播 IP 数据报)链路层:源 MAC 为服务器的 MAC 地址,目的 MAC 为客户的 MAC 地址(单播帧)
9. 网际控制报文协议 ICMP
网际控制报文协议(Internet Control Message Protocol,ICMP)属于网络层,ICMP 报文封装在 IP 数据报中,IP 协议为 ICMP 协议提供服务。ICMP 可以让主机或路由器互相报告网络中发生的差错和异常情况ICMP 报文的常见类型:
差错报告报文:
终点不可达:
路由器告诉发送方:“目的 IP 地址不可到达”(道路不通)目的主机告诉发送方:“目的端口号不存在,我这边没有对应进程” 时间超过
路由器告诉发送方:“你的 IP 数据报到我这里 TTL = 0,被我丢了”(路程太远)目的主机告诉发送方:“你的 IP 数据报被分片了,规定时间内没到齐,我已全部丢弃” 参数问题
告诉发送方:“你的 IP 数据报首部参数不合法,或首部校验出错” 改变路由(重定向)
路由器告诉发送方:“对于这个目的网络,下次你让另一台路由器帮你转发,路径会更短” 源点抑制(2012年后已废弃):告诉发送方:“网络发送拥塞,丢包了,求求你发慢点” 询问报文:
回送请求(Echo Request)和回送回答(Echo Replay):比如 ping 命令,用于询问目的主机是否在线时间戳请求(Timestamp Request)和时间戳回答(Timestamp Reply):比如 traceroute/tracert、自动设置时间,请求和回答都是时间戳。 不必反馈 ICMP 差错报文的情况
若携带 ICMP 差错报告报文的 IP 数据报出错,不再反馈 ICMP 差错若 IP 数据报被分片,则无论几个分片出错,都只反馈一次 ICMP 差错若 IP 数据报的目的地址为多播地址,不反馈 ICMP 差错若 IP 数据报的源地址为特殊地址(如 127.x.x.x、0.0.0.0),则即便发生 IP 数据报异常也不反馈 ICMP 差错
三、IPv6 地址
IPv6 于 1998 年诞生,地址有 128 位,能彻底解决 IP 地址不够用的问题。IPv6 格式:
一般的未压缩格式:相较于 IPv4 的点分十进制记法,IPv6 采用冒号十六进制记法:16 位一段,记录为十六进制,段间以冒号分隔
2001:0db8:85a3:0000:0000:8a2e:0370:7334
第一种压缩记法:去除每个分段的前导零
2001:db8:85a3:0:0:8a2e:370:7334
第二种压缩记法:用双冒号 :: 替代连续出现的多个 0,一个地址只能出现一次双冒号,否则会产生歧义
2001:db8:85a3::8a2e:370:7334
IPv6 地址资源分配:
n
n
n 位前缀,
128
−
n
128-n
128−n 位接口标识符支持无分类编址 CIDR,因此各层级可以灵活划分子网IPv6 因为地址空间很大,所以可以划分为更多的层次IPv6 支持即插即用(IP 地址自动配置),通常以主机自身的 MAC 地址作为接口标识符可以不使用 DHCP,如果 IP 地址安全性要求较高也支持使用 DHCP 统一管理 IPv6 地址 IPv6 地址的分类:
地址类型二进制前缀说明未指明地址00...0(128 位),可记为 ::/128表示 “无地址”,类似 IPv4 的 0.0.0.0环回地址00...01(128 位),可记为 ::1/128类似 IPv4 的 127.0.0.1多播地址11111111(8 位),可记为 FF00::/8发送到一组主机本地链路单播地址1111111010(10 位),可记为 FE80::/10局域网内通信,不会被路由器转发全球单播地址除上诉四种外的其他所有 IPv6 地址 三类 IPv6 目的地址:
单播(unicast):传统的点对点通信多播(multicast):一点对多点的通信,数据报发送到一组计算机中的每一台(比如:网络会议)任播(anycast):
IPv6 新增的一种类型任播的终点是一组计算机,但数据报只交付其中的一台计算机,通常是距离最近的一台计算机(比如:多个 DNS 服务器共享一个任播地址)任播地址没有固定的前缀,通常由地址管理机构预先统一分配