互联网中的网络层
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地址,用于指示发送到其他网络的数据包应该发送到哪个路由器。首先查路由表如果发现不是自己网络范围的所以要发到默认网关。源设备将数据包发送到默认网关,然后默认网关将根据自己的路由表将数据包发送到适当的下一跳。
- 下一跳:路由器在转发数据包时选择的下一个路由器或者目的地设备的地址
- 层次编制是指路由协议在路由信息传播时采用分层的方法。在分层编制中,路由信息首先传播到特定的节点,然后再传播到更广泛的节点,最终到达整个网络。这种分层的方法有助于减少路由信息的传播量和路由器之间的通信开销,提高了路由信息的有效传播效率。(路由器允许一定的空洞就是没必要全部都收到了再发出去)
- 层次编制允许路由信息的有效广播,某一子网前缀的分组全部整合发到路由器以后再根据路由表查询最长匹配的下一跳发到下一个地点
层次编址:特殊路由信息(more specific routes)
NAT: Network Address Translation 网络地址转换
- 外网不接受内网地址所以需要转换
- 本地网络只有一个有效IP地址:
- 不需要从ISP分配一块地址,可用一个IP地址用 于所有的(局域网)设备(省钱)
- 可以在局域网改变设备的地址情况下而无须通知外界
- 可以改变ISP(地址变化)而不需要改变内部的 设备地址
- 局域网内部的设备没有明确的地址,对外是不可见的(安全)
- 实现
- 出去转换原地址
- 回来转换目标地址
- 16-bit端口字段
- 6万多个同时连接一个局域网
- NAT同时兼备优缺点
- 路由器只应该对第3层做信息处理,而这里对端口号(4层)作了处理
- 违反了end-to-end 原则(端到端原则:复杂性放到网络边缘
- 无需借助中转和变换,就可以直接传送到目标主机
- NAT可能要被一些应用设计者考虑, eg, P2P applications
- 外网的机器无法主动连接到内网的机器上
- 地址短缺问题可以被IPv6 解决
- NAT穿越: 如果客户端需要连接在NAT后面的服务器,如何操作
- NAT 穿越问题
IPv6
- 出现原因
- IPV4的32-bit地址空间将会被很快用完
- 头部格式改变帮助加速处理和转发
- 头部格式改变帮助QoS IPv6
- 数据报格式
- 固定的40 字节头部
- 数据报传输过程中,不允许分片 (分组太大目标主机就发送一个ICMPV6给源主机,丢弃分组,源主机收到ICMPV6后重传)
- IPv6 头部
- IPv6 中的流通过 Flow Label 字段来标识,它是 IPv6 头部中的一个20位字段。Flow Label 的作用是为数据包分配一个独特的标识符,用于标识具有相同特性的数据包流
有关数据包流的解释:想象一下你正在播放视频流,并且同时在网页上浏览网页。视频流和网页浏览都是使用互联网连接来传输数据的活动,但它们具有不同的特性和需求:
视频流:需要连续、稳定的数据传输,以确保视频的流畅播放。视频数据包之间的延迟和丢包率对观看体验有重要影响。 网页浏览:需要快速响应,以确保页面能够快速加载。虽然页面数据包也需要传输,但对延迟和丢包率的容忍度通常较高。在这个例子中,视频流和网页浏览可以被认为是具有不同特性的数据包流。视频流需要优先处理,以确保其连续性和质量,而网页浏览的数据包可以在一定程度上被延迟处理,只要最终页面能够快速加载即可。
通过将具有相同特性的数据包流进行分类,网络设备可以采取不同的处理策略,以满足这些流的不同需求。例如,可以为视频流分配高优先级,以确保它们能够得到及时处理和传输,而为网页浏览分配较低优先级,允许它们在网络拥塞时被延迟处理。
-
IPv6的 "Next Header" 字段的作用是指示当前IPv6数据包中跟随在IPv6头部之后的下一个头部的类型或协议。通过 "Next Header" 字段,IPv6数据报的头部结构可以变得非常灵活和可扩展,支持多种不同类型的扩展和协议。在IPv6数据报中,可以存在多个扩展头部(Extension Header),每个扩展头部都有一个相应的 "Next Header" 字段来指示下一个头部的类型或协议。这意味着一个IPv6数据报可能包含一个或多个 "Next Header" 字段,用于指示数据包中下一个头部的类型或协议。
一些常见的 IPv6 数据报头部结构示例:
IPv6 头部 -> 扩展头部1 -> 扩展头部2 -> ... -> 扩展头部N -> 上层协议数据
- 同IPV4的一些区别
- Checksum: 被移除掉,降低在每一段中的处理 速度
- Options: 允许,但是在头部之外, 被 “Next Header” 字段标示
- ICMPv6: ICMP的新版本
- 附加了报文类型, e.g. “Packet Too Big”
- 多播组管理功能:指 IPv6 协议中用于管理多播组的一系列机制。多播组是一组共享相同 IP 多播地址的主机的集合,它们可以在网络上进行多播通信
- 从IPv4到IPv6的平移
- 不可以直接停掉升级,因为这不等同于应用升级(给房子刷漆),这相当于换掉房子的建筑材料
- 隧道技术:: 在IPv4路由器之间传输的IPv4数据报中携带IPv6数据报