1893 字
9 分钟
IPV4
2024-07-26

报头格式#

Pasted image 20240726180654

  • 版本: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 因此,网络层的数据部分的最大长度就为1500B20B1500B - 20B 分片时,分组从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地址#

分类的地址#

Pasted image 20240726193622

特殊地址#

ip地址源地址目的地址用途
全0OX未知的ip地址
- 0.0.0.0/0 默认路由
- 0.0.0.0在dhcp中表示本主机还未被分配到地址
- 0.0.0.0在socket的bind api中指绑定所有网卡
全1XO广播
127.X.X.XOO环回地址
主机号全1XO本网络的广播地址
主机号全0XX代表某个网络
组播地址XO组播
私网地址私网内部没有任何问题
分组跨越私网到外网的边界,网关需要进行NAT处理
私网内部没有任何问题
从私网到外网的分组,路由器对目标地址是私网地址的分组会丢弃
分组跨越外网到私网的边界会用NAT变换目标地址为私有地址

最大可用地址数量#

  • A类网络
    • 最大可用网络数
      • 减去全零(本地网络)
      • 减去127(本地环回)
    • 最大可用主机数
      • 减去全零(本网络)
      • 减去全一(255,广播)
  • B类网络
    • 最大主机数
      • 减去全零(本网络)
      • 减去全一(255,广播)
  • C类网络
    • 最大主机数
      • 减去全零(本机)
      • 减去全一(255,广播)

私有地址#

私网好像你自己家,你家里你爸爸妈妈用儿子指代你,可以说儿子这个名字就是你家的私有地址(实际上爸爸妈妈也是)。这个私网地址在不同私网指代的对象不同。你是你家的儿子,我是我家的儿子。在外面,你爸爸想要用儿子这个地址给你发消息是发不通的。此时你爸爸只能用你的全名给你发消息

类别范围网段个数
A10.0.0.0~10.255.255.2551
B172.16.0.0~172.31.0.016
C192.168.0.0 ~ 192.168.255.255256

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是最长的前缀,当匹配中时优先级最高

转发过程#

  1. TTL减去1 如果TTL减后为0则丢弃报文并向源主机发送icmp timeout消息
  2. 在转发表中匹配若干项,根据匹配的前缀最长的表项转发
  3. 实际做题时可以把转发表按前缀长度降序,从头到尾找到匹配的第一项

二叉转发表#

5efd3ebc-025c-47fe-a652-ab5c1f0ae3a6

其他#

  • 区分子网的ip数量,可用ip数量与可分配ip数量

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