34网络层
4.1 网络层基本概念
网络层的传输单位为分组,也叫IP数据报
网络层实现了主机到主机的传输
- 网络中的路由器根据IP数据报首部中的源IP地址、目的IP地址进行分组转发
IP地址:
- 网络层中标识不同主机的地址,默认指ipv4,ipv4为32bit,ipv6为64bit
- 对于ipv4,通常以8bit为一组,并且本组按照十进制表示,并用点进行分割
- 因此每组的合法范围为0~255,如59.175.49.153
- 接入网络的每台主机至少拥有一个ip地址
- 通常,路由器的每个接口都需要分配一个ip地址(最新技术标准中取消了该强制要求)
4.1.1 网络层功能
异构网络互联
- 异构:每个网路的拓扑结构、物理层与链路层的实现不同,主机类型也各不相同
- 连接异构网络的重要设备是路由器router
在TCP/IP文献中,路由器也称为网关Gateway
路由与转发
- 路由:
- 各个路由器之间相互配合,规划IP数据包/分组的最佳转发路径
- 各个路由器需要运行路由协议,最终生成各自的路由表
- 转发:
- 一台路由器,根据自己的转发表,将收到的ip数据包从何时的接口转发出去
- 转发表相当于精简版的路由表,更利于快速检索
拥塞控制
- 拥塞:
- 拥塞状态下,网络上分组数增加,但吞吐量反而下降(来不及处理)
- 原因:网络上出现过量分组,超负荷,导致网络性能下降
- 拥塞控制方法:
- 开环控制:静态
- 在部署网络时,就提前设计好预防拥塞的方法,一旦网络系统开始运行,就不再修改
- 闭环控制:动态
- 动态监视网络状态,及时发现哪里发生拥塞,并将拥塞信息传递给相关路由器,如通过ICMP报文
- 相关路由器及时调整路由表,避免进一步加剧拥塞
- 开环控制:静态
4.1.2 网络层协议
IP协议,Internet Protocol:
- 也叫网络协议,是互联网的核心
ARP协议:
- 用于查询同一网络中<主机IP地址,MAC地址>之间的映射关系
ICMP协议:
- 用于网络层实体之间相互通知异常事件
IGMP协议:
- 用于实现IP组播
4.2 IPv4
4.2.1 IP分组格式:

- IP数据报分为首部和数据部分,从首部开始发送,均以二进制表示
- 首部包括固定部分和可变部分,默认情况下,固定部分占20B,可变部分为0 ~ 40B
- 首部实际长度 = 首部长度字段 x 4B
- IP分组总长度 = 首部总长度字段 x 1B
- 版本字段用二进制标识,常见为v4,v6两个标准,分别为1000,1010
- 标识、标志和片偏移用于目标主机进行重组时确定各分组的先后次序
- 标识用于区分收到的分片是否数据同一个原IP数据报
- 标志位共3bit:
- 最高位考研不考察
- 中间位DF,don't fragment表示是否允许分片,DF=1表示不允许
- 最低为MF,more fragment表示是否为最后一个分片,MF=0表示最后一个分片
- 假设路由器接收到DF=1的且长度超过MTU的数据报,则该路由器只能将该数据报舍弃,并向发送方发送ICMP报文,通知异常
- 片偏移表示数据部分在被分片前的位置,且偏移位置 = 片偏移字段 x 8B
- 除最后一个分片外,其余每个分片的数据部分必须是8B的整数倍

- 生存时间字段占8bit,表示网络中可通过路由器数的最大值,常记TTL
- TTL初值通常由源主机设置
- 每经过一个路由器,路由器TTL减1,如果TTL减到0,则直接丢弃分组,并向源主机发送ICMP报文
- 路由器先减TTL,然后判断是否为0,0则直接丢弃,即如果路由器收到TLL=1的数据报则直接丢弃
- 协议字段占8bit,用于告知接收方传输过来的IP数据报中数据部分对应传输层的TCP还是UDP协议
- 首部校验和仅校验首部,数据部分的校验交给上层做校验
- 源地址、目的地址各占32bit,分别表示发送方、接收方ip地址
关于长度方面的记忆口诀,"418,首总偏"
4.2.2 IP分组分片与重组
尽管IP分组数据部分理论最短为0B,理论最长为65515B,但实际传输过程,数据部分长度受到下一段链路最短/最长帧长限制
- 最大传送单元MTU:
- 一个链路层数据帧能承载的最大数据量
- 以太网的MTU=1500B
- 如果一个IP数据报总长度超出了下一段链路的MTU,则需要将数据部分进行分片,并添加首部信息
- 注:每个分片都是独立的IP数据报
- 除最后一个分片,MF=0,其余分片的MF=1;标识、DF照抄;片偏移,第一个分片为0,后续分片片偏移依照上一个分片的长度/8不断累加
- IP数据报的分片可能在源主机或传输链路的任何一个路由器中发生,并按照传输链路的MTU进行分片
- 由于一个过长IP数据报被拆分成了若干个独立的IP分组,不同的IP分组可以通过不同的链路传输到目标主机,提高了传输效率
那么同理,接收方在接受完所有分片以后,还需要对分片进行重组,还原原始IP数据报
- 同时分片可能乱序到达目的主机,只有最后的目的主机需要对收到的分片进行重组
- 重组过程依赖于IP分组首部的标识、标志和片偏移
- 标识相同的进行重组,并按照片偏移从小到大排列,直到MF=0的分片,拆除后续分片多余的首部,将数据部分拼回原始IP数据报
4.2.3 IP地址划分——原始分类方案
ipv4协议于1981年发明,只有政府、学校、军队等大机构会使用互联网
- 由于设计之初只用于特定领域才能使用,仅设计了32bit,共计42亿个地址
- IP地址资源由互联网名字和数字分配机构ICANN采用有偿租用的方式进行分配
IPv4最初分为三类地址:
- 单播地址:
- 单播地址用于分配给独立主机
- 多播地址:
- 多播地址用于实现IP多播/组播,将若干个IP归在一个分组
- 保留地址:
- 设计之初暂未规定具体用途,暂不使用,保留给未来特定场景使用
任何一个32bit的IP地址分为两部分<网络号>,<主机号>
- 在互联网初期,要求每台主机、每个路由器接口被分配的IP地址都是全球唯一的
- 路由器和路由器连接的允许不分配IP地址,但路由器和其他节点连接的接口必须分配IP地址
- 从属同一个网络的所有主机、路由器接口的IP地址<网络号>均相同
- 当一台新主机接入网络时,需要给他分配一个IP地址,并配置默认网关
- 由于ip地址一般按照每8bit为一组,按照十进制表示,表示范围为0~255,可根据该字节区分不同类型的IP
单播地址
依照单播地址的网络号长度,根据前几个比特划分不同类型

A类地址:
- 网络号为前8bit,第一个比特为0;主机号为剩余24bit
- IP地址首字节为1~126
B类地址:
- 网络号为前16bit,第一个比特位1,第二个比特为0;主机号为剩余16bit
- IP地址首字节为128~191
C类地址:
- 网络号为前24bit,第一个比特为1,第二个比特为1,第三个比特为0;主机号为剩余8bit
- IP地址首字节为192~223
组播地址

D类地址:
- 不划分网络号和主机号,前4个比特分别为1110,区别于A、B、C类地址
- IP地址首字节为224~239
保留地址

E类地址:
- 同样不划分网络号和主机号,前4个比特分别为1111,区别于A、B、C、D类地址
- IP地址首字节为240~255
特殊IP汇总
| 网络号 | 主机号 | 作为IP分组源地址 | 作为IP分组目的地址 | 代表含义 |
|---|---|---|---|---|
| Y | 全0 | 不能作为源地址 | 不能作为目的地址 | 表示网络号Y所表示的整个网络本身,只能用于路由表、转发表 |
| Y | 全1 | 不能作为源地址 | 可以作为目的地址 | 向网络号为Y的网络广播IP分组 |
| 0 | X | 可以作为源地址 | 不能作为目的地址 | 表示本网络中主机号为X的主机 |
| 全0 | 全0 | 可以作为源地址 | 不能作为目的地址 | 表示本网络中本主机,在DHCP协议中使用 |
| 全1 | 全1 | 不能作为源地址 | 可以作为目的地址 | 向本网络广播IP分组 |
| 127,前八位全1 | 非全0或非全1的任何数 | 可以作为源地址 | 可以作为目的地址 | 环回自检地址。表示一台主机本身,用于本地 |
| 软件环回测试 |
注:
- 以上这些特殊地址不能指派给网路中的任何一台主机或路由器私用
- 如果一个网络中,主机号占N bit,那么这个网络中,最多支持\(2^N-2\)台主机&路由
- 源地址全0,一般用于一台主机新接入网络时使用
- 由于其没有IP地址,会向网络发送DHCP报文,源地址全0,目的地址全1的数据报/分组
- 网络中会存在一台DHCP服务器,该服务器专用于分配ip地址,新接入的主机发送DHCP后会响应其请求并分配一个可用的ip,以DHCP的方式广播
IP例题——IP地址原始分类

