IP数据报格式

TCP/IP协议栈

  • image-20221009151537340
  • IP数据报主要格式 image-20221009151618409
  • 首先发送的是首部,首部分为固定部分以及可变部分image-20221009151748549
  • image-20221009151849391
    • 版本字段:IPv4/IPv6?
    • 首部长度: 单位是4B,最小为5,实际会被填充成四的倍数
    • 区分服务:期望获得哪种类型服务
    • 总长度: 首部+数据,单位是1B
    • 生存时间(TTL):IP分组的保质期,经过一个路由器-1,变为0则丢弃,防止无法交付的数据报无限地兜圈子。防止消耗网络资源。
    • 协议:数据部分的协议image-20221009152639531
      • TCP:面向连接的服务
      • UDP:不是面向连接,不建立连接是有可能产生丢包现象的
    • 首部检验和:只检验首部(检验首部数据是否变化或者出错)
    • 源地址以及IP地址:32位
    • 可选字段:支持排错,测量以及安全等措施
    • 填充:,全0,把首部补全成4B的整数倍

      IP数据报分片

      MTU最大传送单元

  • 链路层数据帧可封装数据的上限
    • image-20221009155352562
  • 以太网的MTU是1500字节
  • 过长就会分片,不分则不传递,返回ICMP的差错报文
  • image-20221009161328524
    • 标识:同一数据报的分片使用同一标识
    • 标志:只有两位有意义
      • 中间位DF,DF=1(禁止分片),DF=0(允许分片)
      • 最低位MF,MF=1(后面还有分片),MF=0(代表最后一片/没分片)(只有经过DF=0的前提下才能进行)
    • 片位移:指出较长分组分片后,某片在原分组中的相对位置。以8B为单位。
      • 离开头0字节的距离/8;

        IP地址

  • 全世界唯一的32位/4字节标识符
  • 组成{<网络号>,<主机号>}
  • 采用点分十进制
  • 网桥:不能分割广播域,仍然是一个局域网以及一个网络号

    分类的地址

    image-20221009163738683

    特殊的IP地址

  • image-20221009165513754

    私有IP地址

    image-20221009170129863

    网络地址转换NAT

  • 在传用网连接到因特网的路由器上安装NAT软件,安装了NAT软件的路由器叫NAT路由器,它至少有一个有效的外部全国IP地址

    子网划分与子网掩码

  • 分类的IP地址的弱点:

1.IP地址空间的利用率有时很低
2.两级IP地址不够灵活

子网划分

  • 三级IP地址组成image-20221010121507901
  • 某单位划分子网后,对外仍然表现为一个网络,即本单位外的网络看不见本单位内的子网的划分

    子网掩码

  • 子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在广域网上。
  • image-20221010123420588橙色的代表网络号,蓝色代表主机号
  • 两级与三级的IP地址的子网掩码很简单,只要是网络号全是1,只要是主机号就是全0.
  • 怎么识别发送数据报的目标IP地址:子网掩码与IP地址相与,得到的就是子网的网络地址

无分类编址CIDR(超网)

  • 无分类域间路由选择CIDR:
    • 1.消除了传统的A类,B类和C类地址以及划分子网的概念
    • 2.CIDR记法:IP地址后加上/,然后写上网络前缀(可以任意长度)的位数
    • 3.融合子网地址与子网掩码,方便了子网划分
  • CIDR地址块
    • 只要网络前缀都相同的连续IP地址就同属于一个地址块
  • 构成超网:将多个子网聚合成一个较大的子网或叫路由聚合
    • 方法:将网络前缀缩短。
  • 最长前缀匹配
    • 使用CIDR时候,查找路由表可能得到几个匹配结果,应选择具有最长网络前缀的路由
    • 前缀越长,地址块越小,路由越具体

ARP协议

  • 发送数据的过程
    • ARP高速缓存(IP地址与MAC地址的映射)
    • image-20221011144044073
    • image-20221011144024726
    • 除此之外还得价格目的地址的MAC地址
    • 首先广播一个ARP请求(先封装成数据帧)image-20221011144140528
      • 当交换机收到广播端口,会把它从所有端口发出。
      • 其实说白了就是MAC1地址在寻找MAC3地址的一个过程
    • 当目的MAC地址收到请求消息则会返回一个单播ARP响应分组image-20221011144437812
      • 其实就是和源地址说明我在哪个位置。
        注意:以上都是一个子网内的方法
  • 如果IP1想发送分组到IP5,
  • image-20221011145058836
    • 1.还是先储存源地址和目的地址的信息以及MAC1地址
      1. 因为是一个跳网段的传输,因此首先会查询自己默认网关的目的地址。
    • 3.所以下一跳,一定先跳到默认网关上,也就是寻找MAC6而不是MAC5
    • 4.所以响应分组先是由默认网关返回
    • 然后会被封装成image-20221011150015189
    • 如上图就是说源地址与目的地址并没有变化,但物理地址缺发生了变化。
    • 到达MAC8后再封装成image-20221011150307293
    • 继续发送ARP请求分组寻找MAC5
      最终的总局:
  • IP1 > IP5(始终不变)
  • Mac1 > Mac 6 Mac7>Mac8 Mac9>Mac5

总结:

  • 由于在实际网络的链路上传送数据帧时候,最终必须使用MAC地址
  • ARP协议:完成主机或路由器IP地址到MAC地址的映射。
  • ARP协议使用过程:
    • 检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装并广播ARP请求分组,同一局域网中所有主机都能 收到该请求。
    • 目的主机收到请求后就会向源主机单播一个ARP响应分组,源主机收到后将此映射写入ARP缓存
    • ARP协议4种经典情况:
      • 主机A发给本网络上的主机B:用ARP找到主机B的硬件地址;
      • 主机A发给另一网络上的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址;
      • 路由器发给本网络的主机A:用ARP找到主机A的硬件地址
      • 路由器发给另一网络的主机B:用ARP找到本网络上的一个路由器的硬件地址。

DHCP协议

  • 动态主机配置协议DHCP是应用层协议,使用的是客户/服务器方式,客户端和服务端通过广播方式进行交互,基于UDP。

  • DHCP提供即插即用联网的机制,主机可以从服务器动态获取IP地址,子网掩码,默认网关,DNS服务器名称与IP地址,且允许地址重用,支持移动用户加入网络,支持在用地址续租。

  • 主要流程:

    • 主机进入后会寻找DHCP服务器,广播一个DHCP发现报文
    • DHCP服务器广播DHCP提供报文
    • 主机广播DHCP请求报文
    • DHCP服务器广播DHCP确认报文

ICMP协议

  • ICMP差错报告报文(5种)
    • 1.终点不可达:当路由器或者主机不能交付数据报时候就向源点发送终点不可达报文。
    • 2.时间超过:但路由器收到生存事件TTL=0的数据报时候,除了丢弃该数据报以外,还要向源点发送事件超过报文。当终点再预先规定的时间内不能收到一个数据报全部的数据报片时,就把已经收到的数据报片都丢弃掉,并向源点发送时间超过报文。
    • 3.参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确,就丢弃该数据报,并向源点发送参数问题报文。
    • 4.改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发给另外的路由器(可通过更好的路由)。
    • 5.源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率缓慢(注意:很多都已经停止使用了)
  • ICMP差错报告报文数据字段
    • image-20221011160932524
  • 不应该发送ICMP差错报文
    • ICMP差错报告报文不再发送ICMP差错报告报文。(因为ICMP差错报告报文也是一个IP数据报)
    • 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
    • 对具有组播地址的数据报都不发送ICMP差错报告报文
    • 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错数据报文
  • ICMP询问报文 、
    • 1.回送请求和回答报文:主机或路由器向特定目的主机发送的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。(测试目的站是否可达以及了解其相关状态)
    • 2.时间戳请求和回答报文:请某个主机或路由器回答当前的日期和时间。(用来进行时钟同步和测量时间)
  • ICMP应用
    • PING:测试 两个主机之间的连通性,使用了ICMP回送请求和回答报文
    • Traceroute:跟踪一个分组从源点到终点的路径,使用了ICMP时间超过差错报告报文

IPv6

  • IPv6数据报格式
  • image-20221011200337302
  • image-20221011213629483
    • 优先级: 区分数据报的类别和处理优先级
    • 流标签:“流”是互联网上从特定源点到特定终点的一系列数据报,所有属于同一个流的数据报都具有同样的流标签
    • 有效载荷长度:(扩展首部+数据)的大小
    • 下一个首部:标识下一个扩展首部或上层协议首部
    • 跳数限制:类似于生存时间TT,不过依然是返回一个ICMP差错报文

