0%

计算机网络网络层02

CIDR

无类域间路由 Classless InterDomain Routing。

把 NetID 和 SubID 统一使用 NEwork Prefix 表示,可以任意长度。
a.b.c.d/x x 为前缀长度。

  • 消除了传统的 A 类、B 类和 C 类地址界限
  • 融合子网地址与子网掩码,方便子网划分
  • 提高 IPv4 地址空间分配效率
  • 提高路由效率
    • 将多个子网聚合为一个较大的子网
    • 构造超网(supernetting)
  • 路由聚合(route aggregation)
    • 如果地址不连续就会造成路由黑洞

DHCP

主机如何获得 IP 地址

静态配置,硬编码

默认网关:当一个子网内的数据报要离开子网时,应该发送到哪个接口上进行转发。

动态配置 DHCP

Dynamic Host Configuration Protocol 。

  • 从服务器动态获取
    • IP 地址
    • 子网掩码
    • 默认网关
    • DNS 服务器名称与 IP 地址
  • 即插即用
  • 允许地址重用 (一个主机离开网络,IP 可以分给别的主机)
  • 支持在用地址续租
  • 支持移动用户加入网络

报文:

  • 主机广播 DHCP discover 发现报文
  • DHCP 服务器利用 DHCP offer 提供报文进行响应
  • 主机广播请求 IP 地址 DHCP request 请求报文
  • DHCP 服务器分配 IP 地址 DHCP ack 确认报文

第二次广播告诉其他 DHCP 服务器已经有服务器为我分配地址了,如果你们已经分配了地址就可以收回。

DHCP工作流程

DHCP

DHCP 协议在应用层实现

  • 请求报文封装到 UDP 数据报中
  • IP 广播
  • 链路层广播

DHCP 服务器构造 ACK 报文

  • 包括分配给客户的 IP 地址、子网掩码、默认网关、DNS服务器地址

NAT

网络地址转换。

动机

  • 只需/能从 ISP 申请一个 IP 地址
    • IPv4 地址耗尽
  • 本地网络设备 IP 地址的变更,无需通告外界网络
  • 变更 ISP 时,无需修改内部网络设备 IP 地址
  • 内部网络设备对外界网络不可见,即不可直接寻址(安全)

实现

  1. 替换:利用(NAT IP 地址,新端口号)替换每个外出 IP 数据报的(源 IP 地址,源端口号)
  2. 记录:将每对(NAT IP 地址,新端口号)与(源 IP 地址,源端口号)的替换信息存储到 NAT 转换表
  3. 替换:根据 NAT 转换表,利用(源 IP 地址,源端口号)替换每个进入内网 IP 数据报的(目的 IP 地址,目的端口号),即(NAT IP 地址,新端口号)

16 bit端口号字段可以同时支持 6W 多并行连接,一般没问题。

争议

  1. 路由器应该只处理第三层功能,不应该去处理传输层的端口号字段,违背了层次关系
  2. 违背端到端通信原则:应用开发者必须考虑到 NAT 的存在,如 P2P 应用
  3. 地址短缺问题应该由 IPv6 来解决

NAT 穿透/打洞

方案一 静态配置

静态配置 NAT,将特定端口的请求转发给服务器

方案二 IGD 协议

利用 UPnP(Universal Plug and play)互联网网关设备协议(IGD-Internet Gateway Device)自动配置学习到 NAT 公共 IP 地址,在 NAT
抓换表中,增删端口号映射。

方案三 中继 relay

如 Skype

  1. NAT 内部的客户与中继服务器建立连接
  2. 外部客户也与中继服务器建立连接
  3. 中继服务器桥接两个连接的分组

ICMP

Internet Control Message Protocol

ICMP 功能

支持主机或路由器完成

  • 差错(或异常)报告
  • 网络探询

两类 ICMP 报文

  • 差错报告报文(5种)
    • 目的不可达
    • 源抑制(Source Quench)(缓存已满,希望源主机降低发送速率)
    • 超时/超期 (TTL)
    • 参数问题 IP 协议头参数设置错误
    • 重定向(Redirect)路由器发现报文中目的 IP 不应该由自己转发,而通过别的路由器转发
  • 网络探询报文(2组)
    • 回声(Echo)请求与应答报文(Reply)ping
    • 时间戳请求与应答报文 (NTP?)