- 每个单位申请到唯一的网络号,该单位内所有主机的网络号均为该地址,主机号由该单位的管理员自由分配
- 如果同一个网络内存在网络号不同的主机,该主机无法于本网络内任何其他主机直接通信
- 由于路由器于其他节点的连接的接口必须分配IP地址,本网络内所有主机除了配置网络号和主机号外还需要配置默认网关
- 默认网关即默认路由器,表示本网络接入外部网络,必须向这台路由器的特定端口发送,并由这台路由器转发出去
假设学校网络内的主机166.1.0.1向公司网络内的主机200.1.1.2发送IP分组
- IP分组首部源地址为166.1.0.1,目的地址为200.1.1.2
- 源主机通过网络号判断目的地址是否在本地网络,不在本地网络需要通过默认网关转发
- 源主机可通过ARP协议,得到默认网关的MAC地址,通过修改MAC帧的目的地址为网关的MAC地址,直接向默认网关发送IP分组
- 该过程发送的MAC帧虽然是发送给默认网关的,但是本网络内的主机都能收到该帧,只是因为IP地址不同直接舍弃
- 路由器收到分组后,根据其转发表转发到B0端口,经过链路到达公司路由器C0,查询转发表转发到C2端口
- 转发前,公司路由器也同样通过ARP协议查询目的地址主机的MAC,然后转发到目的主机200.1.1.2
假设学校网络内的主机166.1.0.1向学校网络内的另一台主机166.1.4.4发送IP分组
- IP分组首部源地址为166.1.0.1,目的地址为166.1.4.4
- 源主机通过网络号判断目的地址在本地网络,直接通过ARP协议查询目的主机MAC,不需要通过默认网关转发
- 获得目的主机MAC后,直接发送给目的主机166.1.4.4
- 该过程发送的MAC帧也会被本网络内的主机收到,只是因为IP地址不同直接舍弃
综上所述,在主机之间的分组发送过程中,分组首部的源地址和目的地址始终没有发生变化,但MAC帧的源MAC地址、目的MAC地址在不断变化
4.2.4 IP地址划分——子网划分方案
1985年,推出子网划分技术
子网划分技术:
- 原理:
- 若某单位足有一个IP地址段,假设原本主机号占n bit,可将前kbit保留作为子网号,用剩余n-k bit作为主机号,从而划分除2\(^k\)个子网,且每个子网包含的IP地址数相同
- 子网划分前,IP地址为二级结构<网络号,主机号>;子网划分后,IP地址为三级结构<网络号,子网号,主机号>
- 每个子网地址中,主机号不能分配为全0或全1,全0表示子网本身,全1表示子网广播地址
子网掩码,subnet mask:
- 作用:
- 用子网掩码和IP地址进行按位与运算,算出<网络号,子网号>,合称为网络前缀
- 只有网路前缀相同的IP地址,才归属于同一个网络/子网
- 如果一个网络内部进行了子网划分,那么整个网络中每台主机、每个路由器接口都需要配置IP地址、默认网关、子网掩码
- 如果一个路由器支持子网划分技术,那么他的转发表中,需要包含<目的网络号,子网掩码,转发接口>
默认子网掩码:
- 如果一个传统网络A/B/C类内部没有进行子网划分,可以按照如下作为默认子网掩码
- A类默认为255.0.0.0;B类默认255.255.0.0;C类默认255.255.255.0
默认路由:
- 默认路由(默认转发表项)设置为<目的网络号全0,子网掩码全0>
- 在路由器转发表中,如果所有表项都不匹配,那么将默认路由转发出去
IP例题——子网划分

