Skip to content

(三)ipv4(⭐)

1. ipv4 分组

img_TX2TwBeOyH

1.1. 数据报组成

  • 首部 + 数据:最前面固定 20 字节 (160 bit) + 后面长度可变的可选字段。考试一般只考 20 字节固定部分;

1.2. 固定 20 字节部分

  • 版本:固定值为 4,表示 ipv4;

  • 首部长度:4 bit,单位为四字节(ℹ️)。例如,首部 20 Byte,则此处值为 5;

  • 区分服务:未使用,填充全 0;

  • 总长度:16 bit,可得出数据报总长度最大为 65535 字节;

  • 标识、标志、片偏移:用于数据报分片,用于进入数据链路层(MTU 较短)传输;

    • 标识:2 字节 8 bit,用于标识分片属于哪一个数据报。标识段在传输过程中不变;

    • 标志:占 3 bit,实际只用了 2 bit,分别为 MF 和 DF 位

      • MF (More Fragment):表示此分片是否为顺序最后一个分片,0 表示最后一个,1 表示还有;

      • DF (Dont Fragment):表示此数据报是否允许被分片,0 允许,1 不允许;

    • 片偏移:13 bit,表示分片的数据部分在原数据报中的偏移量,用于重组数据报,单位为八字节(ℹ️);

      • 重组功能由接收端完成,路由器不承担重组功能
    • 分片 - 实例:数据报总长度 3820 字节,首部固定 20 字节,分片长度不超过 1420 字节;

      • 分析:数据部分 3800 字节,分为 3 个片,每片的数据部分分别为 1400,1400 和 1000 字节;

      • 三个分片的片偏移分别为 0,175 和 350,MF 位分别为 1,1 和 0;

  • 生存时间 (TTL, Time To Live):8 bit,表示最大能被路由器转发的次数(跳数),每经过一次路由器减 1,减到 0 时丢弃;

  • 协议:8 bit,指示数据部分采用的协议(TCP,UDP,ICMP 等)

  • 首部检验和(Checksum):了解

  • 源地址和目的地址:都为 4 个字节,ipv4 地址表示法;

1.3. 可变部分

  • 可选字段,长度 1 到 40 字节不等,用于测量,安全,排错等其他功能;

2. ipv4 地址和 NAT

  • IP地址:给每个连接在因特网上的主机(或路由器)分配一个在全世界范围内唯一的 32 位标识符

  • 由因特网名字与号码指派公司 ICANN(Internet Corporation for Assigned Names and Numbers)进行分配;

2.1. ipv4 编址方式

  • 分类编址:最基本的编址方法;

  • 子网划分:分类编址的改进;

  • 无分类编址 CIDR:现代广泛应用的 ipv4 编址方法;

2.2. ipv4 分类编址

  • 每一类地址由两个固定长度的字段组成;

  • 网络号 net-id,它标志主机(或路由器)所连接到的网络;

  • 主机号 host-id,它标志该主机(或路由器)自身;

  • 传统分类编址的网络号和主机号

    img_7QGed7B5FD

    • 主机地址:host-id 为全 0 或全 1 的地址为网络的保留地址,不能分配主机;

      • 全 0:表示此网络的网络地址;

      • 全 1:表示此网络的广播地址;

      • 推出:可分配主机数为 2l2l 为 host-id 长度;

    • A 类:net-id 取值 0 ~ 127,0 和 127 为保留地址,不能分配网络;

      • 0:为分类编址的保留地址。在 CIDR 和子网划分情况下可用;

      • 127:通用回环地址

    • B 类:net-id 首字节取值 128 ~ 191。可分配网络数 2141

    • C 类:net-id 首字节取值 192 ~ 223。可分配网络数 2211

    • D 类:net-id 首字节取值 224 ~ 239,组播地址,不分配主机

    • E 类:net-id 首字节取值 240 ~ 255;

  • 特殊地址总结图

    img_JfPC6LsW1q

    • 第 3 和 第 4 两种广播地址的区别

      • 全 1 广播地址只能在发送者所在网络内进行广播,不经过任何路由转发;

      • net-id + 全 1 广播地址可以被跨网域路由到目标网络,再进行广播;

    • 第一项 0.0.0.0 用途:本主机 ip 地址未知,需要 DHCP 获取时,发送的报文就以 0.0.0.0 作为源地址;

  • 分类编址的一些重要特点

    • 分等级ip 地址管理机构只分配网络号,主机号为申请单位自行分配,方便管理 ip 地址;

    • 路由器转发时,只考虑目的主机的网络号,而不考虑主机号,简化路由表表项;

    • ip 地址标识的是主机和某条传输链路的接口关系,而不是主机,即:

      • 一台主机同时连接到两个网络时,具有两个不同的 ip 地址,若两个网络不同,则 net-id 也会不同;

      • 一台路由器至少应该有两个 ip 地址;

    • 用转发器、集线器或网桥连接的若干个局域网属于同一个网络,因此其 net-id 相同;

    • 分配到相同 net-id 的网络,都是平等的,与其覆盖范围无关;

  • 实例分析

    img_Im08IARZDo

    • 1)由首字节 222 知,网络为 C 类网络,前三个字节为网络号,最后一个是主机号;

    • 2)以 222.1.1.x 为例,已分配 4 台主机(注意路由器),还可分配 250 台主机,广播地址 222.1.1.255;

    • 3)右侧 2 台主机和下方 2 台主机通过 B 连接,因此逻辑上它们属于同一网络;

    • 4)三个路由器连接到网络主机的端口地址(222.1.1.4,222.1.2.5,222.1.3.2)为网关地址

