互联网中的网络层
IP数据报格式
-
ver: 四个比特的版本号(IPV4 0100, IPV6 0110)
-
headlen:head的长度(头部长度字段(IHL)指定了头部的长度,以32位字(4字节)为单位计算。这个字段的值乘以4就是头部的实际长度,因为每个值代表4个字节。所以,如果IHL字段的值为5,那么头部长度就是5 * 4 = 20字节,IP数据包头部最小长度是20所以这个headlen字段最小的值是5)
-
flgs字段是分片用的
-
upper layer: (该字段是8位长,就是protocol字段,它指示了数据部分所使用的上层协议类型。以下是一些常见协议类型的数值表示:1表示ICMP(Internet控制消息协议);6表示TCP(传输控制协议);17表示UDP(用户数据报协议))
-
这里的Internet checksum是头部的校验和
-
Option:比如说有些option就是记录下途中每个路由器的地址
IP分片和重组(Fragmentation & Reassembly)
- 网络链路有MTU(最大传输单元,是包括头部的)——链路层帧所携带的最大数据长度
- 不同的链路类型
- 不同的MTU
- 大的IP数据报在网络上被分片(“fragmented”)
- 一个数据报被封为若干个小的数据报(每个小的数据报必须都要加上头部)
- 相同的ID
- 不同的偏移量(以八个字节为单位偏移量)
- 最后一个分片的fragflag标记为0,反之为1
- “重组”旨在最终的目标主机进行(要是每个路由器都充足的话就太忙了)
- 胖分组加入中间有分片没到就全扔了
- IP头部的信息被用于表示,排序相关分片
- 一个数据报被封为若干个小的数据报(每个小的数据报必须都要加上头部)
IP编址
- IP地址:32位标识,对主机或者路由器的接口编址(是标识接口点的而不是标识主机)
- 接口:主机/路由器和物理链路的连接处
- 路由器通常多个接口
- 主机也有可能多个接口
- IP地址和每个接口相关联
- 一个IP地址和一个接口相关联
子网(Subnet)
- IP地址:
- 子网部分(高位bits)
- 主机部分(低位bits)
- 什么是子网
- 一个子网内的节点(主机或路由器)它们的IP地址的高位部分相同,这些节点构成的网络的一部分叫做子网(条件一:前缀一样)
- 无需路由器介入,子网内个主机可以在物理上相互直接到达(条件二:分组收发不需要路由器,一跳可达,可借助交换机)
- 把纯子网的所有信息聚集为一条向外发送,可以减少在广域网范围路由表表项的数量,减小传输和计算路由信息的代价(所以说路由表的单位实际上是网络而不是IP地址)
- 判断子网数量 (看"孤岛”): 把路由器连线断开看分区比如下图就是六个子网
IP地址分类
- 单播地址(我->你)
- A类:地址的最高位为0,第一个字节的其他7个比特代表网络号,后面三个字节的24比特代表主机号(一共有126个网络因为2^7-2,不要全0的网络和全1的网络,这是IP地址的约定,每个网络2^24-2个主机)
- B类:最高地址为10,前面两个字节剩余部分代表网络号,后面两个字节代表主机号
- C类:最高地址为110,前面三个字节剩余部分代表网络号,后面一个字节代表主机号
- 主播地址(我->所有)
- D类:最高地址为1110,后面就是主播地址(主播组成员)
- 预留地址
- E类:最高地址为11110
- 一些约定
- 回路地址:就是自己的地址(也叫测试地址,因为通常用于本地测试,诊断和通信,不涉及真实的网络通信)
- 内网(专用)IP地址
- 专用地址:地址空间的一部分供专用地址使用
- 永远不会被当做公用地址来分配,不会与公用地址重复
- 只在局部网络中有意义,区分不同的设备
- 路由器不对目标地址是专用地址的分组进行转发
- 举例来说,一个公司内部网络可以使用192.168.0.0/24的地址范围,例如192.168.1.0到192.168.1.255之间的IP地址,来连接其内部设备,比如电脑、打印机、服务器等。这些地址只在公司内部可用,不会被互联网路由器转发
- 专用地址范围
- 无类地址:按需分配IP地址
- 因为是按需分配所以无法直接通过用IP地址在路由表查询,需要使用CIDR
CIDR:Class InterDomain Routing(无类域间路由)
- 子网部分可以在任何位置
- 地址格式:a.b.c.d/x,其中x是地址中子网号的长度(为1说明是网络号,为1为主机号)取与即可
- 转发表和转发算法:
- 目标子网号
- 子网掩码
- 下一跳
- 端口
- 步骤
- 取出目标IP
- 和每个表项子网掩码做个与(就可以把网络号取出来)
- 取出来判断和目标子网号是否一样,要是不一样接着往下找
- 一样的话表项就找到了
- 只有最后一跳目标主机的主机号才有用
- 这里再次详细叙述一下一次数据报从源主机到目标主机的过程 :某路由器从某个端口收到数据报,匹配表项,知道从哪个端口放出去,下一跳的IP地址是什么,找到IP地址相对应的网卡MAC地址(根据ARP协议,这还是匹配IP地址和MAC号的协议),然后重新解封装封装继续转发,直到最后一跳,到达目标网络,交给目标主机(只有最后一条需要用到主机号)
如何获得IP地址
- 自动分配IP地址
- 系统管理员将地址配置在一个文件中
- 上网必备的四个信息
-
IP地址(Internet Protocol Address)
-
子网掩码(Subnet Mask):两种表示方式
-
默认网关(Default Gateway):是一个设备(通常是路由器)的IP地址,用于将数据包发送到其他网络。当一个设备需要发送数据到不在同一子网内的目标时,它将数据包发送到默认网关,由默认网关来负责将数据包转发到正确的目标。
-
DNS服务器(Domain Name System Server)
-
- DHCP:Dynamic Host Configuration Protocol 从服务器中动态获得一个IP地址
- 手动分配IP地址
- 非最大ISP就请求大网给你分配小网
- 最大ISP找ICANN分配IP地址(Internet Corporation for Assigned Names and Numbers)
Dynamic Host Configuration Protocol(动态主机配置协议)
- 目标:允许主机在加入网络的时候,动态的从服务器哪里获取IP地址
- 可以更新对主机再用IP地址的租用期-租期快到了
- 重新启动时,允许重新使用以前用过的IP地址
- 支持移动用户加入到该网络(短期在网)
- DHCP工作概况
层次编址:路由聚集(route aggregation)
- 第一个路由器:当一个数据包被发送到一个目的地时,首先它需要知道它要去的第一个路由器,也就是数据包的第一个下一跳。
通常情况下,源设备(发送数据包的设备)已经配置了默认网关(Default Gateway)。默认网关是一个设备的IP地址,用于指示发送到其他网络的数据包应该发送到哪个路由器。首先查路由表如果发现不是自己网络范围的所以要发到默认网关。源设备将数据包发送到默认网关,然后默认网关将根据自己的路由表将数据包发送到适当的下一跳。
- 下一跳:路由器在转发数据包时选择的下一个路由器或者目的地设备的地址
- 层次编制是指路由协议在路由信息传播时采用分层的方法。在分层编制中,路由信息首先传播到特定的节点,然后再传播到更广泛的节点,最终到达整个网络。这种分层的方法有助于减少路由信息的传播量和路由器之间的通信开销,提高了路由信息的有效传播效率。(路由器允许一定的空洞就是没必要全部都收到了再发出去)
- 层次编制允许路由信息的有效广播,某一子网前缀的分组全部整合发到路由器以后再根据路由表查询最长匹配的下一跳发到下一个地点