主机发送IP数据报过程:
- 判断目的主机和本机是否属于同一个网路
- 用子网掩码和主机IP按位与,检查本地IP地址和目的IP地址的网络前缀是否相同
- 若网络前缀相同,说明目的主机和本机属于同一个网络
- 若网络前缀不同,说明不属于同一个网络
- 将IP数据报封装成MAC帧发送到链路上
- 如果目的主机和本机属于同个网络,就通过ARP协议找到目的主机的MAC地址,再将IP数据报封装成帧,将帧发送给目的主机
- 如果目的主机和本机不属于同一个网络,就通过ARP协议找到默认网关的MAC地址,再将IP数据报封装成帧,将帧发送给默认网关
路由器转发一个IP数据报过程:
- 路由器的某个接口收到一个IP数据报
- 对IP数据报首部进行校验,并从中找到目的IP地址
- 查询路由器转发表
- 转发表想包含<目的网络号,子网掩码,转发接口>
- 检查目的IP地址与每个表项能否匹配,将目的IP地址、子网掩码按位与,匹配表项中目的网络号
至少默认路由表项一定可以成功匹配
- 将IP数据报进行转发
- 根据转发表的查询结果,将IP数据报从匹配的接口转发出去
- 如果匹配的转发接口和该IP数据报入口相同,就不用再把IP数据报转发回去,直接丢弃
注:
- 在IP数据报传输过程中,并不会将子网掩码一同传输,只用于本地的子网划分
- 新加入的主机,会通过本网络的DHCP获得本地网络的子网掩码
- 对于路由器而言,转发表项中的子网掩码一般情况下填写默认子网掩码
- 只有整个网络开始搭建过程,需要人工填写对应子网的子网掩码
- 网络搭建完成后,路由器可通过学习其他路由器的转发表信息从而更新子网掩码
- 不支持子网划分的路由器R1与支持子网划分的路由器R2之间通信
- 从R1转发给R2的数据报,对其IP数据报的目的地址自动添加默认子网掩码,以判断是否与转发表中的表项相同
- 从R2转发给R1的数据报,由于子网掩码并不随IP数据报一同传输,直接按照其首部的网络号转发端口
- 子网掩码计法除了使用32bit表示,也可以直接在IP地址后标记"/X"
- 如166.1.0.1/17表示ip地址为166.1.0.1,子网掩码为255.255.128.0
- 默认路由一般记为0.0.0.0/0
4.2.5 IP地址划分——无分类编制CIDR方案
1993年推出无分类编址CIDR,由于每台主机至少消耗一个全球唯一的IP地址,IP地址告急
- 传统编址方式,一个单位申请的IP地址段,只能按照A、B、C三类进行选择,IP地址资源分配不灵活,利用率很低,有限的IP地址资源很快就耗尽
- CIDR不同于传统的子网划分技术
- 子网划分是在获取A、B、C类网络后,将一部分主机号划成子网,自行组成网络前缀,方便本单位对IP的管理(单位自己的管理);
- CIDR是从IP地址管理机构层面,直接提供给单位一个独立的网络前缀,增加IP地址资源分配的灵活性(对IP地址管理结构的管理)
无分类编制CIDR
- 将32bit地址直接分为<网络前缀,主机号>
- 某单位有2000态主机想要联网,ICANN可以给他分配一个21bit网络前缀的CIDR地址快
- 前21 bit为该网段的网络地址,末尾11 bit由申请单位自行分配
- 单位获得CIDR地址快后,可以再进一步进行子网划分
- 定长子网划分:类同传统子网划分技术
- 在一个CIDR地址快中,把主机号前k bit保留作为定长子网号,划分出2\(^k\)个子网,每个子网包含IP地址块大小相等
- 缺点:
- 每个子网都等大,不够灵活,IP地址利用率低,浪费有限的IP地址资源
- 变长子网划分:
- 在一个CIDR地址快中,划分子网是,子网号长度不固定,每个子网包含IP地址快大小不同
- 变长子网划分相比定长子网划分更加灵活
- 定长子网划分:类同传统子网划分技术
无分类编址CIDR、变长子网划分的应用
CIDR网络地址块子网划分

