计算机网络——IPv4(25王道最新版)
网络层
- 前言
- IPv4 分组(数据报)
- 格式
- IP数据报的“分片”问题
- 分片大小与片偏移问题
- IP地址(分类编址,最初阶段)
- 分析传输过程(非常重要)
- 一些特殊用途的IP地址
- 子网划分和子网掩码(重难点)
- 子网划分
- 子网掩码
- 默认路由
- 小节
- 结语
前言
- 对于网络层这一章里面 最重要的就是IPv4 是最高频的考点 同时也是比较难以理解的知识点 常常在真题里面结合答题进行考察
- 学习顺序:
- IP分组——最初的IP地址——子网划分与子网掩码——CIDR(无分类编址)——NAT(网络地址转换)(符合时代的发展顺序)
IPv4 分组(数据报)
- 首先我们需要知道的是IPv4 到底是什么东西 我们要有一个认知
- 它其实是需要拆成 IP 与 v4两部分来理解的
- IP指的是IP协议 v4指的是这个协议的版本号
- 这里如果你已经学完了网络层的知识 在回过头来看下面这张图片的时候就不那么难绷了
- 对于我们一直说的ARP协议 就是建立一个主机IP地址与MAC地址的映射(类似于Map)
- 举个例子 我们如果传输了一个无效的IP数据报时(比如当一个大的数据报需要分片 但是DF=1的时候) 路由器就会将这个IP数据报丢弃 同时需要给源主机发送ICMP报文 通知异常情况
格式
-
第一层
-
第二层
-
第三层
IP数据报的“分片”问题
分片大小与片偏移问题
- 案例
- 对于分片大小:
- 如下图所示 我们在链路二上传输的时候 发现MTU 仅仅为1500(我一般记忆为max transmit unit)
- 此时我们就需要对IP数据报进行分片 这里的每一个分片都是一个新的IP数据报 其同样遵循我们前面所提到的IP数据报的格式 也就是首部+数据部分
- 我们就假设首部为最小的20B 则实际上我们前两个1500B大小的数据报里面只有1480B的数据 所以最后一个IP数据报的数据部分大小自然而然的就是(3980-1480-1480=1020B)
- 对于片偏移的问题:
-
引入片偏移字段本质上就是帮助我们的目的主机能够按顺序 对于这些乱序到达的分片进行重组
-
再次观察分片问题的图 我们发现 第一个分片的片偏移量=0 这个不难理解 但是第二个就变成了185
-
这个是怎么来的呢?
-
这是由于第一个数据部分的大小是1480B 也就说明了 我们的第二个分片的数据部分在原始的数据报中是从1480开始存储的 而片偏移的单位是8B 所以1480/8 =185 第三个同理
-
小节
IP地址(分类编址,最初阶段)
- 这里的默认网关可以理解为一个路由器 表示这个主机需要向互联网上发送IP数据报的时候 他就会知道应该先发给默认网关 然后这个路由器会帮他继续转发到互联网上
分析传输过程(非常重要)
- 在这之前我们需要知道一个很重要的事情:
- 我们要知道交换机实现的是物理层和数据链路层的功能 所以 我们的主机和我们的交换机的传输都是以帧为单位的 也就是我们对于每个IP数据报 都需要将它封装成帧来进行传输
- 例如 此时H1需要向H7发送一个数据报
- 我们来分析一整个完整的流程:
- 由于发现H1与H7并不属于一个网络 此时H1就需要将这个数据报封装成帧发送给默认网关(因为他知道是需要先由这个路由器来帮忙转发出去) 而这个路由器的IP地址是我们一开始就配置好的
- 我们依据ARP协议得到它的MAC地址 H1将这个数据报封装成帧的时候 可以将这个帧的目的MAC地址设置为B2接口所对应的MAC地址 经过交换机逐层转发到达路由器的B2接口
- 学校的路由器就会去根据IP数据报的目的地址 查询转发表 发现应该从B0接口 转发出去 同时将MAC帧的目的MAC地址修改为C0
- 到达公司路由器 它同样去查表 发现应该从C2转发出去 同时将目的MAC地址修改为H7 这样就顺利的经过交换机成功抵达H7 传输成功
- 为什么公司的路由器知道H7的MAC地址呢?
- 类似的 还是根据ARP协议 这个协议可以使得同一个网络内的主机路由器之间能够根据彼此的IP地址查询到对应的MAC地址
一些特殊用途的IP地址
这个结论需要重点记忆 后面在学习更复杂的知识时需要用到
子网划分和子网掩码(重难点)
子网划分
- 引入
- 对于16bit的主机号所能表示的主机数量为2^16-2(除去全0和全1的特殊情况)但是现实情况却用不了这么多IP地址
- 假如学校有四个校区就可以在剩余16比特里面扣出2比特作为子网号
- 根据子网划分技术 给每个校区分配一个独立的子网 从而提高了IP地址利用率
子网掩码
-
为什么需要引入子网掩码?
-
在思考这个问题之前不妨先想一下 在一台主机传输IP数据报之前 首先需要干嘛
-
是不是需要先判断我们的目的IP和我们的当前主机的IP地址是否从属于一个网络
-
如果不是 我们就交给路由器帮助我们转发
-
对于传统的IP地址 我们只需要根据类型(A,B,C)来对比前8,16,24 bit是否一致就行
-
但是现在划分子网之后 我们只有网络号+子网号都一致 才能说明从属于一个网络
-
以两个子网为例(也就是子网号占1bit 表示0/1 ) 此时网络号+子网号=16+1=17bit
-
好了现在回答最开始的问题
-
子网掩码就是帮助我们判断是否从属于一个网络
-
我们将子网掩码的前17位全部设置为1 后面15位(因为我们不关心 主机号)所以设置为0
-
转换成10进制 8个bit一组 也就是255.255.128.0 这是我们熟悉的格式
-
我们现在的逻辑是这样的 :
-
就是对于我们的目的IP地址和源IP地址在一开始都与子网掩码进行一次与操作 取得各自的高17位进行对比 如果一样则说明从属于一个网络 这样的话 我们就可以借助ARP协议得到目的地址对于的MAC地址 封装成帧 成功送达目的主机
-
这里需要补充一个点 我记得是在计组里面学过——与运算 简单回忆一下运算规则就行——任何数 与上0 都是0 任何数 与上1 都是他本身 这也解答了我们为什么上面这样设置子网掩码
默认路由
小节
结语
对于计算机网络层和数据链路层的知识真的是杂乱繁多 而且理解起来并不容易 所以我在每个小点都附上了注释 希望能够帮助大家理解