IP协议它不能保证ip数据报能成功地到达目的地,IP协议仅提供最好的传输服务。
错误处理
- 丢弃该数据报
- 发送ICMP消息给数据源,通知丢弃了该数据报
- 任何可靠性必须由上层来提供(如TCP)
IP首部
IP首部,普通的IP首部长为20字节,除非含有选项字段。
- 版本(4bit)
- 目前协议版本号4,因此也叫IPv4
- 首部长度(4bit)
- 如果有选项字段,则包含选项字段
- 有多少个32bits
- 普通IP数据包(没有任何选项)该字段值是5 也就是20字节
- TOS(服务类型,8bit)
- 3bit优先权子字段(现在已经被忽略)
- 4bitTOS,分别代表
- 最小延时
- 最大吞吐量
- 最高可靠性
- 最小费用
- 4bit中只能置其中1bit
- 如果所有4bit均为0,那么就是一般服务
- 1bit未用但必须置0
- 总长度(16bit)
- 整个数据包的长度,以字节为单位
- 利用首部长度,和总长度,就能知道数据内容的起始位置和长度。
- 标识位(16bit)
- 唯一的标识主机发送的每一份数据报
- 通常每发送一份报文它的值就会加1
- 标志字段(3bit)
- 偏移字段(13bit)
- TTL(time-to-live,8bit)
- 数据报可以经过的最多路由器数
- 默认32/64,没经过一个路由器减1,
- 0时,丢弃数据报,并发送ICMP报文通知源主机。
- 协议字段(8bit)
- 识别哪个协议使用IP在传数据
- 首部校验和(16bit)
- 根据IP首部计算的校验和码。
- 不对首部后的数据进行计算
- 数据自有数据的校验位保证
- 校验方法
- 首先将首部校验和字段置0
- 对首部每个16bit进行二进制反码,
- 然后求和
- 源IP地址(32bit)
- 目的IP地址(32bit)
- 选项字段
- 安全和处理限制
- 记录路径
- 时间戳
- 宽松的源站选路
- 严格的源站选路
不同应用间,建议使用不同TOS值;tcpdump输出即是这个值。
0x10 --> 000 1000 0
三种颜色代表TOS 3bit优先权子字段,4bitTOS,1bit未用但必须置0
IP路由选择
概念上路由选择
- 目标主机与源主机直接相通
- 则IP数据报直接送到目标主机上
- 否则
- 主机把数据报发往默认的路由器上
- 由路由器来转发该数据报
IP层设置为路由功能:
- 一般来讲
- IP可以从TCP,UDP,ICMP,IGMP接收数据(本地生成的数据)并进行发送
- 路由功能
- IP还可以从一个网络接口接收数据报(待转发的数据报)并进行发送。
- IP层在内存中维护一个路由表,路由表每一项包含
- 目的IP地址
- 下一站路由器的IP地址
- 标志(两个)。
- 1个指明目的IP地址是网络地址还是主机地址。
- 2个指明下一站路由器是否为真正的下一站路由器。
- 为数据报的传输指定一个网络接口
- 主要完成的工作
- 搜索路由表,完全匹配
- 寻找能与目的IP地址完全匹配的条目。
- 找到,则把报文发给该条目指定的下一跳路由
- 搜索路由表,网络号匹配
- 寻找能与目的网络号相匹配的条目
- 找到,则把报文发给该条目指定的下一跳路由
- 搜索路由表,寻找标为“默认”的条目
- 则把报文发送给该表目指定的下一站路由器。
- 上面三步都失败
- 数据不能被传送,
- 优先级 主机匹配-->网络匹配-->默认路由
- 搜索路由表,完全匹配
子网寻址
不是把IP地址看成由单纯的一个网络号和一个主机号组成,
而是把主机号再分成一个子网号和一个主机号。
这样做的原因是因为 A类和B类地址为主机号分配了太多的空间,
可分别容纳的主机数为2^24-2和2^16-2。
主机好全0,全1 是无效地址。
与30个C类地址相比,用一个包含30个子网的B类地址的好处是,它可以缩小路由表的规模。
子网掩码
- 32bit
- 确定哪些是网络号(1),哪些是主机号(0);
- 给定IP地址和子网掩码后
- 主机就可以确定IP数据报的目的地
- 本子网上的主机
- 本网络中其他子网中的主机
- 其他网络上的主机
- 主机就可以确定IP数据报的目的地