例题:咸鱼电信公司租用了一个CIDR地址快128.14.32.128/27
- 由于网络前缀占27位,仅有5位作为主机号,即共有2\(^5\)=32个IP地址
- 现有如下需求,为咸鱼电信公司设计地址分配方案,并配置咸鱼电信的路由器转发表
- 假设某人向该公司购买宽带服务,用于开网吧,网吧共12台电脑,每台电脑需要分配一个IP地址,且所有电脑属于同一个子网
- 旺财家共5口人,忍受一台电脑,每台电脑需要分配一个IP地址,所有电脑要组成一个子网
- 狗剩家只有一条电脑,需要从咸鱼电信的路由器拉一条"路由器直连主机"的点对点链路
分配过程:

- 网吧需要12个IP地址,可将最高位主机号0,1分别将32个IP地址划分为两个16个地址的子网,并将其中一个子网分配给网吧使用,除去全0,全1两个地址,网吧与咸鱼电信路由器直接相连还需占用1个IP,因此网吧共最大可分配13个IP
- 剩余16个地址,可以再拿出1位主机号,分成两个8个地址的子网,再将其中一个子网分配给旺财家,除去全0、全1,旺财家与咸鱼电信路由器直接相连还需占用1个IP,因此旺财家最大可分配5个IP
- 剩余的8个地址,再拿出1位主机号,分成两个4个地址的子网,其中一个子网分配给狗剩家,出去全0,全1两个地址,狗剩与咸鱼电信路由器直接相连还需占用1个IP,因此狗剩所分配的子网至多分配一个IP
- 剩下的4个地址的子网,同狗剩,至多也就分配给1个独占地址,因此也不能执行进一步子网划分
路由转发拓扑结构:

- 在路由转发表中不难发现,每个分配出去的子网的网络前缀都与其他子网前缀的前缀各不相同
总结:
CIDR地址块的子网划分技巧:可以利用类似于"从根到叶构造二叉哈夫曼树"的技巧
- 原始CIDR地址块作为根节点(假设可以自由分配的主机号占 h bit)
- 每个分支节点必须同时拥有左右孩子,左0,右1(反过来也行)
- 每个叶子结点对应一个子网,根据根节点到达叶子结点的路径来分析子网对应的IP地址块范围
- 整棵树的高度不能超过h-1,h为CIDR网络块剩余的主机号位数 (因为即便最小的子网也至少要保留 2bit 主机号)
采用CIDR技术后,主机发送IP数据报的过程和采用子网划分技术时相同
子网划分原则
- 不重合,不遗漏
- 显然,在子网构造的二叉哈夫曼树中,祖先节点IP地址空间包括子孙节点IP地址空间
- 要求不重合,则说明各子网节点,只能拥有一个唯一的祖先节点
- 要求不遗漏,可以假设从根节点出发流水,看下面花费的子网分支能否把水给堵住
例题:将一个IP网络划分为4个子网,若其中一个子网为172.16.1.128/26
- 其CIDR地址块至多为172.16.1.0/24,主机号占8 bit,即0000 0000/24
- 下一级子网为0000 0000/25和1000 0000/25,分别为172.16.1.0/25,172.16.1.128/25
- 172.16.1.0/25可划分为0000 0000/26和0100 0000/26,分别为172.16.1.0/26,172.16.1.64/26
- 172.16.1.128/25可划分为1000 0000/26和1100 0000/26,分别为172.16.1.128/26,172.16.1.192/26
下列网络中,不可能是172.16.1.128/26的另外三个子网之一的是:
A:172.16.1.0/25,B:172.16.1.64/26,C:172.16.1.96/27,D:172.161.224/27