IPv4与IPv6区别

  • IPv6将地址从32位扩大到128位,扩展了更大的地址空间

  • IPv6将IPv4的校验和字段彻底删除,以减少每跳的处理时间

  • 加快了路由器的处理效率

  • IPv6支持了即插即用的自动配置,不需要了DHCP协议

  • IPv6首部长度必须是8B的整数倍,IPv4首部是4B的整数倍

  • IPv6只能在主机处分片,IPv4可以在路由器以及主机上分片

  • 但IPv6的分组过大就会返回一个附加报文:ICMPv6

  • IPv6支持资源的预分配,支持实时视像等要求,保证一定的带宽和时延的应用

  • IPv6取消了协议字段,改成了下一个首部字段

  • IPv6取消了总长度字段,改用有效载荷长度字段

  • IPv6取消了服务类型字段

  • IPv6地址表示形式

    • 冒号十六进制记法
      +image-20221011220335686
  • IPv6基本地址类型

    • 单播:一对一通信,可做源地址+目的地址
    • 多播:一对多通信,可做目的地址
    • 任播:一对多中的一个通信,可做目的地址
  • IPv6向IPv4的过渡

    • 双栈协议:image-20221011221301471
    • 隧道技术: image-20221011221311689

RIP协议及距离向量算法

  • 路由选择协议

    • 1.内部网关协议IGP:一个AS内使用的RIP,OSPF
    • 2.外部网关协议EGP:AS之间使用的是BGP
    • RIP使用的是距离向量:面对较小的网络
    • OSPF使用的是链路状态:面对较大的网络
  • RIP协议

    • 是一种分布式的基于距离向量的路由选择协议。
    • 要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录
  • 距离(俗称跳数)

    • 从源端口到目的端口所经过的路由器个数,经过一个路由器跳数+1.
    • RIP允许一条路由最多只能包含15个路由器,因此距离为16表示网络不可达
  • RIP协议交换

    • 仅能和相邻的路由器交换消息
    • 路由器交换的信息是自己的路由表
    • 每30秒交换一次路由信息,然后路由器根据新信息更新路由表。
    • 如果超过了180s后,没有收到邻居路由器的通告,则判定为邻居已经死了,并且更新自己的路由表
  • 收敛

    • 经过多次更新后,所有的路由器最终都会知道到达本自治体系任何一个网络的最短距离和下一跳路由器的地址
  • 距离向量算法

    • 1.对地址为X的相邻路由器发来的RIP报文。修改此报文中的所有项目:把下一跳字段中的地址改为X,并把所有的“距离”字段+1.
    • 对修改后的RIP报文中的每一个项目,进行一下步骤:
    • R1路由表中没有Net3,则把该项目填入R1路由表中
    • R1路由表中若没有Net3,则查看下一跳的路由器地址:若下一跳是X。则用收到的项目替换路由表中的项目;若没有,原来距离比从X走的距离远则更新,否则不处理
    • 若180s还没有收到路由器的X的更新路由表,则把X记为不可达路由器,即把距离设置为16.
  • RIP协议的报文格式

    • image-20221012165443308

OSPF协议以及链路状态算法

  • OSPF协议

    • 路由器会使用类似于广播的叫做洪泛法向自治系统内所有路由器发送信息。
    • 发送的信息是与本路由器相邻的所有路由器的链路状态。
    • 只有当链路状态发生变化时候,路由器才向所有路由器洪泛发送信息。
  • 链路状态路由算法

    • 1.路由器会向邻居发送Hello问候分组,并且了解邻居节点的网络地址
    • 2.设置它邻居的成本度量metric
    • 3.构造一个DD数据库描述分组,向邻居给出自己的链路状态数据库中的所有链路信息
    • 4.如果数据库里面的摘要,自己都有的话,则不会做出任何处理。如果没有的话则会请求更新发送LSR链路状态请求分组请求得到自己没有的信息
    • 如果一个路由器收到了LSR分组以后,他会发送LSU链路状态更新分组进行更新
    • 更新后,邻居会和你说LSAsk链路状态确认分组进行确认
  • 只要有一个路由器变化:

    • 洪泛发送LSU链路状态更新分组进行更新
    • 更新后,其他站返回一个LSAsk链路状态确认分组进行确认
    • 使用Dijkstra根据自己的链路状态数据库构造到其他节点间的最短路径
  • OSPF分组的格式

  • image-20221012173536847

    • OSPF直接使用的是IP数据报的格式传送。
  • 特点

    • 每隔30min,刷新一次数据库的链路状态。
    • 由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系。因此当互联网规模很大时,OSPF协议要比距离响亮协议RIP要好的。
    • OSPF协议不存在坏消息传的慢,他的收敛速度很快。