2.3. 子网划分

  • 主机号拿出若干位作为子网号,ip 地址变为:网络号 + 子网号 + 主机号

  • 实例解析

    img_C8DdHWoX8b

    • 划分前:B 类网络 145.13.0.0,所有分组均到达路由器 R1,网络最多可支持 65535 台主机,由 R1 进行直接交付,接口压力较大;

    • 划分后:将 145.13.3.0,145.13.7.0 和 145.13.21.0 作为三个子网,即第三个字节作为子网号

      • 划分后,三个子网各自拥有一个路由器接口,每个子网最多划分 254 台主机,接口压力较小;

      • 划分后,路由器 R1 和子网路由器进行交付,最多划分 256 个子网,R1 接口压力也减小;

  • 子网掩码:用于路由器从 ip 数据报的目的地址提取子网号;

    • 构成:32 位只包含 0 和 1 的二进制码,网络号和子网号所处的位为 1,主机号对应的位为 0

    • 用途:按位与运算,ip 地址 & 子网掩码 = 子网号;

    • 默认子网掩码:即只有网络号位为 1 的掩码

      • A 类:255.0.0.0;

      • B 类:255.255.0.0;

      • C 类:255.255.255.0;

  • 路由器在和相邻路由器交换路由信息时,必须把自已所在网络(或子网)的子网掩码告诉相邻路由器

  • 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码

  • 固定长度子网和变长子网

    • 固定长度:各子网的子网号位数固定,则子网掩码也相同;

    • 变长子网:不同子网的子网号位数可以不同;

  • 划分子网的路由转发过程

    • 1)提取:从分组提取 ip 地址 D

    • 2)直接交付:用本路由器所在各网络的子网掩码和 D 按位与,若有子网匹配,则将分组直接交付。否则执行间接交付;

    • 3)间接交付 - 主机:检索路由表中是否有 D 的主机路由,若有,则转发给其指定的下一跳,否则执行 4;

    • 4)间接交付 - 子网:路由表中每一行的子网掩码和 D 按位与,若有匹配,则转发给该行指定的下一跳,否则执行 5;

    • 5)默认路由:检查是否有默认路由,转发给其指定的下一跳;

    • 6)若无默认路由,报告转发错误;

2.4. CIDR(无分类域间路由,Classless Inter-Domain Routing)

  • 主要特点

    • 消除了传统的 ABC 类地址以及划分子网的概念,可以更加有效地分配 ipv4 的地址空间;

    • CIDR 使用各种长度的 网络前缀 (network-prefix) 来代替分类地址中的网络号和子网号;

    • CIDR 回归两级编址

  • 无分类两级编址

    • 记法:ip 地址 = 网络前缀 + 主机号;

    • 斜线记法(CIDR记法):ip 地址 / 前缀位数。前缀位数 = 三级编址中子网掩码前面 1 的个数;

      • 例:B 类地址 166.66.66.66/19,即子网掩码 255.255.224.0,子网号 19 - 16 = 3 位;
    • CIDR 地址块:前缀相同的连续 ip 地址;

      • 例:128.16.32.0/20,主机位 12 位,即该地址块共有 212=4096 个,可分配主机的 2122=4094 个;

      • 128.16.32.0/20 地址块的最小地址:128.16.32.0,最大地址:128.16.47.255。注意用二进制来算;

  • 路由聚集/聚合(Route Aggregation)

    • 指路由表用一个 CIDR 地址块就可以表示很多个传统分类地址的路由

    • 路由聚合也成为 超网(Supernetting)

    • 例:某 ISP(互联网服务提供商)的一个网段为 206.0.128.0 到 206.0.191.255;

      • 传统分类:C 类地址,前 18 位固定,有 26=64 个子网,因此与之通信的路由器需要存储 64 个路由表项来找到该 ISP;

      • 路由聚合:使用聚合地址 206.0.128.0/18,只需一个表项就能找到该 ISP;

  • 简写形式

    • 1)省略点分十进制中低位连续的 0,如 10.0.0.0/10 简写为 10/10;

    • 2)星号简写,如 0000 1010 00*,星号前的为前缀,星号表示任意主机号;

  • 最长前缀匹配(Longest-prefix Matching):路由表中有多个前缀与 ip 地址匹配时,选择最长的前缀跳转;

    • 前缀越长,地址块越小,路由信息就越精确和具体;

2.5. NAT(网络地址转换)

  • 本地和全球地址

    • 本地地址:机构内部使用,无需向管理机构申请;

    • 全球地址:全球唯一,必须向管理机构申请;

    • 问题:本地地址可能和全球地址重合,导致二义性

    • 解决方法:RFC 1918 规定了一些专用地址,只用作本地地址若目的地是专用地址,互联网中的路由器都不予转发

  • 三个专用 ip 地址块

    • 1)10.0.0.0 到 10.255.255.255:A 类,或记为 10.0.0.0/8,又称为 24 位块;

    • 2)172.16.0.0 到 172.31.255.255:B 类,或记为 172.16.0.0/12,又称为 20 位块(ℹ️);

    • 3)192.168.0.0 到 192.168.255.255:C 类,或记为 192.168.0.0/16,又称为 16 位块;

    • 复习 - 斜杠写法:将三个专用 ip 地址块看作三个子网,斜杠后的数字表示 ip 地址中,网络号所占的 bit 数;也等于子网掩码前面连续 1 的个数;

      • 如:B 类,网络号占 12 位,首字节 + 第二个字节的前面 4 位(固定为 0001);
  • 网络地址转换(NAT,Network Address Transition)

    • NAT 软件安装在专用网与互联网相连接的路由器上;

    • NAT 路由器至少具有一个有效的全球地址

    • 使用本地地址的主机必须经由 NAT 路由器才能与互联网进行通信;

    • NAT 路由器工作原理

      img_R8s955le1c

      • 注意:专用网内的主机可以充当服务器,响应专用网外的请求,但是需要改进 NAT 协议;

      • NAPT(网络地址与端口号转换):用端口号区分发往不同主机的请求,让多个不同本地地址的主机在同一时刻,用同一个全球 ip 地址和互联网通信;

        img_XRqZezLkd0

        • 端口号是加在全球 ip 地址上,转换到不同的网内 ip 地址;

3. ARP,DHCP 和 ICMP 协议

3.1. 概念

  • ARP(地址解析协议):将 ip 地址解析到链路层使用的 MAC 地址(物理地址);

  • DHCP(动态主机配置协议):指示主机如何获取 ip 地址、掩码、网关地址和 DNS(上网四件套)

  • ICMP(网络控制报文协议):网络连通性和差错控制;

3.2. 层次结构

img_XXak3ynR1n

  • ℹ️:DHCP 属于应用层协议

3.3. ARP 协议

  • 作用:ip 地址 → MAC 地址(物理地址)。MAC → ip 的为 RARP 协议;

  • ARP 高速缓存(ARP Cache):每个主机上都设有一个 ARP 高速缓存,存放局域网上所有主机和路由器的 ip 地址到 MAC 地址映射表

  • 局域网的 ip 数据报发送

    • 局域网的主机 A 欲向 B 发送数据;

    • 1)先查询 ARP 高速缓存,若有 B 的 ip 地址,则直接得到 B 的 MAC 地址,写入 MAC 帧,通过局域网发送;

    • 2)若无,广播发送 ARP 请求分组

      img_csce9hnKgN

      • ARP请求:广播,目的 ip 地址和目的 MAC 地址是全 1

      • ARP 响应:单播,定向发送;

  • 跨局域网的数据报发送:主机 A 先发送给网关地址的路由器,再由路由器转发

  • ARP 解析是自动进行的

  • ARP 典型的四种应用情况

    • 主机 → 本局域网上的另一主机;

    • 主机 → 其他网域的另一主机;

    • 路由器 → 局域网上的另一主机;

    • 路由器 → 其他网域的另一主机:也是先转发给局域网的另一路由器,再由其进行转发;

      • 其他网域指的是不和该路由器直接相连的网域;

3.4. DHCP 协议

  • 允许一台计算机加入新网络时自动获取 ip 地址,提供即插即用联网机制(plug-and-play networking)

  • 获取的信息:1)ip 地址,2)子网掩码,3)默认路由器的 ip 地址,4)域名服务器的 ip 地址(DNS)

  • DHCP 工作过程

    img_owyYjtZ6Gm

    • 0)DHCP 服务器被动打开,监听客户端的报文;

    • 1)需要 ip 地址的主机广播发送 DHCP 发现报文(DHCP DISCOVER),该主机成为 DHCP 客户

      • 本地网络上所有主机均收到该报文,但只有 DHCP 服务器响应报文
    • 2)DHCP 服务器从数据库中查找该计算机配置信息,若找到,则返回配置信息,否则从地址池中分配一个。服务器返回 DHCP 提供报文(DHCP OFFER)

    • 租用期:DHCP 分配的 ip 地址是临时的,客户只能在有限的时间内使用该地址,称为租用期;

      • 租用期由服务器决定,客户也可在 DISCOVER 报文中提出对租用期的要求;
    • 3)客户收到 OFFER 报文后,发送 DHCPREQUEST 报文,表示请求确认 DHCP 分配

    • 4)服务器发送 DHCPACK 报文,最终确认 DHCP 分配;

    • 5)租用期到时,客户发送 DHCPREQUEST 报文,确认 DHCP 分配情况(是否允许继续使用);

    • 6)服务器返回 DHCPNACK 报文,表示不允许继续使用,则客户端重新进入 DISCOVER。返回 DHCPACK 表示允许继续使用;

    • ℹ️:上述报文全为广播形式发送,基于 UDP 协议传输;

3.5. ICMP 协议

  • ICMP 协议允许主机进行差错和异常情况的报告,提高 ip 数据报交付的成功率;

  • ICMP 属于 IP 层协议,ICMP 报文是作为 ip 数据报的数据部分

  • ICMP 报文格式(了解)

    img_jHUQDImCjd

    • 5 种差错报文:终点不可达、源点抑制(路由器拥堵导致报文丢弃)、超时(TTL)、参数错误(首部字段值)、改变路由(路由器指示发送端修改路由);

    • 2 种询问报文:1)回送请求和回答报文(ping),2)时间戳请求和回答报文(32 位数,从 1900-01-01 开始的时间戳)

4. ipv6

4.1. 主要特点

  • 新的报文结构、巨大的地址空间、新的地址分配方式、更好的 QOS 支持、内置安全性、新的邻居发现协议、可扩展性和移动性;

4.2. 新的报文结构

img_ySvlCTi3JJimg_PQOOYffZko

  • 首部长度固定为 40 字节,称为基本首部(basic header),字段减少为 8 个。取消不必要的功能(如检验和),加速路由器处理速度。

  • 基本首部后可以跟 0 个或多个扩展首部,扩展首部 + 数据部分 = 报文的有效载荷(净载荷),报文长度最大 64 KB;

4.3. ipv6 地址

  • ipv6 的目的地址可以是以下三种基本类型

    • 单播(unicast):传统的点对点通信;

    • 多播(multicast):一点对多点通信;

    • 任播(anycast):新增类型,任播的目的是一组主机,但只需交付其中一个,通常选择最近的

  • 结点和接口

    • 实现 ipv6 的主机和路由器称为结点,ipv6 地址是分配给结点上面的接口;

    • 一个结点可以有多个单播地址,一个单播地址可以唯一表示一个结点;

  • ipv6 地址记法:冒号十六进制

    • 每 16 bit 用一个四位十六进制数表示,省略前导 0。共 8 个数,各数之间冒号分隔,如:2403:d400:1000:12:f49a:b3ed:24c8:a877

    • 一连串连续的 0 可以用一对冒号(::)取代:如 fe80::56c6:ffff:fe7b:5802零压缩只能使用一次,否则会有二义性;

    • CIDR 斜线表示法,如 12AB:0000:0000:CD30:0000:0000:0000:0000/60

    • 特殊地址:全 0,写为 ::,目前未分配。环回地址:::1

    • 映射 ipv4 的地址:80 位全 0 + 16 位全 1 + 32位 ipv4 地址,即 0000 0000 0000 0000 0000 FFFF (ipv4)