- A和题干,D,以及1100 000/27可构成四个子网,确保不重合不遗漏
- B和题干,以及0000 0000/26,1100 0000/26可构成四个子网,确保不重合不遗漏
- C和题干,就算加上1100 0000/26,0000 0000/26构成四个子网,也无法保证不遗漏,还需一个0100 0000/27,存在五个子网,不符合题意
4.2.6 IP地址划分——路由聚合方案
路由聚合:也称构成超网
- 对一个路由转发表,如果有几条路由表项的转发接口相同,部分网络前缀也相同,则可将这几条路由表项聚合为一条
- 路由聚合是伴随着CIDR技术的出现一同出现的,由于减少路由表项
- 特点:
- 进行路由聚合,可以减少路由表的大小,从而加快查询,转发时延更低
- 如果表项转发接口不同,不能进行路由聚合
- 路由聚合可能会引入额外的无效地址
最长前缀匹配原则:
- 假设某路由器接收到一个IP数据报,该路由器使用路由聚合技术,按照转发表中匹配的最长前缀的接口进行转发
- 因此引入CIDR技术后,由于路由聚合,路由器转发IP数据报的过程会存在差异
- 一个IP地址在转发表中可能匹配多个表项,按照最长前缀匹配原则
4.2.7 IP地址划分——NAT方案
1994年,推出NAT技术
网络地址转化NAT技术:
- 多个设备同处于一个局域网下,让同一局域网下的设备共用同一个全球唯一的IPv4地址连接到互联网中,从而缓解了IP地址不够用的问题
- 由于这个技术的出现,将本地网络划分成内网IP/私有IP地址,以及外网IP/全球IP地址/公网IP
- 全球IP地址:
- 由ISP提供,全球唯一。外网IP是一个局域网与外接通信时所需使用的IP地址
- 私有IP地址:
- 包括以下IP范围:
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
- 这些IP只允许分配给局域网内部的节点,不允许分配给互联网上的节点
- 每个局域网内部都可自行分配这些私有IP地址,且可以复用
- 只要求局域网内唯一,不要求全球唯一
- 包括以下IP范围:
NAT路由器:
- 作用:
- 转发IP数据报时,进行内网IP和外网IP的相互转换
- NAT表:
- NAT路由器除了转发表外额外的一个记录表,用于记录地址转换关系,<内网IP:端口号,外网IP:端口号>
- 端口号为上层传输层进程对外通信所使用的虚拟端口,同一台主机内唯一,可以复用,共16bit
- IP+端口号,对应一个主机内一个特定的进程
- 由于NAT路由器使用了端口号,因此需要实现传输层的功能
普通路由器和NAT路由器对比
普通路由器转发IP数据报时,不会改变源IP、目的IP地址
- 普通路由器仅包含网络层及以下层的功能
NAT路由器接收到一个IP数据报时
- 从内网转发到外网,会更改源IP地址、源端口号
- 从外网转发到内网,会更改目的IP地址、目的端口号
NAT路由示例

- 对于其他网络的主机,只能看到本地网络主机对外暴露的NAT端口,即外网端口
4.2.8 地址解析协议ARP
ARP协议
- 作用:在一个局域网内,通过ARP协议查询到一个IP地址对应的MAC地址
- ARP表(ARP缓存):
- 记录着当前网络内<IP地址,MAC地址>之间的映射关系
- ARP表是一个数据结构,每台主机、路由器都有自己独立的ARP表
- ARP表项具有有效期,过期后表项无效,因此需要定期更新ARP表项
ARP分组属于网络层的传输单元

- 如果主机发送的是ARP分组,则下层MAC帧封装数据部分为ARP分组的PDU;如果发送IP分组,则封装IP分组的PDU
- ARP分组封装到MAC帧中,类型字段值为0x0806
ARP分组发送过程
ARP请求分组:本质上是MAC广播帧
- 请求分组中必须指明发送方的IP地址X、MAC地址Y,以及需要查找MAC地址的主机IP地址Z
- ARP请求分组会封装到MAC帧中,帧目的地址全1,源地址为Y
ARP响应分组:本质上是MAC单播帧
- 响应分组中必须指明发送方的IP地址Z、MAC地址V
- ARP响应分组会封装到MAC帧中,帧目的地址为Y,源地址为V

