https://www.bilibili.com/video/BV1Up411Z7hC?p=61
如有错误之处请指出,谢谢!
目录
p61-p62
Internet网络层:
由主机、路由器网络层完成网络层的主要功能
ICMP:互联网控制报文协议,IP协议的伴随协议,与IP协议共同实现
IP数据报(分组)格式
固定部分在所有IP数据报中固定
第四版IP协议
版本号字段占4位:IP协议的版本号
E.g.4--->IPv4 E.g.6--->IPv6
首部长度字段占4位:IP分组首部长度(最大值为15无法给出全部长度20固定+可变)
以4字节为单位(首部长度×4才是IP分组首部长度)
e.g.5---->IP首部长度为20(5×4)字节
服务类型(TOS)字段占8位:指示期望获得哪种类型的服务
1998年这个字段改名为区分服务
只有在网络提供区分服务(DiffServ)时使用
一般情况下不使用,通常IP分组的该字段(第2字节)的值为00H
总长度字段占16位:IP分组的总字节数(首部加数据)
以字节为单位
最大IP分组的总长度:65535B
最小的IP分组首部:20B
IP分组可以封装的最大数据:65515B
标识、标志位、片偏移跟IP分片相关,见下文
生存时间(TTL)字段占8位:IP分组在网络中可以通过的路由器数(或跳步数)
路由器转发一次分组,TTL减1
如果TTL=0,路由器则丢弃该IP分组,并向源主机发送ICMP报文
协议字段占8位:指示IP分组封装的是哪个协议的数据包(TCP/UDP/ICMP)
实现复用/分解
E.g.6为TCP,表示封装的为TCP段;17为UDP,表示封装的是UDP数据报
首部校验和字段占16位:实现对IP分组首部的差错检测
计算校验和时,该字段置全0
采用反码算术运算求和,和的反码作为首部校验和字段
逐跳计算、逐跳校验
因为每一跳TTL等字段需要改变,所以每次都要置0
源IP地址、目的IP地址字段各占32位:分别标识发送分组的源主机/路由器(网络接口)和接受分组的目的主机/路由器(网络接口)的IP地址
选项字段占长度可变,范围在0~40B之间:携带安全、源选路径(在源主机确定发送路径)、时间戳、路由记录等内容
实际上很少被使用(所以典型的IP头部为20字节)
填充字段占长度可变,范围在0~3B之间:目的是补齐整个首部,符合32位对齐,即保证首部长度是4字节的倍数
IP数据报分片
最大传输单元(MTU)
网络链路存在MTU(最大传输单元)---链路层数据帧可封装数据的上限
不同链路的MTU不同
当一个数据报在1里面可以传输但是在2里面不能够传输
IP分片与重组
大IP分组向较小MTU链路转发时,可以被“分片”(fragmented)
如果不能分片则直接扔掉,并向源主机发送一个ICMP报文
1个IP分组分为多片IP分组
IP分片到达目的主机后进行“重组”(reassembled)
Q:如果在IP分片时不能够很好的记录哪个是分片的,顺序是什么?
IP首部的相关字段用于标识分片以及确定分片呃相对顺序
Q: 如果分片的IP分组某一片丢掉了?
目的主机等待一段时间后,将其余全部IP分组丢掉
标识字段占16位:标识一个IP分组
IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识
IP协议通过标志ID以及源、目的IP地址、协议字段来实现对分组的唯一标识
标志位字段占3位
片偏移字段占13位:一个IP分组分片封装原IP分组数据的相对偏移量
如果没有分片片偏移量位0
片偏移量表示从哪一个数据开始封装
在IPv4中,片偏移字段以8字节为单位(8×n,除了最后一片前面所有的封装分片都是8的倍数)
分片过程
假设原IP分组总长为L,待转发链路的MTU为M
若L>M且DF=0,则可以/需要分片
分片时每个分片的标识复制原IP分组标识
通常分片时,除最后一个分片,其他分片均分为MTU允许的最大分片
一个最大分片可封装的数据应该是8的倍数,因此,一个最大分片可封装的数据为:
向下取整
需要的总片数为:
向上取整
每片的片偏移字段取值为
第一片片偏移量一定为0
每片的总长度字段为
每片的MF标志位为:
eg:
Q:MTU是1504,分片结果为什么
A: 不变,因为分片长度为8的倍数