2.Linux 高性能服务器编程 --- IP 协议详解

2.IP 协议详解
	当ip模块接收到来自数据链路层的ip数据报时,它首先对该数据报的头部做crc校验,确认无误后就分析其头部信息。

	如果该ip数据报的头部设置了源站路由选项(松散源路由选择或严格源路由选择),则ip模块调用数据报转发子模块来处理该数据报。如果该
  ip数据报的头部中目标ip是本地的某个ip地址,或者是广播地址,即该数据报是发送给本机的,则ip模块就根据数据报头部中的协议字段来决定
  将它派发给哪个上层应用(分用)。如果ip模块发现这个数据报不是发送给本机的,则也调用数据报转发子模块来处理该数据报。

    数据报转发子模块将首先检测系统是否允许转发,如果不允许,ip模块就将数据包丢弃。如果允许,数据报转发子模块将对该数据报执行一些操作,
  然后将它交给ip数据包输出子模块。

    ip数据包应该发送到哪个下一条路由(或者目标主机),以及经过哪个网卡来发送,就是ip路由过程。ip模块实现数据报路由的核心数据结构是路由表。
  这个表按照数据报的目标ip地址分类,同一类型的ip数据报将被发往相同的下一条路由器。

    ip输出队列中存放的是所有等待发送的ip数据报,其中除了需要转发的ip数据报外,还包括封装了本机上层数据(icmp报文,tcp报文段和udp数据报)的
  ip数据报。


2.2 IP模块工作流程
		1.当ip模块接收到来自数据链路层的ip数据报时,它首先对数据报的头部进行crc校验,确认无误之后就分析其头部信息。
		2.如果该ip数据报的头部设置了源站路由选项(松散源路由选择或者严格路由选择),则ip模块调用数据报转发模块来处理该数据。
		3.如果该ip数据报的头部中目标ip地址是本机的某个ip,或者是广播地址,即该数据报是发送给本机的,则ip模块就根据数据报头部中的协议字段来决定将它派发给哪个上层应用。
		4.如果ip模块发现这个数据报不是发送给本机的,则也调用数据报转发子模块来处理该数据报。
		5.数据报转子模块将首先检测系统是否允许转发,如果不允许,ip模块就将数据报丢弃。如果允许,数据报转发子模块将对该数据报进行一些操作,然后将它交给ip数据报输出子模块。
		6.ip数据报应用发送到哪个下一跳(或者目标机器),以及经过哪个网卡来发送,就是ip路由过程。ip模块实现数据博爱路由的核心数据结构是路由表。
		7.ip输出队列中存放的是所有等待发送的ip数据报,其中除了需要转发的ip数据报之外,还包括封装了本机上层数据(ICMP报文,TCP报文段和UDP数据报)的ip数据报


2.5 IP 转发
	不是发送给本机的 ip 数据报都将由数据报转发子模块处理。路由器都能执行数据报的转发操作,而主机一般只发送和接收数据报,这是因为主机上 
  /proc/sys/net/ipv4/ip_forward 内核参数默认被设置为0.

    对于允许ip数据报转发的系统(主机或者路由器),数据报转发子模块将对期望转发的数据执行如下操作:
    	1.检查数据报头部的 TTL 值。如果 TTL 值已经是0,则丢弃该数据报。
    	2.查看数据报头部的严格源路由选择。如果该选项被设置,则检测数据报的目标ip地址是否是本机的某个ip地址。如果不是,则发送一个icmp源站路由
    	  失败报文给发送端。
    	3.如果有必要,则给源端发送一个 icmp 重定向报文,以告诉它一个更合理的下一跳路由器。
    	4.将 TTL 值减1
    	5.处理 ip 头部选项
    	6.如果有必要,则进行ip分片操作

2.2 IPv4 头部结构

 

 

2.2.2 使用 tcpdump 观察 IPv4的头部结构

 

2.3 分片

 

2.4 IP 路由

 

 

2.5 IP 转发

 

2.6 重定向

 

 

2.7 IPv6 头部

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值