- 当接收方收到来自发送方的ARP请求分组时,会顺带将其IP地址和MAC的映射记录在自己的ARP表中
- 注:尽管ARP请求分组对应的MAC帧是广播帧,但是只有ARP请求中的目的地址IP匹配的主机才会接收该ARP请求分组,即在网络层中,只有IP匹配的主机和发送方对该ARP请求分组可见
- 因此主机在发送IP数据报以及路由器进行IP数据报转发前,会查找自己的ARP表
- 如果可以直接获得目的IP对应的MAC地址,则直接封装成帧向该主机/路由器发送
- 否则需要再进行一次ARP请求分组获得MAC地址,随后按照该MAC地址封装成帧向目的主机/路由器发送
- 连接H5和H6的设备为集线器,MAC帧的传输过程略有不同
- 假设H3向H6发送ARP请求分组时,H3的默认网关会直接转发给集线器,集线器同时转发给H5和H6
- H5发现IP不匹配直接丢弃,H6收到ARP请求分组后进行ARP响应,向H3发送ARP响应分组
- 但由于H6需要通过集线器将单播MAC帧转发出去,因此H5也会收到该ARP响应分组,但由于目的IP不匹配也同样直接丢弃
- 集线器转发给H3默认网关后,由于之前转发过ARP请求分组,已得知H3的MAC地址,则直接封装成帧转发给H3
扩展:ARP分组格式(仅了解)
ARP分组和IP分组同属于网络层,但其PDU完全不一样

- ARP分组大小为28B,如果被封装到MAC帧中,需要额外填充18B达到46B才能被发送
4.2.9 动态主机配置协议DHCP
动态主机配置协议DHCP,Dynamic Host Configuration Protocol:
- 作用:
- 给刚接入网络的主机动态分配IP地址,配置默认网关和子网掩码
- DHCP时应用层协议,基于UDP
- 客户UDP端口号为68,服务器UDP端口为67
- 网络中的主机通过DHCP获得的IP地址均具有租用期,当租用期快结束时,客户主机可向DHCP发出续租请求对当前分配的IP使用状态进行更新
DHCP采用客户/服务器模型(C/S)
- DHCP客户:
- 新接入网络的主机,等待获得IP地址等配置
- DHCP服务器:
- 负责分配IP地址的那台主机,管理一系列IP地址池
- 在一个大型网络内可以由多台DHCP服务器,防止单台服务器负载过高
- 注:在家庭网络中,通常由家庭路由器兼任DHCP服务器的
DHCP过程
DHCP分为四个过程
- 客户端向DHCP服务器发送DHCP发现报文
- DHCP服务器向客户端发送DHCP提供报文
- 客户端向DHCP服务器发送DHCP请求报文
- DHCP服务器向客户端发送DHCP确认报文