BGP协议

  • BGP可以是一个AS边缘路由器

  • 它会与其他AS的邻站BGP发言人交换信息

  • 交换是网络可达性信息,即到达某个网络所要经过的一系列AS

  • 发生变化时候更新有变化的部分

  • BGP协议报文格式

    • image-20221012213451408
    • 一个BGP发言人与其他自治系统中的BGP发言人要求交换路由信息,就要建立TCP连接,即通过TCP传送,然后在此链接上交换BGP报文以建立BGP会话,利用BGP会话交换路由信息
    • BGP是应用层协议,借助TCP传送
  • 特点

    • BGP支持CIDR
    • 节省网络资源
  • BGP-4四种报文

    • OPEN报文:用来与相邻的另一个BGP发言人建立关系,并认证发送者
    • UPDATE报文:通告新路径或撤销源路径
    • KEEPALIVE报文:在无UPDATE时,周期性证实邻站的连通性;作为OPEN的确认
    • NOTIFICATION报文:报告先前报文的差错:也被用于关闭连接

IP组播

  • IP数据报的三种传输方式
    • 单播:用于发送数据包到单个目的地,且每发一份单播报文都用一个单播IP地址作为目的地址,是点对点传输方式
    • 广播:发送数据包到同一广播域或子网内的所有设备的一种数据传输方式,是一种点对多点传输方式
    • 组播:仅发送一次数据,借助组播路由协议为组播数据包建立组播分发树,被传递的数据到达距离用户端尽可能近的节点后才开始复制和分发,是一种点对多点的传输方式
  • 特点
    • 组播数据报也是“尽最大努力交付”,不提供可靠交付,应用于UDP
    • 对组播数据报不产生ICMP差错报文。
    • 并非所有D类地址都可以作为组播地址

IGMP网际组管理协议

  • IGMP协议让路由器知道本局域网上是否有主机(的进程)参加或退出某个组播组。
  • 1.某主机想要加入组播组时,该主机会向组播组发送一个IGMP报文,声明自己要成为改组成员本地收到IGMP报文后,利用组播路由选择协议把这组成员关系发给因特网上的其他组播路由器
  • 2.本地组播组路由器周期查询本地局域网上的主机,清楚这些主机是否还是该组播组成员,只要有一个主机对某个分组响应,则该组播组会认定该主机是活跃的,如果没有组播路由器则认定网络上没有这个组播组的主机。因此不会再把这组的成员关系发给其他组播路由器。

移动IP

  • 相关术语
    • 移动结点:具有永久的IP地址的移动设备
    • 移动IP技术:以固定的网络IP地址,实现跨越不同网段的漫游功能,并且保证了基于网络IP的网络权限在漫游过程中不发生任何改变
    • 归属代理(本地代理):一个移动结点拥有的“居所”称为归属网络,在归属网络中代表移动节点执行移动管理功能的实体叫做归属代理
    • 外部代理(外地代理):在外部网络中帮助移动节点完成移动管理功能得实体称为外部代理
    • 永久地址:移动站点在归属网络中得原始地址
    • 转交地址:移动结点在外部网络使用的临时地址
  • 移动IP通信过程
    • A刚进入外地网络
      • 1.在外部代理登记获得一个转交地址,离开时候注销
      • 2.外部代理向本地代理登记转交地址。
    • B给A发送数据报
      • 1.本地代理截获数据报
      • 2.本地代理再封装数据报,新的数据报目的地址是转交地址,发送给外部代理(隧道)
      • 3.外部代理拆封数据报并发给A
    • A给B发送数据报
      • A用自己的主地址作为数据报源地址,用B的IP地址作为数据报的目的地址