本目内容还是为上课笔记,主要为自己总结。所以,写的不是很规范。
承接上一目,本目主要将网络层的相关内容。
主要有一下几个内容:
- IP数据报格式
- 网际校验和的计算
- 路由的先关内容
IP数据报格式
首先,给出其格式的图示:
版本
- 长度:4位
- 含义:IP协议版本号。4代表IPv4, 6代表IPv6。
首部长度
- 长度:4位
- 含义:IP头部数据的长度。以32位的字节为单位(4B),最大值为0x1111,最小值为0x0101。所以,最大长度为4B×15 = 60B,最小长度为4B×5 = 20B。
服务类型(TOS)
- 长度:8位
- 含义:服务类型。此字段包含3位的优先权,4位的服务类型。1位的保留位(必须置0)。
总长度
- 长度:16位(2B)
- 含义:IP数据包的总长度。该字段包含IP的头部和数据部分。IP数据报最大可达65535个字节
标识
- 长度:16位
- 含义:用来标示一个IP数据报,每发送一个,此值会加1。
标志与片偏移
- 长度:3位
- 含义:
- 其中第一位不使用.
- 第二位DF(Don’t Fragment),该位如果为1,表示不分片。即如果传输的数据超过MTU,该数据报会被丢弃,并且返回一个ICMP差错报文。
- 第三位是MF(More Fragment),表示是否有更多的分片。该位如果为1,说明有后续分片。最后一片MF为0。IP分片之后,每一个分组都有自己的首部,但是片偏移值不同,通过片偏移值,接收端可以重组IP数据报。
TTL(Time To Live)
- 长度:8位
- 含义:表示数据报最多可经过的路由器数量。数据报每经过一个路由器,TTL减1,减为0时丢弃。并发送ICMP数据报通知源主机。TTL可以避免数据报在路由器之间不断循环。
协议类型
- 长度:8位
- 含义:表示IP层之上,承载的是哪个高级协议。在封装与分用的过程中,协议栈知道该交给哪个层的协议进行处理。6-TCP,17-UDP
头部校验和
- 长度:16位
- 含义:保证数据头部的数据完整性,但教研不包括数据部分。这样做的目的有二:
- 所有将数据封装在IP数据包中的高层协议均含有覆盖整个数据的校验和,因此在IP数据报中没有必要再对其所承载的数据部分进行校验。
- 每经过一个路由器,IP数据报的头部要发生改变,而数据部分不变。这样只对发生改变的头部进行校验,显然不会浪费太多时间。为了减少计算时间,一般不用CRC校验码,采用更简单的网际校验和。
源IP地址
- 长度:32位
- 含义:源端的IP地址
目的IP地址
- 长度:32位
- 含义:目的端的IP地址
选项与填充
- 长度:选项为4字节整数倍,否则用0填充。
- 含义:
网际校验和
假设,当数据传输正确时。
初始时,校验和部分全0。校验和部分取反码得到0x1111。
checksum发送端=IP首部(不含校验和)反码+0x1111(1)
checksum接收端=IP首部(不含校验和)反码+checksum发送端反码(2)
将(1)带入(2)有:
checksum接收端=IP首部(不含校验和)反码+IP首部(不含校验和)+0x0000(3)
整理得:
checksum接收端=0x1111(4)
所以,当数据传输正确时,收端校验和是全1。如果接收端校验和不是全1,肯定是错误的。但是,这只是充分非必要条件。接收端校验和全为1并不能说明数据传输是正确的。
路由搜索的规则
- 搜索匹配的主机地址
- 搜索网络地址
- 搜索默认表项