IP协议详解
从两个方面讨论IP协议:
1.IP头部信息。用于指定IP通信的源端IP地址,目的端IP地址,指导IP分片和重组以及指定部分通信行为。
2.IP数据报的路由和转发。
IPv4头部结构
IP路由
当IP模块接收到来自数据链路层的IP数据报时,首先对该数据报的头部做CRC校验,确认无误之后就分析其头部的具体信息。若该IP数据报的头部设置了源站选路选项,则IP模块调用数据报转发子模块来处理。若目标IP地址是本机,即该数据报是发送给本机的。若IP模块发现这个数据报不是本机的,则调用数据报转发子模块来处理该数据报。
数据报转发子模块检测系统是否允许转发,若不允许,IP模块就将该数据报丢弃;若允许,数据报转发子模块将对该数据报执行一些操作,然后交给IP数据报输出子模块。
路由机制
使用route命令查看路由表
IP的路由机制:
1.查找路由表中和目标IP地址完全匹配的主机IP地址。若找到,就使用该路由项。没找到则转步骤2.
2.查找路由表中和数据报的目标IP地址具有相同网络ID的网络IP地址(即网关:表示处于同一个网络)。若找到,就使用该路由项。没找到则转步骤3.
3.选择默认路由项,这通常意味着数据报的下一跳路由是网关。
IP转发
路由器都能执行数据报的转发操作,而主机一般只发送和接受数据报,这是因为主机上 /proc/sys/net/ipv4/ip_forward 内核参数默认被设置为0。通过修改它使能主机的数据报转发功能 (修改为1).
对于允许IP数据报转发的系统(主机或路由器),数据报转发子模块将对期望转发的数据报执行如下操作:
1.检查数据报头部的TTL值。如果TTL值已经是0,则丢弃该数据报。
2.查看数据报头部的严格源路由选择选项。如果该选项被设置,则检测数据报的目标IP地址是否是本机的某个IP地址。若不是,则发送一个ICMP源站选路失败报文给发送端。
3.如果有比要,则给源端发送一个ICMP重定向报文,告诉它一个更合理的下一跳路由器。
4.将TTL值减1。
5.处理IP头部选项。
6.如果有必要,执行IP分片操作。
IPv6固定头部结构
IPv6扩展头部
可变长的扩展头部使得IPv6能支持更多的选项,并且很便于将来的扩展需要。