计算机网络:网络层

网络层协议存在于每一个主机和路由器,网络层分为了数据平面和控制平面,网络层主要有两个功能

  • 数据平面功能->转发 : 将分组从路由器的输入接口转发到合适的输出接口的本地动作
    • 传统方式:基于目标地址匹配 + 转发表
    • SDN 方式:基于多个字段匹配 + 流表
  • 控制平面功能->路由 : 使用路由算法来决定分组从发送主机到目标接收主机的路径
    • 传统的路由算法 : 路由器中的单独路由器算法元件实现
    • software-defined networking(SDN): 在远程的服务器中实现

数据平面

路由器

路由器协议栈具有截断的协议栈:网络层,数据链路层,物理层

image-20230913090338827

输入端口

image-20230913091009625

给定目标地址查找转发表时采用了最长前缀匹配:表中寻找最长的匹配项并向与最长前缀匹配相关联的链路接口转发分组

image-20230913091500271

交换结构

将分组从输入缓冲区传输到合适的输出端口

  • 通过内存交换

  • 通过总线交换

  • 通过互联网络的交换

输出端口

image-20230913092208493

网际协议(Internet Protocol,IP)

接口是主机/路由器和物理链路的连接处,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联

IPv4 数据报格式

image-20230913155055390

版本号:IPv4:0100 OR IPv6:0110

首部长度: 以4字节为单位

服务类型:用于表示数据报的优先级和服务类型

总长度:首部+数据,以字节为单位

标识、标志位、片偏移

不同的链路层协议具有不同的MTU,有时需要对数据报分片传输(把数据切割后加上ip头),到端系统组装

  • 标识:发送方每产生一个数据报,标识计数器就加1,数据报需要分片时,该标识符的值就被复制到所有的数据报分片的标识字段中,接收方看到相同的标识符就知道是来自同一个数据报的分片
  • 标志位:3bit(NUL,DF,MF)
    • 最低一位记为MF(More Fragment),MF=1,则表示后面还有分片,如果MF=0表示这已是某个数据报的最后一个分片
    • 中间一位记为DF(Don’t Fragment),当DF=1时表示不能对ip数据报分片,DF=0表示允许分段
    • 最高位暂时没用
  • 片偏移:16bit,分片数据在原始数据报中的偏移量,以8字节位单位

生存时间(Time To Live):没经过一个路由器TTL-1,当TTL值为0时,就丢弃这个数据报

协议:标识IP数据报在传输层所采用的协议类型(如TCP为6、UDP为17 ICMP为1等等),IP 数据报到达其最终目的地确定数据应该交给那个传输层协议

首部校验和:和udp一样,不过每经过一个路由器,由于ttl的减一,需要重新计算该值

IPv4编码

32bit,一般用点分十进制表示法

  • IP地址构成:网络位+主机位 (网络位相同的IP地址,为同一网段)
  • 子网掩码: 用来确定IP地址的网络位(子网掩码与IP地址做与运算确定)
A类IPv4地址 B类IPv4地址 C类IPv4地址 D类IPv4地址 E类IPv4地址
网络标志位 0 10 110 1110 11110
IP地址范围 0.0.0.0~127.255.255.255 128.0.0.0~191.255.255.255 192.0.0.0~223.255.255.255 224.0.0.0~239.255.255.255 240.0.0.0~255.255.255.255
可用IP地址范围 1.0.0.1~127.255.255.254 128.0.0.1~191.255.255.254 192.0.0.1~223.255.255.254
子网掩码 255.0.0.0 255.255.0.0 255.255.255.0
是否可以分配给主机使用
网络数量(个) 126 ($2^7$-2) 16384 ($2^{14}$) 2097152 ($2^{21}$)
每个网络中可容纳主机数(个) 16777214 ($2^{24}$-2) 65534 ($2^{16}$-2) 254 ($2^{8}$-2)
适用范围 大量主机的大型网络 中等规模主机数的网络 小型局域网 留给Internet体系结构委员会(IAB)使用【组播地址】 保留,仅作为搜索、Internet的实验和开发用
备注 0.0.0.0为特殊地址,表示本网主机 255.255.255.255为特殊地址,用于定向广播

特殊ip地址

网络号 主机号 是否可以作为源地址 是否可以作为目的地址 备注/描述
全为0 全为0 允许 禁止 表示本网主机
全为0 Host ID 允许 禁止 表示特定主机
全为1 全为1 禁止 允许 定向广播地址(只会在局域网内转发)
127 任意合法的值 允许 允许 迂回地址,用于本地测试
Network ID 全为1 禁止 允许 直接广播地址

内网地址

A类:10.0.0.0-10.255.255.255

B类:172.16.0.0-172.31.255.255

C类:192.168.0.0-192.168.255.255

自动私有地址:169.254.0.0/16(当计算机无法获取IP地址时自动配置)

无类别域间路由选择 CIDR

Classless Inter-Domain Routing

网络号部分可以在任意的位置,地址格式 : a.b.c.d/x, 其中 x 是 地址中网络号的长度

动态主机配置协议 DHCP

Dynamic Host Configuration Protocol

允许主机在加入网络的时候,动态地从服务器那里获得ip等内容

  1. 主机以源ip为0.0.0.0,目标ip为255.255.255.255的UDP 67号端口局域网内广播DHCP发现报文
  2. DHCP服务收到一个DHCP发现报文时,使用本机ip和目标ip认为广播地址的255.255.255.255发送DHCP提供报文
  3. 发送端收到DHCP提供报文后发送DHCP请求报文
  4. DHCP服务器以DHCPACK报文回应请求报文

DHCP 返回 :

  • IP 地址
  • 第一跳路由器的 IP 地址(默认网关)
  • DNS 服务器的域名和 IP 地址
  • 子网掩码 ( 指示地址部分的网络号和主机号

网络地址转换 NAT

Network Address Translation

通过本地网络只有一个有效公网IP地址,带动内网和公网通信

  1. 对于内网外出的数据包NAT路由器,替换他的源地址和端口号为NATIP地址和新的端口号,并维护一种net转换表

    image-20230913214526811

  2. 对于返回的数据包,NAT路由器替换目标IP地址和端口号为原来的内网ip,端口

控制平面

Dijkstra算法

https://www.bilibili.com/video/BV1JV411t7ow/ 的 46:13 左右

一个源节点对于邻居节点的代价已知,其余节点代价标记为无穷大,从源节点到达某节点的代价比当前小的话,就改写改代价

自治系统内部路由选择协议:OSPF

自治系统间路由选择协议:BGP

ICMP 因特网控制报文协议

Internet Control Message Protocol

ICMP 报文是作为 IP 有效载荷承载的

ping和tranceroute都是通过icmp实现的

🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