- DHCP发现报文
- 新加入网络的主机只有MAC地址,因此在DHCP发现报文中必须指明客户主机MAC地址
- 除了该信息外,还可以向DHCP服务器提出对IP地址租用期的要求
- 封装到传输层UDP段,UDP中指明本地主机UDP进程的68端口(源端口号)以及DHCP服务器的UDP进程的67端口(目的端口号)
- 封装到网络层数据报,由于当前主机没有IP,因此源IP地址为全0,该主机也不清楚DHCP服务器的IP,因此该数据报为广播IP数据报,目的地址为全1
- 由于发送的是广播IP数据报,除DHCP服务器以外的主机也会接收到该报文。MAC帧、IP数据报均顺利接收并向上传递,当解析到UDP段时发现该主机内并不存在相关进程使用67端口
- 在互联网中,一些专用进程/服务的端口是按照标准规定好的,默认不允许其他进程使用特定端口,除非修改配置文件
- 由于该主机没有使用67端口的进程,会直接舍弃该UDP包,从而确保了只有DHCP服务器才会响应该DHCP发现报文
- 由于发送的是广播IP数据报,除DHCP服务器以外的主机也会接收到该报文。MAC帧、IP数据报均顺利接收并向上传递,当解析到UDP段时发现该主机内并不存在相关进程使用67端口
- 封装到链路层MAC帧,源MAC地址为本机MAC,DHCP服务器的MAC地址也未知,也同样需要方式MAC广播帧,目的MAC地址全1
- DHCP提供报文
- DHCP服务器在提供报文必须指明给客户分配的IP地址、子网掩码、默认网关,以及默认的租用期
- 封装到传输层UDP段,UDP中指明目的主机UDP进程的68端口(目的端口号)以及本地DHCP服务器的UDP进程的67端口(源端口号)
- 封装到网络层数据报,源地址为DHCP服务器的IP,由于目的主机没有IP,因此目的IP地址仍为全0,因此该数据报仍为广播IP数据报,目的地址为全1
- 封装到链路层MAC帧,源MAC地址为DHCP服务器MAC,目的地址为新主机的MAC地址,该帧为单播帧
- 尽管该帧中的IP数据报为广播IP数据报,但路由器会精准转发该单播帧,网络内其他主机不会受到该帧
- DHCP请求报文
- 新主机在请求报文中需要声明接收的IP地址(实际就是之前DHCP分配过来的地址)以及MAC地址信息
- 封装到传输层UDP段,同上面DHCP发现报文
- 封装到网络层数据报,由于此时分配过来的IP还不是该主机的IP地址,因此源IP仍为全0,目的地址为全1,该数据报仍为广播IP数据报
- 由于网络中可能存在多台DHCP服务器,新主机发送的发现报文可能会受到多个DHCP提供报文
- 新主机发送的请求报文声明接受的IP地址,并且以广播发送,是为了告知其他DHCP服务器,新主机已经接受该IP地址,其余分配过来的IP地址不进行接收(反之其误以为接收了分配过来的IP)
- 封装到链路层MAC帧,目的MAC地址为全1,源地址为新主机的MAC地址,该帧为广播帧
- 使用广播帧原因同上
- DHCP确认报文
- DHCP在确认报文中,信息和DCHP提供报文相同
- 封装到传输层UDP段,同上面DHCP发现报文
- 封装到网络层数据报,由于此时目的主机IP还不是该分配的IP地址,因此源IP为DHCP服务器IP地址,目的地址为全1,该数据报仍为广播IP数据报
- 封装到链路层MAC帧,源的MAC地址为DHCP服务器MAC地址,目的地址为新主机的MAC地址,该帧为单播帧
简要汇总
| DHCP报文 | 携带信息 | 网络层信息 | 链路层信息 |
|---|---|---|---|
| DHCP发现报文 | 客户主机的MAC地址,可选是否附带要求的租用期 | 源ip=0.0.0.0,目的IP=255.255.255.255(广播IP数据报) | 源MAC=客户MAC地址,目的MAC=FF:FF:FF:FF:FF:FF(广播帧) |
| DHCP提供报文 | 给客户分配的IP地址、子网掩码、默认网关以及租用期 | 源IP=DHCP服务器IP,目的IP=255.255.255.255(广播IP数据报) | 源MAC=DHCP服务器MAC地址,目的MAC=客户的MAC地址(单播帧) |
| DHCP请求报文 | 客户机确认要使用的IP地址 | 源IP=0.0.0.0,目的IP=255.255.255.255(广播IP数据报) | 源MAC=客户MAC地址,目的MAC=FF:FF:FF:FF:FF:FF(广播帧) |
| DHCP确认报文 | 同DHCP提供报文 | 源IP=DHCP服务器IP,目的IP=255.255.255.255(广播IP数据报) | 源MAC=DHCP服务器MAC地址,目的MAC=客户的MAC地址(单播帧) |
4.3 IPv6
待更新
4.4 路由算法和路由协议(待更新)
路由算法和路由协议,本质上是让各个路由器相互配合,自动调整路由表、转发表中的信息
静态路由:
- 通过人工的方式,手动向路由器的路由表中填写网络信息以及转发端口
- 由于现实状态路由器的数量很多,单纯依赖人工方式不现实
动态路由:
- 路由器之间相互配合,自行更新路由表、转发表
自治系统AS:
- 边界网关:
- 一个自治系统至少有一台路由器与其他自治系统的路由器相连,这类与其他自治系统相连的路由器均被称为边界网关
- 相对的,自治系统内其他路由器统称为内部网关
距离-向量路由算法
链路状态路由算法
RIP路由协议
OSPF路由协议
BGP路由协议
4.5 IP组播
待更新
4.6 移动IP
待更新
本文来自博客园,作者:GK_Jerry,转载请注明原文链接:https://www.cnblogs.com/GKJerry/articles/18514818

浙公网安备 33010602011771号