LWIP学习笔记(2)---IP协议

IP首部

LWIP学习笔记(2)---IP协议
最高位在左边记为0bit,最低位在右边,记为31 bit.
传输顺序:先0-7bit,在8-15bit,然后16-13,最后24-31bit
这种方式称为 big endian,也叫网络字节序

版本:4(ipv4) 或 6(ipv6)

首部长度:正常为5(假设可选字段为0),最大15(可选字段全满加上原有字段)

服务类型:3bit优先权字段(现已忽略),4bit TOS字段和1bit未用位但必须置0.
4bit TOS 分别代表:最小时延,最大吞吐量,最高可靠性和最小费用.
4bit 中只能置其中1bit,若均为零,意味着是一般服务.

总长度:IP数据报长度,以字节为单位,最大65535.
大多会进行分片,一般主机也要求不能接收超过576字节的数据报.
根据总长度和首部长度,可知data段大小.

标识: 该字段包含一个唯一值,该值在数据报分片时被复制到每个片中.
每次发送数据报都讲一个“内部计数器”加1,然后将数值复制“标识”字段中。

标志:标志字段用其中一个比特来表示“更多的片”。除了最后一片外,其他每
个组成数据报的片都要把该比特置 1。
标志字段中有一个比特称作“不分片”位。如果将这一比特置 1,I P将不对数据报
进行分片。

片偏移: 该片偏移原始数据报开始处的位置.

生存时间: 该字段用于设置一个“数据报可经过的路由器数量”的上限。TTL
发送方在初始发送时设定某个值(建议为64,、128或255),每台路由器再转发时都将其减一,当字段达到0时,该数据报被丢弃,并使用一个ICMP消息通知发送方。

协议:包含一个数字,该数字对应一个“有效载荷部分的数据类型”。比如17代表UDP,6代表TCP。

首部校验和:根据 I P首部计算的检验和码。它不对首部后面的数据进行计算。

为了计算一份数据报的 I P检验和,首先把检验和字段置为 0。然后,对首部中每个 16 bit进行二进制反码求和(整个首部看成是由一串 16bit的字组成),结果存在检验和字段中。当收到一份 I P数据报后,同样对首部中每个 16bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全 1(即检验和错误),那么I P就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。

选项:
选项很少被使用,并非所有的主机和路由器都支持这些选项。
选项字段一直都是以 32 bit 作为界限,在必要的时候插入值为 0的填充字节。这样就保证I P首部始终是 32 bit 的整数倍(这是首部长度字段所要求的)。

IPV4网络分为5大类:
A类: 0-127
B类: 128-191
C类: 192-223
D类: 240-255

ip地址分成3级:网络号(16位),网络号(8位),主机号(8位)

子网掩码: 根据二进制首位格式判断属于第几类网络

IP转发
参考: https://blog.****.net/qq_37653144/article/details/81362254
IP数据经过路由器转发到目的主机.
大多数主机可配置成路由器,也可配置成主机.
区别在于:主机不会转发那些不是自己生成的数据,而路由器会转发.
IP模块收到一个数据包时,先查询目的地址是不是自己(IP),如果不是,且配置为路由器,则根据"转发表"转发该数据; 负责丢弃此数据报,给源节点返回错误.

转发表
包含目的地址,掩码,网关地址(下一跳地址)和接口.

当一台主机或路由器需要向下一跳转发数据报时,它首先检查数据报中的IP地址。在算法表中使用该IP地址来执行最长前缀匹配算法。

收到包---->读取目标的逻辑地址的网络部分,查找路由表
—>找到对应条目---->转发到对应接口
—>没找到 ----> 转发到默认路由
—>没配置默认路由 ---->丢弃

IP分片
参考: https://www.cnblogs.com/red-code/p/7132023.html

标识符:
主机将数据报分片后,在发送前,会给每一个分片数据报一个ID值,放在16位的标识符字段中。
这个ID值可以用来识别哪些分片是属于同一个数据报的,方便重组。

标志:
标志字段在IP报头中占3位,
第1位作为保留,置0;
第2位,分段,有两个不同的取值:该位置0,表示可以分段;该位置1,表示不能分段;
第3位,更多分段,同样有两个取值:该位置0,表示这是数据流中的最后一个分段,该位置1,表示数据流未完,后续还有分段,当一个数据报没有分段时,则该位置0,表示这是唯一的一个分段。
当目的主机接收到一个IP数据报时,会首先查看该数据报的标识符,并且检查标志位的第3位是置0或置1,以确定是否还有更多的分段,如果还有后续报文,接收主机则将接收到的报文放在缓存直到接收完所有具有相同标识符的数据报,然后再进行重组。

偏移量:
指明“该分片在原数据报中的位置顺序”, 字节