报头格式

- 版本:4,ipv6为6
- 首部长度:
- 以4B为单位
- 最小为5
- 最大是15
- 一般情况下报头的首个字节是0x45,可以根据0x45来定位报头位置
- 区分服务:QOS
- 总长度(16bit)
- 单位是1B
- 包括头部和载荷
- 标识(16bit):同一数据报的分片使用同一标识
- 标志:|保留|DF|MF|
- DF:Don’t Fragment 不要分片,为1时禁止中间节点对报文进行分配
- MF:More Fragment 还有更多分片?为1还有,如果是不分片MF=0
- 片偏移:
- 相对于分片前的分组的起始位置的偏移量
- 8B为一个单位,也就是说除了最后一个分组其他分组的数据部分都要8字节对齐
- TTL:
- 每一个中间节点减去1,减到0丢弃分组
- 协议:
- 指示上层协议类型
- TCP:6
- UDP:17
- 校验和 校验和
- 源地址、目的地址(各32bit):来源和目标的IP地址 源地址和目的地址的顺序与以太网帧相反 ../链路层/局域网#以太网帧
- 可选
- 填充 报头中的数字都是大端序,与内存中的字节是小端序不同
分片
以太网的MTU是1500B 因此,网络层的数据部分的最大长度就为 分片时,分组从0开始,通过将每一个分组的字节偏移量/8得到片偏移量
例:已知数据报首部为20B,数据部分为3800B,将其分为长度不超过1420B的数据报片 每一片的数据部分长度=1420−20=1400=1420−20=1400 分为三片:1400+1400+1000=38001400+1400+1000=3800 分别的偏移量: 第一片:0÷8=00÷8=0 第二片:1400÷8=1751400÷8=175 第三片:2800÷8=3502800÷8=350
IPV4地址
分类的地址

特殊地址
| ip地址 | 源地址 | 目的地址 | 用途 |
|---|---|---|---|
| 全0 | O | X | 未知的ip地址 - 0.0.0.0/0 默认路由 - 0.0.0.0在dhcp中表示本主机还未被分配到地址 - 0.0.0.0在socket的bind api中指绑定所有网卡 |
| 全1 | X | O | 广播 |
| 127.X.X.X | O | O | 环回地址 |
| 主机号全1 | X | O | 本网络的广播地址 |
| 主机号全0 | X | X | 代表某个网络 |
| 组播地址 | X | O | 组播 |
| 私网地址 | 私网内部没有任何问题 分组跨越私网到外网的边界,网关需要进行NAT处理 | 私网内部没有任何问题 从私网到外网的分组,路由器对目标地址是私网地址的分组会丢弃 分组跨越外网到私网的边界会用NAT变换目标地址为私有地址 |
最大可用地址数量
- A类网络
- 最大可用网络数
- 减去全零(本地网络)
- 减去127(本地环回)
- 最大可用主机数
- 减去全零(本网络)
- 减去全一(255,广播)
- 最大可用网络数
- B类网络
- 最大主机数
- 减去全零(本网络)
- 减去全一(255,广播)
- 最大主机数
- C类网络
- 最大主机数
- 减去全零(本机)
- 减去全一(255,广播)
- 最大主机数
私有地址
私网好像你自己家,你家里你爸爸妈妈用儿子指代你,可以说儿子这个名字就是你家的私有地址(实际上爸爸妈妈也是)。这个私网地址在不同私网指代的对象不同。你是你家的儿子,我是我家的儿子。在外面,你爸爸想要用儿子这个地址给你发消息是发不通的。此时你爸爸只能用你的全名给你发消息
| 类别 | 范围 | 网段个数 |
|---|---|---|
| A | 10.0.0.0~10.255.255.255 | 1 |
| B | 172.16.0.0~172.31.0.0 | 16 |
| C | 192.168.0.0 ~ 192.168.255.255 | 256 |
NAT(Network Address Translation)
小王的儿子小小王刚刚出生了,但是小王还没给小小王取名字,平时小王都是叫他儿子小小王,小小王只有一个私有地址。小小王想要在拼多多上买奶嘴,但是填写收件人时发现小小王不是一个合法的公网地址,小小王无奈之下只能委托爸爸开启NAT服务,让爸爸充当代理购买奶嘴。爸爸要维护一张NAT表。维护一张(自己的IP地址,端口号)到(私有ip地址,端口号)的映射。自己收到快递员寄来的收件人是自己的包裹时,需要根据快递单号(端口号)转发到小小王。小王刚答应儿子时才发现自己其实也没有正式的名字,小王也不是正式的名字。于是买奶嘴这件事情要交给老王去办。要NAT套NAT 安装了NAT软件的路由器叫NAT路由器,它至少有一个有效的外部全球IP地址 每个路由器中存在一张NAT转换表,将私有地址+端口号与路由器IP+端口号一一对应,通过这一方法即可实现访问内网的计算机。
子网划分与子网掩码
子网划分
分类IP地址的缺点
- IP地址空间利用率低
- 两级IP地址不够灵活 子网划分 将原本IP地址的主机号再次进行划分,
IP地址 ::= <网络号> <子网号> <主机号> - 主机号不能全0或全1
- 全0:本机
- 全1:广播
- 主机号至少要有两位
- 子网划分后,网络对外仍然表现为一个网络,外部看不到内部网络中的子网划分。
- 子网划分的意义
- 增加子网的数量
- 减小广播域
- 减少主机数量
- 提高IP的利用率
- 不会增加网络的数量
子网掩码
CIDR 无分类域间路由选择
不再采用网络号+子网号+主机号的方式,放弃了ABC类地址划分的概念。 CIDR记法:使用一定长度的位代表网络前缀,表示为IP地址/网络前缀位数,如128.14.32.0/20 网络前缀的位数是可变的,网络前缀相同的地址合称为一个地址块
路由聚合
将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合
为部门划分子网
- 定长子网划分
- 不定长~
路由器转发过程
转发表项结构
网络地址 网络前缀 输出端口 下一跳IP地址
最长前缀匹配
为了确保链路状态数据库与全网的状态保持一致,OSPF 还规定每隔一段时间(如30分钟)要刷新一次数据库中的链路状态。因为一个路由器的链路状态只涉及与相邻路由器的连通状态,与整个网络的规模并无直接关系,所以当互联网规模很大时,OSPF 要比RIP好得多当网络地址匹配到了若干个转发表项时,以网络前缀最长的路由表项为准
- 默认路由 0.0.0.0/0是最短的前缀,故0.0.0.0/0优先级最低
- 特定主机路由 x.x.x.x/32是最长的前缀,当匹配中时优先级最高
转发过程
- TTL减去1 如果TTL减后为0则丢弃报文并向源主机发送icmp timeout消息
- 在转发表中匹配若干项,根据匹配的前缀最长的表项转发
- 实际做题时可以把转发表按前缀长度降序,从头到尾找到匹配的第一项
二叉转发表

其他
- 区分子网的ip数量,可用ip数量与可分配ip数量
[!例子] 某网络为192.168.1.0/24,该网络仅有一台地址为192.168.1.1的路由请 那么子网的ip数量为256 可用254 可分配253