例外情况

几种不发送 ICMP 差错报告报文的特殊情况

  • 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文
  • 除第一个 IP 数据报分片外,对所有后续分片均不发送 ICMP 差错报告报文
  • 对所有多播 IP 数据报均不发送 ICMP 差错报告报文
  • 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的 IP 数据报不发送 ICMP 差错报告报文

不再使用的

早期定义的

  • 信息请求与应答报文
  • 子网掩码请求和应答报文
  • 路由器询问和通告报文

报文格式

ICMP 报文封装到 IP 数据报中传输
ICMP

ICMP 差错报告报文数据部分的封装

ICMP差错

Traceroute

1.源主机向目的主机发送一系列 UDP 数据报

  • 第1组 IP 数据报 TTL=1
  • 第2组 IP 数据报 TTL=2 etc
  • 目的端口号为不可能使用的端口号
  1. 当第 n 组数据报(TTL=n)到达第 n 个路由器时
  • 路由器丢弃数据报
  • 向源主机发送 ICMP 报文(type=11,code=0)
  • ICMP 报文携带路由器名称和 IP 地址信息
  1. 当 ICMP 报文返回到源主机时记录 RTT
  2. 停止准则
  • UDP数据报最终到达目的主机
  • 目的主机返回目的端口不可达 ICMP 报文
  1. 源主机停止

短期内的探测,路由表信息不会很快更新。

IPv6

动机

  1. 32位 IPv4 地址空间已分配殆尽
  2. 改进首部格式
    • 快速处理/转发数据报
    • 支持 QoS

数据报格式

  • 固定长度的40字节基本首部
  • 不允许(路由器)分片,由主机分片,目的主机重组

Ipv6

路由器不需要处理扩展首部,只需要处理固定40字节的首部。

Ipv6协议

优先级 priority

标识数据报的优先级,QoS,为了区分不同的数据报。

流标签 Flow Label

标识同一流中的数据报,还在讨论中。

下一个首部 next header

标识下一个选项首部或上层协议首部(TCP首部)

跳步限制 TTL

VS IPv4

  1. 校验和(checksum)彻底移除,以减少每跳处理时间
  2. 选项(options),允许,但是从基本首部移出,定义多个选项首部,通过下一个首部字段指示
  3. ICMPv6:新版本 ICMP
    1. 附加报文类型,比如 Packet Too Big,因为 IPv6 不分片,如果数据报太大会向源主机发送该 ICMPv6 报文,由源主机决定是否分片;
    2. 多播组管理功能;

地址表示形式

128 位按 16 bit 一组划分 8 组 16 进制数用:连接。

压缩形式

由于 IPv6 地址空间很大,有些地址中有很多0,所以采用压缩格式书写:FF01:0:0:0:0:0:0:43 压缩为 FF01::43

IPv4 嵌入形式

IPv4 和 IPv6 会共存一段时间,为了兼容 IPv4,把前 80 个 bit 固定为 0,接下来 16 bit 为 1,剩下的 32 位写成点分十进制。

0:0:0:0:0:FFFF:192.168.68.2::FFFF:192.168.68.2

地址前缀

2002:43c:476b::/48 IPv6不再使用子网掩码,使用 CIDR。

URLs

冒号会出现歧义,用中括号包起来:http://[3FFE::1:800:200C:417A]:8000

IPv6 基本地址类型

单播 unicast

一对一通信,地址能出现在发送和接收端。

多播 multicast

一对多通信,地址只能出现在接收端,没有广播地址,广播被定义为特殊的多播。

任意播 anycast

一对一组之一(最近一个通信),数据报会被送到其中之一。

cast

Ipv4 过度 IPv6

不可能在某个时刻所有路由器同时被更新为 IPv6,不会有标志性日期,也做不到。
IPv4 和 IPv6 路由器共存的网络如何运行?

隧道 tunneling

IPv6 数据报在传输过程中经过 IPv4 网络时,把 IPv6 数据报作为 IPv4 数据报的载荷进行封装,穿越 IPv4 网络。

tunnel