计算机网络:网络层
网络层协议存在于每一个主机和路由器,网络层分为了数据平面和控制平面,网络层主要有两个功能
- 数据平面功能->转发 : 将分组从路由器的输入接口转发到合适的输出接口的本地动作
- 传统方式:基于目标地址匹配 + 转发表
- SDN 方式:基于多个字段匹配 + 流表
- 控制平面功能->路由 : 使用路由算法来决定分组从发送主机到目标接收主机的路径
- 传统的路由算法 : 路由器中的单独路由器算法元件实现
- software-defined networking(SDN): 在远程的服务器中实现
数据平面
路由器
路由器协议栈具有截断的协议栈:网络层,数据链路层,物理层
输入端口
给定目标地址查找转发表时采用了最长前缀匹配:表中寻找最长的匹配项并向与最长前缀匹配相关联的链路接口转发分组
交换结构
将分组从输入缓冲区传输到合适的输出端口
通过内存交换
通过总线交换
通过互联网络的交换
输出端口
网际协议(Internet Protocol,IP)
接口是主机/路由器和物理链路的连接处,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联
IPv4 数据报格式
版本号: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等内容
- 主机以源ip为0.0.0.0,目标ip为255.255.255.255的UDP 67号端口局域网内广播DHCP发现报文
- DHCP服务收到一个DHCP发现报文时,使用本机ip和目标ip认为广播地址的255.255.255.255发送DHCP提供报文
- 发送端收到DHCP提供报文后发送DHCP请求报文
- DHCP服务器以DHCPACK报文回应请求报文
DHCP 返回 :
- IP 地址
- 第一跳路由器的 IP 地址(默认网关)
- DNS 服务器的域名和 IP 地址
- 子网掩码 ( 指示地址部分的网络号和主机号
网络地址转换 NAT
Network Address Translation
通过本地网络只有一个有效公网IP地址,带动内网和公网通信
对于内网外出的数据包NAT路由器,替换他的源地址和端口号为NATIP地址和新的端口号,并维护一种net转换表
对于返回的数据包,NAT路由器替换目标IP地址和端口号为原来的内网ip,端口
控制平面
Dijkstra算法
https://www.bilibili.com/video/BV1JV411t7ow/ 的 46:13 左右
一个源节点对于邻居节点的代价已知,其余节点代价标记为无穷大,从源节点到达某节点的代价比当前小的话,就改写改代价
自治系统内部路由选择协议:OSPF
自治系统间路由选择协议:BGP
ICMP 因特网控制报文协议
Internet Control Message Protocol
ICMP 报文是作为 IP 有效载荷承载的
ping和tranceroute都是通过icmp实现的
🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊🕊