ip服务的特点:
无状态、不可靠、无连接
ipv4的结构:
4位版本号,IPV4为4
4位头部长度
8位TOS,三位代表优先权,四位代表最小延时、最大吞吐量、最高可靠性、最小费用
16位总长度(字节数),是指ip数据报的长度,以字节为单位,最大长度到65535字节,但由于MTU限制,到不了那么大;
16位标识,唯一的标识主机发送的每一个数据报,初始值由系统生成;
3位标志段,第一位保留,第二位禁止分片(不对数据分片,IP数据长超过MTU的情况下,IP模块丢弃数据报并返回一个ICMP差错报文),第三位表示更多分片,除了最后一片,其他的分片都要置为1
13位分片偏移量,指数据部分的偏移。实际偏移量是该值左移三乘8后得到的。由于这个原因,除了最后一个IP分片外,每个分片的长度都应该是8的整数倍。
8位生存时间(TTL),跳过一个路由TTL减1.当减为0时候被丢弃,并且由ICMP返回一个数据报
8位的协议,/etc/protocols中有定义,ICMP=1,TCP=6,UDP=17
16位头部校验和,CRC算法
32位源端IP地址
32位目的端IP地址
40字节保留,可以记录的有,路由、时间戳、松散源路由选择、严格源路由选择
使用tcpdump可以观察Ipv4结构
IP分片:
当总长度大于MTU时候需要进行IP分片;
IP路由:
IP模块的工作流程:
网络驱动程序->IP输入队列->处理IP头部->是否发生本机数据包->是->udp/tcp/ICMP
->否->计算下一跳路由->IP输出队列->网络驱动
^
路由表(RIP/BGP)(route命令)
路由机制:
路由表结构:
Destination:目标网络或主机
Gateway:网关地址,
GenMask:网络掩码
Flags:U(路由项是活动的)/H(是一台主机)/G(目标是网关)/D(路由项重定义生成)/M(被重定向修改过)
Metric:路由距离
Ref:引用次数
Use:路由被使用的次数
Iface:路由项对应的输出网卡接口
1)查找路由表中和数据报中的完全一样的IP地址,找到就选用,找不到进行第二项
2)查找路由表和数据报中具有完全一样的网络ID的地址
3)选择默认的路由项,意味是网关
路由表的更新:
用route add 命令更新
BGP/ISP/OSPF发现路径并更新
IP转发:
linux下通过设置/proc/sys/net/ipv4/ip_forward 允许主机和路由一样拥有转发功能;
流程:
1)检查TTL,为0丢弃;
2)查看IP头部的严格路由选项,若是则检查是否是本机的某个IP地址,如不是,发送ICMP;
3)如有必要,向发送源发生ICMP重定向报文,以告诉他更合适的下一个路由器;
4)TTL值-1;
5)处理头部选项;
6)有必要,进行IP分片;
主机重定向实例:
IPV6头部结构: